201041_07
authorhgs
Wed, 20 Oct 2010 13:58:28 +0100
changeset 293 0659d0e1a03c
parent 291 206a6eaaeb71
child 296 94f2adf59133
child 300 1d28c8722707
201041_07
baseapitest/basesvs/FileSystemPlugins/group/T_TestFSY1.mmp
baseapitest/basesvs/FileSystemPlugins/group/T_TestFXT.mmp
baseapitest/basesvs/FileSystemPlugins/group/bld.inf
baseapitest/basesvs/FileSystemPlugins/inc/T_TestFSY.h
baseapitest/basesvs/FileSystemPlugins/inc/T_TestFSY1.h
baseapitest/basesvs/FileSystemPlugins/src/T_TestFSY.cpp
baseapitest/basesvs/FileSystemPlugins/src/T_TestFSY1.cpp
baseapitest/basesvs/FileSystemPlugins/src/T_TestFXT.cpp
baseapitest/basesvs/common/inc/DataWrapperBase.h
baseapitest/basesvs/common/inc/FileserverUtil.h
baseapitest/basesvs/common/inc/TestStepV2.h
baseapitest/basesvs/common/src/DataWrapperBase.cpp
baseapitest/basesvs/common/src/FileserverUtil.cpp
baseapitest/basesvs/common/src/TestStepV2.cpp
baseapitest/basesvs/config/t_base.tcs
baseapitest/basesvs/conformance/f32/fat32/group/bld.inf
baseapitest/basesvs/conformance/f32/fat32/group/t_base_f32_fat32.iby
baseapitest/basesvs/conformance/f32/fat32/group/t_fat32.mmp
baseapitest/basesvs/conformance/f32/fat32/inc/basetedefs.h
baseapitest/basesvs/conformance/f32/fat32/inc/sl_bpb1.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32base.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32calculate.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32checkdisk.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32clusterbound.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32filldisk.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32format.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32larger512.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32mount.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32readfile.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32readraw.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32readwrite.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32server.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32writefile.h
baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32writeraw.h
baseapitest/basesvs/conformance/f32/fat32/pkg/t_fat32.pkg
baseapitest/basesvs/conformance/f32/fat32/pkg/tfat32.bat
baseapitest/basesvs/conformance/f32/fat32/scripts/f32-fat32-conformance.script
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32base.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32calculate.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32checkdisk.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32clusterbound.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32filldisk.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32format.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32larger512.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32mount.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32readfile.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32readraw.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32readwrite.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32server.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32writefile.cpp
baseapitest/basesvs/conformance/f32/fat32/src/t_fat32writeraw.cpp
baseapitest/basesvs/conformance/f32/fat32/testdata/armv5/f32-fat32-conformance.ini
baseapitest/basesvs/conformance/f32/fat32/testdata/winscw/f32-fat32-conformance.ini
baseapitest/basesvs/group/basesvs.mrp
baseapitest/basesvs/group/bld.inf
baseapitest/basesvs/group/makerom.bat
baseapitest/basesvs/group/makesisfiles.bat
baseapitest/basesvs/group/maketdrom.bat
baseapitest/basesvs/group/readme.txt
baseapitest/basesvs/group/release.txt
baseapitest/basesvs/group/t_base.oby
baseapitest/basesvs/group/td_base.oby
baseapitest/basesvs/group/testdriversetup.bat
baseapitest/basesvs/group/testdriversetup.pl
baseapitest/basesvs/performance/f32/t_perf/group/bld.inf
baseapitest/basesvs/performance/f32/t_perf/group/t_base_f32_perf.iby
baseapitest/basesvs/performance/f32/t_perf/group/t_perf.mmp
baseapitest/basesvs/performance/f32/t_perf/inc/BaseStep.h
baseapitest/basesvs/performance/f32/t_perf/inc/BaseStep.inl
baseapitest/basesvs/performance/f32/t_perf/inc/EntryStep.h
baseapitest/basesvs/performance/f32/t_perf/inc/F32PerformanceServer.h
baseapitest/basesvs/performance/f32/t_perf/inc/ReadFileStep.h
baseapitest/basesvs/performance/f32/t_perf/inc/SeekFileStep.h
baseapitest/basesvs/performance/f32/t_perf/inc/UtilsCleanupStep.h
baseapitest/basesvs/performance/f32/t_perf/inc/UtilsSetupStep.h
baseapitest/basesvs/performance/f32/t_perf/inc/UtilsStep.h
baseapitest/basesvs/performance/f32/t_perf/inc/WriteFileStep.h
baseapitest/basesvs/performance/f32/t_perf/pkg/t_perf.pkg
baseapitest/basesvs/performance/f32/t_perf/pkg/tperf.bat
baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfile-performance-large.script
baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfile-performance-medium.script
baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfile-performance-small.script
baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfs-performance-large.script
baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfs-performance-medium.script
baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfs-performance-small.script
baseapitest/basesvs/performance/f32/t_perf/src/BaseStep.cpp
baseapitest/basesvs/performance/f32/t_perf/src/EntryStep.cpp
baseapitest/basesvs/performance/f32/t_perf/src/F32PerformanceServer.cpp
baseapitest/basesvs/performance/f32/t_perf/src/ReadFileStep.cpp
baseapitest/basesvs/performance/f32/t_perf/src/SeekFileStep.cpp
baseapitest/basesvs/performance/f32/t_perf/src/UtilsCleanupStep.cpp
baseapitest/basesvs/performance/f32/t_perf/src/UtilsSetupStep.cpp
baseapitest/basesvs/performance/f32/t_perf/src/UtilsStep.cpp
baseapitest/basesvs/performance/f32/t_perf/src/WriteFileStep.cpp
baseapitest/basesvs/performance/f32/t_perf/testdata/armv5/base_perf_f32_env.ini
baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfile-performance-large.ini
baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfile-performance-medium.ini
baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfile-performance-small.ini
baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfile-performance-utils.ini
baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfs-performance-large.ini
baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfs-performance-medium.ini
baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfs-performance-small.ini
baseapitest/basesvs/performance/f32/t_perf/testdata/winscw/base_perf_f32_env.ini
baseapitest/basesvs/prompt/group/bld.inf
baseapitest/basesvs/prompt/group/t_prompt.mmp
baseapitest/basesvs/prompt/src/t_prompt.cpp
baseapitest/basesvs/scripts/setup_t_base.script
baseapitest/basesvs/scripts/t_base.script
baseapitest/basesvs/testsuites/base/base.driver
baseapitest/basesvs/testsuites/group/bld.inf
baseapitest/basesvs/validation/f32/group/bld.inf
baseapitest/basesvs/validation/f32/sfsrv/group/bld.inf
baseapitest/basesvs/validation/f32/sfsrv/group/t_dual_drive.iby
baseapitest/basesvs/validation/f32/sfsrv/group/t_dualdrive_testdata.iby
baseapitest/basesvs/validation/f32/sfsrv/group/t_sfsrv.iby
baseapitest/basesvs/validation/f32/sfsrv/group/t_sfsrv.mmp
baseapitest/basesvs/validation/f32/sfsrv/group/t_sfsrv_binaries.iby
baseapitest/basesvs/validation/f32/sfsrv/group/t_sfsrv_testdata.iby
baseapitest/basesvs/validation/f32/sfsrv/group/td_sfsrv.iby
baseapitest/basesvs/validation/f32/sfsrv/inc/T_ActiveNotifyChange.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_DirData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_DirScanData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_DriveUnitData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_EntryArrayData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_EntryData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileActiveCallback.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileManData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileNamesIdenticalData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileTextData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_FindFileData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_FormatData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_FsData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_OpenFileScanData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_ParseBaseData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_ParseData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_ParsePtrCData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_ParsePtrData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_RDirData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_RawDiskData.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_SfSrvServer.h
baseapitest/basesvs/validation/f32/sfsrv/inc/T_SfSrvServer.inl
baseapitest/basesvs/validation/f32/sfsrv/inc/T_VolumeInfoData.h
baseapitest/basesvs/validation/f32/sfsrv/pkg/dualdrive.pkg
baseapitest/basesvs/validation/f32/sfsrv/pkg/t_sfsrv.pkg
baseapitest/basesvs/validation/f32/sfsrv/pkg/tsfsrv.bat
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Dir-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-DirScan-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-DriveUnit-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Entry-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-EntryArray-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-File-PublicApi-NAND.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-File-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FileMan-PublicApi-OS.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FileMan-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FileNamesIdentical-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FileText-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FindFile-PublicApi-OS.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FindFile-PublicApi-REM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Format-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Format-PublicApi-REM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Format-PublicApi-ROM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-OpenFileScan-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Parse-Inherited-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Parse-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-ParsePtr-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-ParsePtrC-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RDir-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Drives-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Drives-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Drives-PublicApi-REM-manual.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Drives-PublicApi-REM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Files-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Files-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Misc-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Misc-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Mounts-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Mounts-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-PublicApi-OS.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-PublicApi-ROM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RawDisk-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RawDisk-PublicApi-REM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-SfSrv-PublicApi.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-NAND.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-OS.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-REM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-ROM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-VolumeInfo-PublicApi-ANY.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/setup-PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script
baseapitest/basesvs/validation/f32/sfsrv/scripts/setup-PBASE-F32-SfSrv-PublicApi.script
baseapitest/basesvs/validation/f32/sfsrv/src/T_ActiveNotifyChange.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_DirData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_DirScanData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_DriveUnitData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_EntryArrayData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_EntryData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FileActiveCallback.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FileData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FileManData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FileNamesIdenticalData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FileTextData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FindFileData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FormatData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FsData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FsDataDrives.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FsDataFiles.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_FsDataMounts.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_OpenFileScanData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_ParseBaseData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_ParseData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_ParsePtrCData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_ParsePtrData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_RDirData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_RawDiskData.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_SfSrvServer.cpp
baseapitest/basesvs/validation/f32/sfsrv/src/T_VolumeInfoData.cpp
baseapitest/basesvs/validation/f32/sfsrv/testdata/1mb
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-Dir-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-DirScan-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-DriveUnit-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-Entry-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-EntryArray-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-File-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-FileMan-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-FileNamesIdentical-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-FileText-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-FindFile-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-Format-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-OpenFileScan-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-Parse-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-ParseBase-Inherited-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-ParsePtr-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-ParsePtrC-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RDir-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Drives-PublicApi-ANY.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Drives-PublicApi-RAM.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Drives-PublicApi-REM.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Files-PublicApi-ANY.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Files-PublicApi-RAM.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Misc-PublicApi-ANY.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Misc-PublicApi-RAM.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Mounts-PublicApi-RAM.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-PublicApi-OS.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-PublicApi-ROM.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RawDisk-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-VolumeInfo-PublicApi.ini
baseapitest/basesvs/validation/f32/sfsrv/testdata/Test1.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/Test2.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/Test3.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/USBLOAD.ZIP
baseapitest/basesvs/validation/f32/sfsrv/testdata/any.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/big.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/big_line.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/empty_file.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/filetext_eof.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/filetext_read.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/multiline.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/new_file.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/oneliner.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/test.txt
baseapitest/basesvs/validation/f32/sfsrv/testdata/test_rom.txt
baseapitest/basesvs/validation/f32/testdata/armv5/base_f32_env.ini
baseapitest/basesvs/validation/f32/testdata/armv5/dual_drive_env.ini
baseapitest/basesvs/validation/f32/testdata/gcce/base_f32_env.ini
baseapitest/basesvs/validation/f32/testdata/gcce/dual_drive_env.ini
baseapitest/basesvs/validation/f32/testdata/winscw/base_f32_env.ini
baseapitest/basesvs/validation/f32/testdata/winscw/dual_drive_env.ini
kernel/eka/bmarm/euseru.def
kernel/eka/bwins/euseru.def
kernel/eka/bx86/euseru.def
kernel/eka/bx86gcc/euseru.def
kernel/eka/drivers/medmmc/medmmc.cpp
kernel/eka/drivers/medmmc/medmmc.h
kernel/eka/eabi/euseru.def
kernel/eka/euser/us_func.cpp
kernel/eka/euser/us_ksvr.cpp
kernel/eka/euser/us_test.cpp
kernel/eka/include/e32ldr_private.h
kernel/eka/include/e32test.h
kernel/eka/include/e32ver.h
kernel/eka/memmodel/epoc/mmubase/mmubase.cpp
kernel/eka/nkernsmp/arm/vectors.cia
kernel/eka/release.txt
kerneltest/e32test/active/t_dtim.cpp
kerneltest/e32test/bench/t_ipcbm.cpp
kerneltest/e32test/bench/t_proc1.cpp
kerneltest/e32test/bench/t_svr2.cpp
kerneltest/e32test/bench/t_svr5.cpp
kerneltest/e32test/cppexceptions/t_unmap.cpp
kerneltest/e32test/debug/t_context.cpp
kerneltest/e32test/demandpaging/t_datapaging.cpp
kerneltest/e32test/demandpaging/t_svrpinning.cpp
kerneltest/e32test/device/t_newldd.cpp
kerneltest/e32test/device/t_tldd.cpp
kerneltest/e32test/device/t_usbcsc.cpp
kerneltest/e32test/dispchan/t_dispchan.cpp
kerneltest/e32test/dll/t_tdll12.cpp
kerneltest/e32test/dll/t_tls.cpp
kerneltest/e32test/dma/d_dma.cpp
kerneltest/e32test/dma/d_dma.h
kerneltest/e32test/dma/dmasim.cpp
kerneltest/e32test/dma/t_dma.cpp
kerneltest/e32test/dmav2/d_dma2.cpp
kerneltest/e32test/dmav2/d_dma2.h
kerneltest/e32test/dmav2/self_test.cpp
kerneltest/e32test/dmav2/t_dma2.cpp
kerneltest/e32test/dmav2/test_cases.cpp
kerneltest/e32test/dmav2/test_thread.cpp
kerneltest/e32test/emi/t_emi.cpp
kerneltest/e32test/emul/t_guiconfig.cpp
kerneltest/e32test/group/bld.inf
kerneltest/e32test/group/t_ctrap.mmp
kerneltest/e32test/group/t_dma2inv.mmp
kerneltest/e32test/group/t_dmainv.mmp
kerneltest/e32test/group/t_propclose.mmp
kerneltest/e32test/hcr/t_hcr.cpp
kerneltest/e32test/heap/t_fail.cpp
kerneltest/e32test/heap/t_heap2.cpp
kerneltest/e32test/heap/t_heapstress.cpp
kerneltest/e32test/heap/t_kheap.cpp
kerneltest/e32test/iic/t_iic.cpp
kerneltest/e32test/misc/t_cputime.cpp
kerneltest/e32test/misc/t_svrstress.cpp
kerneltest/e32test/mmu/t_chunk.cpp
kerneltest/e32test/mmu/t_dchunk.cpp
kerneltest/e32test/mmu/t_demandpaging.cpp
kerneltest/e32test/mmu/t_pin.cpp
kerneltest/e32test/mmu/t_shadow.cpp
kerneltest/e32test/mmu/t_sharedchunk.cpp
kerneltest/e32test/mmu/t_sharedio.cpp
kerneltest/e32test/mmu/t_shbuf.cpp
kerneltest/e32test/multimedia/t_sound2.cpp
kerneltest/e32test/multimedia/t_sound_api.cpp
kerneltest/e32test/multimedia/t_soundmchan.cpp
kerneltest/e32test/multimedia/t_soundwav.cpp
kerneltest/e32test/pccd/t_atadrv.cpp
kerneltest/e32test/prime/t_rwlock.cpp
kerneltest/e32test/property/t_propclose.cpp
kerneltest/e32test/random/t_securerng.cpp
kerneltest/e32test/resmanus/t_resmanus.cpp
kerneltest/e32test/resourceman/t_rescontrolcli.cpp
kerneltest/e32test/smpsoak/t_smpsoakprocess.cpp
kerneltest/e32test/system/t_chnot.cpp
kerneltest/e32test/system/t_condvar.cpp
kerneltest/e32test/system/t_ctrap.cpp
kerneltest/e32test/system/t_reg.cpp
kerneltest/e32test/thread/t_thread.cpp
kerneltest/f32test/demandpaging/loader/t_pageldrtst.cpp
kerneltest/f32test/loader/ldrtst.flm
kerneltest/f32test/loader/ldrtst.mbc
kerneltest/f32test/loader/ldrtst.mke
userlibandfileserver/fileserver/group/release.txt
userlibandfileserver/fileserver/inc/f32ver.h
userlibandfileserver/fileserver/sfile/sf_ldr.cpp
--- a/baseapitest/basesvs/FileSystemPlugins/group/T_TestFSY1.mmp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-TARGET			T_TESTFSY1.fsy
-TARGETTYPE		fsy
-UID				0x100039df 0x200041C3
-VENDORID 		0x70000001
-
-CAPABILITY		TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
-
-SOURCEPATH		../src
-
-SOURCE			T_TestFSY.cpp
-SOURCE			T_TestFSY1.cpp
-
-USERINCLUDE		../inc
-
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY			euser.lib
-LIBRARY			efile.lib
-SMPSAFE
--- a/baseapitest/basesvs/FileSystemPlugins/group/T_TestFXT.mmp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-TARGET			T_TestFXT.fxt
-TARGETTYPE		fsy
-UID				0x100039df 0x200041C2
-VENDORID 		0x70000001
-
-CAPABILITY 		TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
-
-SOURCEPATH		../src
-SOURCE			T_TestFXT.cpp
-
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY			euser.lib
-LIBRARY			efile.lib
-
-SMPSAFE
--- a/baseapitest/basesvs/FileSystemPlugins/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-PRJ_PLATFORMS
-
-PRJ_TESTMMPFILES
-T_TestFXT.mmp
-T_TestFSY1.mmp
--- a/baseapitest/basesvs/FileSystemPlugins/inc/T_TestFSY.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CTestFileSystem
-*/
-
-#if (!defined __T_TEST_FSY_H__)
-#define __T_TEST_FSY_H__
-
-//	EPOC includes
-#include <f32fsys.h>
-
-class CTestMountCB : public CMountCB
-	{
-public:
-	CTestMountCB() {}
-	~CTestMountCB() {}
-	virtual void	MountL(TBool /*aForceMount*/) {}
-	virtual TInt	ReMount() { return KErrNone; }
-	virtual void	Dismounted() {}
-	virtual void	VolumeL(TVolumeInfo& /*aVolume*/) const {}
-	virtual void	SetVolumeL(TDes& /*aName*/) {}
-	virtual void	MkDirL(const TDesC& /*aName*/) {}
-	virtual void	RmDirL(const TDesC& /*aName*/) {}
-	virtual void	DeleteL(const TDesC& /*aName*/) {}
-	virtual void	RenameL(const TDesC& /*anOldName*/,const TDesC& /*anNewName*/) {}
-	virtual void	ReplaceL(const TDesC& /*anOldName*/,const TDesC& /*anNewName*/) {}
-	virtual void	EntryL(const TDesC& /*aName*/,TEntry& /*anEntry*/) const {}
-	virtual void	SetEntryL(const TDesC& /*aName*/,const TTime& /*aTime*/,TUint /*aSetAttMask*/,TUint /*aClearAttMask*/) {}
-	virtual void	FileOpenL(const TDesC& /*aName*/,TUint /*aMode*/,TFileOpen /*anOpen*/,CFileCB* /*aFile*/) {}
-	virtual void	DirOpenL(const TDesC& /*aName*/,CDirCB* /*aDir*/) {}
-	virtual void	RawReadL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aTrg*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) const {}
-	virtual void	RawWriteL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aSrc*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) {}
-	virtual void	ReadUidL(const TDesC& /*aName*/,TEntry& /*anEntry*/) const {}
-	virtual void	GetShortNameL(const TDesC& /*aLongName*/,TDes& /*aShortName*/) {}
-	virtual void	GetLongNameL(const TDesC& /*aShortName*/,TDes& /*aLongName*/) {}
-	virtual void	IsFileInRom(const TDesC& /*aFileName*/,TUint8*& /*aFileStart*/) {}
-	virtual void	ReadSectionL(const TDesC& /*aName*/,TInt /*aPos*/,TAny* /*aTrg*/,TInt /*aLength*/,const RMessagePtr2& /*aMessage*/) {}
-	};
-
-class CTestFileCB : public CFileCB
-	{
-public:
-	CTestFileCB() {}
-	~CTestFileCB() {}
-	virtual void	RenameL(const TDesC& /*aNewName*/) {}
-	virtual void	ReadL(TInt /*aPos*/,TInt& /*aLength*/,const TAny* /*aDes*/,const RMessagePtr2& /*aMessage*/) {}
-	virtual void	WriteL(TInt /*aPos*/,TInt& /*aLength*/,const TAny* /*aDes*/,const RMessagePtr2& /*aMessage*/) {}
-	virtual TInt	Address(TInt& /*aPos*/) const {return 0;}
-	virtual void	SetSizeL(TInt /*aSize*/) {}
-	virtual void	SetEntryL(const TTime& /*aTime*/,TUint /*aSetAttMask*/,TUint /*aClearAttMask*/) {}
-	virtual void	FlushDataL() {}
-	virtual void	FlushAllL() {}
-	virtual void	CheckPos(TInt /*aPos*/) {}
-	};
-
-class CTestDirCB : public CDirCB
-	{
-public:
-	CTestDirCB() {}
-	~CTestDirCB() {}
-	virtual void	ReadL(TEntry& /*anEntry*/) {}
-	};
-
-class CTestFormatCB : public CFormatCB
-	{
-public:
-	CTestFormatCB() {}
-	~CTestFormatCB() {}
-	virtual void	DoFormatStepL() {}
-	};
-
-class CTestFileSystem : public CFileSystem
-	{
-public:
-	TInt			DefaultPath(TDes& aPath) const;
-	void			DriveInfo(TDriveInfo& anInfo, TInt aDriveNumber) const;
-	TBusLocalDrive&	DriveNumberToLocalDrive(TInt aDriveNumber) const;
-	CMountCB*		NewMountL() const;
-	CFileCB*		NewFileL() const;
-	CDirCB*			NewDirL() const;
-	CFormatCB*		NewFormatL() const;
- 
-protected:
-	CTestFileSystem();
-	};
-
-#endif /* __T_TEST_FSY_H__ */
--- a/baseapitest/basesvs/FileSystemPlugins/inc/T_TestFSY1.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CTestFileSystem1
-*/
-
-#if (!defined __T_TEST_FSY1_H__)
-#define __T_TEST_FSY1_H__
-
-//	User includes
-#include "T_TestFSY.h"
-
-class CTestFileSystem1 : public CTestFileSystem
-	{
-public:
-	static CFileSystem* NewL();
-
-	TInt	Install();
-	TBool	IsExtensionSupported() const;
-
-protected:
-	CTestFileSystem1();
-	};
-
-#endif /* __T_TEST_FSY2_H__ */
--- a/baseapitest/basesvs/FileSystemPlugins/src/T_TestFSY.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_TestFSY.h"
-
-/*@{*/
-_LIT(KDefaultPath,		"C:\\");
-/*@}*/
-
-CTestFileSystem::CTestFileSystem()
-//
-// Constructor
-//
-	{
-	}
-
-CMountCB* CTestFileSystem::NewMountL() const
-//
-// Create a new mount control block
-//
-	{
-	return (new(ELeave) CTestMountCB);
-	}
-
-CFileCB* CTestFileSystem::NewFileL() const
-//
-// Create a new file
-//
-	{
-	return (new(ELeave) CTestFileCB);
-	}
-
-CDirCB* CTestFileSystem::NewDirL() const
-//
-// create a new directory lister
-//
-	{
-	return (new(ELeave) CTestDirCB);
-	}
-
-CFormatCB* CTestFileSystem::NewFormatL() const
-//
-// Create a new media formatter
-//
-	{
-	return (new(ELeave) CTestFormatCB);
-	}
-
-TInt CTestFileSystem::DefaultPath(TDes& aPath) const
-//
-// Return the intial default path
-//
-	{
-	aPath=KDefaultPath;
-	return KErrNone;
-	}
-
-void CTestFileSystem::DriveInfo(TDriveInfo& anInfo,TInt aDriveNumber) const
-//
-// Return drive info - iDriveAtt and iBatteryState are already set
-//
-	{
-	TLocalDriveCapsV2Buf	localDriveCaps;
-	DriveNumberToLocalDrive(aDriveNumber).Caps(localDriveCaps);
-	anInfo.iMediaAtt=localDriveCaps().iMediaAtt;
-	anInfo.iType=localDriveCaps().iType;
-	anInfo.iDriveAtt=localDriveCaps().iDriveAtt;
-	}
-
-TBusLocalDrive& CTestFileSystem::DriveNumberToLocalDrive(TInt aDriveNumber) const
-//
-// Return the local drive associated with aDriveNumber
-//
-	{
-	return(GetLocalDrive(aDriveNumber));
-	}
--- a/baseapitest/basesvs/FileSystemPlugins/src/T_TestFSY1.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_TestFSY1.h"
-
-//	EPOC includes
-#include <f32ver.h>
-
-/*@{*/
-_LIT(KFileSystemName,	"TestFileSystem1");
-
-const TInt	KMajorVersionNumber=1;
-const TInt	KMinorVersionNumber=0;
-/*@}*/
-
-CFileSystem* CTestFileSystem1::NewL()
-//
-// Return File System
-//
-	{
-	return (new (ELeave) CTestFileSystem1);
-	}
-
-CTestFileSystem1::CTestFileSystem1()
-//
-// Constructor
-//
-	{
-	}
-
-TInt CTestFileSystem1::Install()
-//
-// Install the file system
-//
-	{
-	iVersion=TVersion(KMajorVersionNumber, KMinorVersionNumber, KF32BuildVersionNumber);
-	return(SetName(&KFileSystemName));
-	}
-TBool CTestFileSystem1::IsExtensionSupported() const
-//
-//	Return false to disallow mount extension on this file system
-//
-	{
-	return EFalse;
-	}
-
-extern "C" {
-
-EXPORT_C CFileSystem* CreateFileSystem()
-//
-// Create a new file system
-//
-	{
-	return(CTestFileSystem1::NewL());
-	}
-}
--- a/baseapitest/basesvs/FileSystemPlugins/src/T_TestFXT.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include <f32fsys.h>
-
-
-class CEmptyExtProxyDrive : public CBaseExtProxyDrive
-	{
-public:
-	static CEmptyExtProxyDrive* NewL(CProxyDrive* aProxyDrive, CMountCB* aMount);
-	~CEmptyExtProxyDrive();
-
-private:
-	CEmptyExtProxyDrive(CProxyDrive* aProxyDrive, CMountCB* aMount);
-	};
-
-class CEmptyProxyDriveFactory : public CProxyDriveFactory
-	{
-public:
-	CEmptyProxyDriveFactory();
-	virtual TInt Install();
-	virtual CProxyDrive* NewProxyDriveL(CProxyDrive* aProxy,CMountCB* aMount);
-	};
-
-CEmptyExtProxyDrive* CEmptyExtProxyDrive::NewL(CProxyDrive* aProxyDrive, CMountCB* aMount)
-	{
-	CEmptyExtProxyDrive* temp=new(ELeave) CEmptyExtProxyDrive(aProxyDrive,aMount);
-	return(temp);
-	}
-
-
-CEmptyExtProxyDrive::CEmptyExtProxyDrive(CProxyDrive* aProxyDrive, CMountCB* aMount):CBaseExtProxyDrive(aProxyDrive,aMount)
-	{
-	}
-
-CEmptyExtProxyDrive::~CEmptyExtProxyDrive()
-	{
-	}
-
-CEmptyProxyDriveFactory::CEmptyProxyDriveFactory()
-	{
-	}
-
-TInt CEmptyProxyDriveFactory::Install()
-	{
-	_LIT(KEmptyName,"TestFileExtension");
-	return(SetName(&KEmptyName));
-	}
-
-CProxyDrive* CEmptyProxyDriveFactory::NewProxyDriveL(CProxyDrive* aProxy,CMountCB* aMount)
-	{
-	return(CEmptyExtProxyDrive::NewL(aProxy,aMount));
-	}
-
-extern "C" {
-
-EXPORT_C CProxyDriveFactory* CreateFileSystem()
-//
-// Create a new file system
-//
-	{
-	return(new CEmptyProxyDriveFactory());
-	}
-}
--- a/baseapitest/basesvs/common/inc/DataWrapperBase.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#if (!defined __DATA_WRAPPER_BASE__)
-#define __DATA_WRAPPER_BASE__
-
-//	EPOC includes
-#include <test/datawrapper.h>
-
-class CDataWrapperBase : public CDataWrapper
-	{
-public:
-	virtual ~CDataWrapperBase();
-
-	TBool	GetBoolFromConfig(const TDesC& aSectName,const TDesC& aKeyName,TBool& aResult);
-	TBool	GetIntFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult);
-	TBool   GetInt64FromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt64& aResult);
-	TBool	GetStringFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult);
-	TBool	GetHexFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult);
-	virtual void	InitialiseL();
-
-protected:
-	CDataWrapperBase();
-
-	TBool	GetCommandStringParameter(const TDesC& aParameterName, const TDesC& aSection, TPtrC& aResult, TText8 *aFileName, TInt aLine, TBool aMandatory);
-	TBool	GetCommandIntParameter(const TDesC& aParameterName, const TDesC& aSection, TInt& aResult, TText8 *aFileName, TInt aLine, TBool aMandatory);
-	TBool	GetCommandInt64Parameter(const TDesC& aParameterName, const TDesC& aSection, TInt64& aResult, TText8 *aFileName, TInt aLine, TBool aMandatory);
-	TBool	GetCommandBoolParameter(const TDesC& aParameterName, const TDesC& aSection, TBool& aResult, TText8 *aFileName, TInt aLine, TBool aMandatory);
-
-private:
-	TBool	GetCommandStringParameterL(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult);
-
-private:
-	// Included ini files
-	RPointerArray<CIniData>	iInclude;
-	RPointerArray<HBufC>	iBuffer;
-	};
-
-#endif /* __DATA_WRAPPER_BASE__ */
--- a/baseapitest/basesvs/common/inc/FileserverUtil.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#if (!defined __FILESERVERUTIL_H__)
-#define __FILESERVERUTIL_H__
-
-
-//	EPOC Includes
-#include <test/datawrapper.h>
-
-/** 
-@publishedAll
-@released
-
-Template class CleanupResetAndDestroy to clean up the array
-of implementation information from the cleanup stack.
-*/
-
-template <class T>
-class CleanupResetAndDestroy
-	{
-public:
-	/**
-	Puts an item on the cleanup stack.
-
-	@param  aRef 
-	        The implementation information to be put on the cleanup stack.
-	*/
-	inline static void PushL(T& aRef);
-private:
-	static void ResetAndDestroy(TAny *aPtr);
-	};
-template <class T>
-inline void CleanupResetAndDestroyPushL(T& aRef);
-template <class T>
-inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
-	{CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef));}
-template <class T>
-void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
-	{(STATIC_CAST(T*,aPtr))->ResetAndDestroy();}
-template <class T>
-inline void CleanupResetAndDestroyPushL(T& aRef)
-	{CleanupResetAndDestroy<T>::PushL(aRef);}
-
-class FileserverUtil
-	{
-public:
-
-	static TBool 		GetAttMask(CDataWrapper& aDataWrapper, const TDesC& aSection, const TDesC& aParameterName, TUint& aAttMask);
-	static TBool		VerifyTEntryDataFromIniL(CDataWrapper& aDataWrapper, const TDesC& aSection, TEntry& aEntry);
-	static TBool		VerifyTVolumeInfoDataFromIniL(CDataWrapper& aDataWrapper, const TDesC& aSection, TVolumeInfo& aVolumeInfo);
-	
-private:
-	static TBool 		ConvertToAttMask(const TDesC& aAttMaskStr, TUint& aAttMask);
-	};
-
-#endif /* __FILESERVERUTIL_H__ */
--- a/baseapitest/basesvs/common/inc/TestStepV2.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#if (!defined __TEST_STEP_V2_H__)
-#define __TEST_STEP_V2_H__
-
-//	EPOC includes
-#include <test/testexecutestepbase.h>
-
-class CTestStepV2 : public CTestStep
-	{
-public:
-	TBool	GetBoolFromConfig(const TDesC& aSectName,const TDesC& aKeyName,TBool& aResult);
-	TBool	GetIntFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult);
-	TBool	GetStringFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult);
-	TBool	GetHexFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult);
-
-protected:
-	CTestStepV2();
-	virtual ~CTestStepV2();
-
-	virtual enum TVerdict	doTestStepPreambleL();
-
-private:
-	TBool	GetCommandStringParameterL(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult);
-
-private:
-	// Included ini files
-	RPointerArray<CIniData>	iInclude;
-	RPointerArray<HBufC>	iBuffer;
-	};
-
-#endif /* __TEST_STEP_V2_H__ */
--- a/baseapitest/basesvs/common/src/DataWrapperBase.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,284 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "DataWrapperBase.h"
-
-/*@{*/
-///	Constant Literals used.
-_LIT(KIncludeSection,		"include");
-_LIT(KFile,					"file%d");
-_LIT(KMatch,				"*{*,*}*");
-_LIT(KStart,				"{");
-_LIT(KSeparator,			",");
-_LIT(KEnd,					"}");
-_LIT(KDataRead,				"INI READ : %S %S %S");
-/*@}*/
-
-CDataWrapperBase::CDataWrapperBase()
-:	CDataWrapper()
-	{
-	}
-
-CDataWrapperBase::~CDataWrapperBase()
-/**
- * Public destructor
- */
-	{
-	iInclude.ResetAndDestroy();
-	iBuffer.ResetAndDestroy();
-	}
-
-void CDataWrapperBase::InitialiseL()
-	{
-	CDataWrapper::InitialiseL();
-
-	TBuf<KMaxTestExecuteCommandLength>	tempStore;
-	TPtrC		fileName;
-	TBool		moreData=ETrue;
-	TBool		index=0;
-	while ( moreData )
-		{
-		tempStore.Format(KFile(), ++index);
-		moreData=GetStringFromConfig(KIncludeSection, tempStore, fileName);
-		
-		if (moreData)
-			{
-			CIniData*	iniData=CIniData::NewL(fileName);
-			CleanupStack::PushL(iniData);
-			iInclude.Append(iniData);
-			CleanupStack::Pop(iniData);
-			}
-		}
-	}
-
-TBool CDataWrapperBase::GetBoolFromConfig(const TDesC& aSectName,const TDesC& aKeyName,TBool& aResult)
-	{
-	TBool	ret=EFalse;
-	TPtrC	result;
-	TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
-	if ( err != KErrNone )
-		{
-		ret=EFalse;
-		}
-	if ( ret )
-		{
-		_LIT(KTrue,"true");
-		aResult=(result.FindF(KTrue) != KErrNotFound);
-		}
-
-	return ret;
-	}
-
-TBool CDataWrapperBase::GetIntFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult)
-	{
-	TPtrC	result;
-	TBool	ret=EFalse;
-	TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
-	if ( err != KErrNone )
-		{
-		ret=EFalse;
-		}
-	if ( ret )
-		{
-		TLex	lex(result);
-		ret=(lex.Val(aResult)==KErrNone);
-		}
-
-	return ret;
-	}
-
-TBool CDataWrapperBase::GetInt64FromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt64& aResult)
-     {
-     TPtrC     result;
-     TBool     ret=EFalse;
-     TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
-     if ( err != KErrNone )
-          {
-          ret=EFalse;
-          }
-     if ( ret )
-          {
-          TLex     lex(result);
-          ret=(lex.Val(aResult)==KErrNone);
-          }
-
-     return ret;
-     }
-
-TBool CDataWrapperBase::GetStringFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult)
-	{
-	TBool	ret=EFalse;
-	TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, aResult));
-	if ( err != KErrNone )
-		{
-		ret=EFalse;
-		}
-	return ret;
-	}
-
-TBool CDataWrapperBase::GetHexFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult)
-	{
-	TPtrC	result;
-	TBool	ret=EFalse;
-	TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
-	if ( err != KErrNone )
-		{
-		ret=EFalse;
-		}
-	if ( ret )
-		{
-		TLex	lex(result);
-		ret=(lex.Val((TUint &)aResult, EHex)==KErrNone);
-		}
-
-	return ret;
-	}
-
-TBool CDataWrapperBase::GetCommandStringParameterL(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult)
-	{
-	TBool	ret=EFalse;
-
-	if ( aSectName.Length()!=0 )
-		{
-		ret=CDataWrapper::GetStringFromConfig(aSectName, aKeyName, aResult);
-
-		for ( TInt index=iInclude.Count(); (index>0) && (!ret); )
-			{
-			ret=iInclude[--index]->FindVar(aSectName, aKeyName, aResult);
-			}
-		}
-
-	if ( ret )
-		{
-		if ( aResult.Match(KMatch)!=KErrNotFound )
-			{
-			//	We have an entry of the format
-			//	entry =*{section,entry}*
-			//	where * is one or more characters
-			//	We need to construct this from other data in the ini file replacing {*,*}
-			//	with the data from
-			//	[section]
-			//	entry =some_value
-			HBufC*	buffer=HBufC::NewLC(aResult.Length());
-			buffer->Des().Copy(aResult);
-
-			TInt	startLength=KStart().Length();
-			TInt	sparatorLength=KSeparator().Length();
-			TInt	endLength=KEnd().Length();
-			TInt	bufferLength;
-			TInt	start;
-			TInt	sparator;
-			TInt	end;
-			TPtrC	remaining;
-			TLex	lex;
-			do
-				{
-				bufferLength=buffer->Length();
-				start=buffer->Find(KStart);
-
-				remaining.Set(buffer->Des().Right(bufferLength-start-startLength));
-				sparator=remaining.Find(KSeparator);
-				remaining.Set(remaining.Right(remaining.Length()-sparator-sparatorLength));
-				sparator += (start + startLength);
-
-				end=remaining.Find(KEnd) + sparator + sparatorLength;
-
-				TPtrC	sectionName(buffer->Ptr()+start+startLength, sparator-start-startLength);
-				TPtrC	keyName(buffer->Ptr()+sparator+sparatorLength, end-sparator-sparatorLength);
-				sectionName.Set(TLex(sectionName).NextToken());
-				keyName.Set(TLex(keyName).NextToken());
-
-				TInt	entrySize=0;
-				TPtrC	entryData;
-				TBool	found=CDataWrapper::GetStringFromConfig(sectionName, keyName, entryData);
-				for ( TInt index=iInclude.Count(); (index>0) && (!found);  )
-					{
-					found=iInclude[--index]->FindVar(sectionName, keyName, entryData);
-					}
-				if ( found )
-					{
-					entrySize=entryData.Length();
-					}
-
-				TInt	newLength=start + bufferLength - end - endLength + entrySize;
-				HBufC*	bufferNew=HBufC::NewLC(newLength);
-				bufferNew->Des().Copy(buffer->Ptr(), start);
-				if ( entrySize>0 )
-					{
-					bufferNew->Des().Append(entryData);
-					}
-				bufferNew->Des().Append(buffer->Ptr() + end + endLength, bufferLength - end - endLength);
-				CleanupStack::Pop(bufferNew);
-				CleanupStack::PopAndDestroy(buffer);
-				buffer=bufferNew;
-				CleanupStack::PushL(buffer);
-				}
-			while ( buffer->Match(KMatch)!=KErrNotFound );
-			iBuffer.Append(buffer);
-			CleanupStack::Pop(buffer);
-			aResult.Set(*buffer);
-			INFO_PRINTF4(KDataRead, &aSectName, &aKeyName , &aResult);
-			}
-		}
-
-	return ret;
-	}
-
-TBool CDataWrapperBase::GetCommandStringParameter(const TDesC& aParameterName, const TDesC& aSection, TPtrC& aResult, TText8 *aFileName, TInt aLine, TBool aMandatory)
-	{
-	TBool	ret = GetStringFromConfig(aSection, aParameterName, aResult);
-	if (aMandatory && !ret)
-		{
-		Logger().LogExtra(aFileName, aLine, ESevrErr, _L("No %S"), &aParameterName);
-		SetBlockResult(EFail);
-		}
-	return ret;
-	}
-
-TBool CDataWrapperBase::GetCommandIntParameter(const TDesC& aParameterName, const TDesC& aSection, TInt& aResult, TText8* aFileName, TInt aLine, TBool aMandatory)
-	{
-	TBool	ret = GetIntFromConfig(aSection, aParameterName, aResult);
-	if (aMandatory && !ret)
-		{
-		Logger().LogExtra(aFileName, aLine, ESevrErr, _L("No %S"), &aParameterName);
-		SetBlockResult(EFail);
-		}
-	return ret;
-	}
-	
-TBool CDataWrapperBase::GetCommandInt64Parameter(const TDesC& aParameterName, const TDesC& aSection, TInt64& aResult, TText8* aFileName, TInt aLine, TBool aMandatory)
-	{
-	TBool	ret = GetInt64FromConfig(aSection, aParameterName, aResult);
-	if (aMandatory && !ret)
-		{
-		Logger().LogExtra(aFileName, aLine, ESevrErr, _L("No %S"), &aParameterName);
-		SetBlockResult(EFail);
-		}
-	return ret;
-	}
-
-TBool CDataWrapperBase::GetCommandBoolParameter(const TDesC& aParameterName, const TDesC& aSection, TBool& aResult, TText8 *aFileName, TInt aLine, TBool aMandatory)
-	{
-	TBool	ret = GetBoolFromConfig(aSection, aParameterName, aResult);
-	if (aMandatory && !ret)
-		{
-		Logger().LogExtra(aFileName, aLine, ESevrErr, _L("No %S"), &aParameterName);
-		SetBlockResult(EFail);
-		}
-	return ret;
-	}
--- a/baseapitest/basesvs/common/src/FileserverUtil.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,407 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "FileserverUtil.h"
-
-/**
- * @enum Constant Literals used.
- */
- 
-/*@{*/
-
-// Parameters
-_LIT( KExpectedName,					"expectedName" );
-_LIT( KExpectedSize,					"expectedSize" );
-_LIT( KExpectedTime,					"expectedTime" );
-_LIT( KExpectedUid1,					"expectedUid1" );
-_LIT( KExpectedUid2,					"expectedUid2" );
-_LIT( KExpectedUid3,					"expectedUid3" );
-_LIT( KVolumeLabel,						"volume_label" );
-_LIT( KVolumeSize,						"volume_size");
-_LIT( KVolumeFreeSpace,					"volume_free_space" );
-_LIT( KVolumeUniqueID,					"volume_unique_id");
-_LIT( KExpectedMostDerivedUid,			"expectedMostDerivedUid" );
-_LIT( KVolumeFileCacheFlags,			"volume_File_Cache_Flags" );
-_LIT( KFileCacheReadEnabled,			"EFileCacheReadEnabled" );
-_LIT( KFileCacheReadOn,					"EFileCacheReadOn");
-_LIT( KFileCacheReadAheadEnabled,		"EFileCacheReadAheadEnabled" );
-_LIT( KFileCacheReadAheadOn,			"EFileCacheReadAheadOn" );
-_LIT( KFileCacheWriteEnabled,			"EFileCacheWriteEnabled" );
-_LIT( KFileCacheWriteOn,				"EFileCacheWriteOn" );
-
-// Attributes
-_LIT(KEntryAttNormalStr, 				"KEntryAttNormal");
-_LIT(KEntryAttReadOnlyStr, 				"KEntryAttReadOnly");
-_LIT(KEntryAttHiddenStr, 				"KEntryAttHidden");
-_LIT(KEntryAttSystemStr, 				"KEntryAttSystem");
-_LIT(KEntryAttVolumeStr,				"KEntryAttVolume");
-_LIT(KEntryAttDirStr, 					"KEntryAttDir");
-_LIT(KEntryAttArchiveStr, 				"KEntryAttArchive");
-_LIT(KEntryAttXIPStr, 					"KEntryAttXIP");
-#if (!defined(__Symbian_OS_v9_1__))
-_LIT(KEntryAttRemoteStr, 				"KEntryAttRemote");
-_LIT(KEntryAttMaskFileSystemSpecificStr,"KEntryAttMaskFileSystemSpecific");
-#endif
-_LIT(KEntryAttMatchMaskStr,				"KEntryAttMatchMask");
-_LIT(KEntryAttMaskSupportedStr,			"KEntryAttMaskSupported");
-_LIT(KEntryAttMatchExclusiveStr,		"KEntryAttMatchExclusive");
-_LIT(KEntryAttMatchExcludeStr,			"KEntryAttMatchExclude");
-_LIT(KEntryAttAllowUidStr,				"KEntryAttAllowUid");
-
-// constants
-const TInt KUid1Index 					= 0;
-const TInt KUid2Index 					= 1;
-const TInt KUid3Index 					= 2;
-
-const TInt KTimeFormatSize 				= 30;
-_LIT( KTimeFormat,						"%D%M%Y%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B" );
-
-/*@}*/
-
-
-
-TBool FileserverUtil::VerifyTEntryDataFromIniL(CDataWrapper& aDataWrapper, const TDesC& aSection, TEntry& aEntry)
-	{
-	TBool ret = ETrue; 
-
-	aDataWrapper.INFO_PRINTF2(_L("Entry name = %S"), &aEntry.iName );				
-		
-	TPtrC expectedStr;
-	if ( aDataWrapper.GetStringFromConfig(aSection, KExpectedName(), expectedStr) )
-		{
-		if (aEntry.iName.CompareC(expectedStr, 0, NULL) != 0)
-			{
-			aDataWrapper.ERR_PRINTF3(_L("%S != %S"), &aEntry.iName, &expectedStr);
-			ret = EFalse;
-			}
-		else
-			{
-			aDataWrapper.INFO_PRINTF3(_L("%S == %S"), &aEntry.iName, &expectedStr);
-			}
-		}
-			
-	TInt expectedInt = 0;
-	if ( aDataWrapper.GetIntFromConfig(aSection, KExpectedSize(), expectedInt) )
-		{
-		aDataWrapper.INFO_PRINTF2(_L("Entry size = %d"), aEntry.iSize );
-		if (aEntry.iSize != expectedInt)
-			{
-			aDataWrapper.ERR_PRINTF3(_L("Size from ini file not equal with size returned from function (%d != %d)"), expectedInt, aEntry.iSize);
-			ret = EFalse;
-			}
-		}
-	
-	if ( aDataWrapper.GetStringFromConfig(aSection, KExpectedTime(), expectedStr) )
-		{			
-		TBuf<KTimeFormatSize>	dateString;
-		aEntry.iModified.FormatL(dateString, KTimeFormat);
-		aDataWrapper.INFO_PRINTF2(_L("Entry modified %S"), &dateString);
-		
-		TTime	modificationTime;
-		User::LeaveIfError(modificationTime.Set(expectedStr));
-		
-		if (aEntry.iModified != modificationTime)
-			{
-			aDataWrapper.ERR_PRINTF1(_L("Time from ini file not equal with time returned from function."));
-			ret = EFalse;
-			}
-		}
-	
-	if ( aDataWrapper.GetIntFromConfig(aSection, KExpectedUid1(), expectedInt) )
-		{
-		TInt uid1 = aEntry.iType[KUid1Index].iUid;	
-		aDataWrapper.INFO_PRINTF2(_L("Entry UID1 = %d"), uid1 );
-
-		if ( uid1 != expectedInt )
-			{
-			aDataWrapper.ERR_PRINTF3(_L("Entry UID1 %d  !=  ini UID1 %d)"), uid1, expectedInt);
-			ret = EFalse;
-			}
-		}
-		
-	if ( aDataWrapper.GetIntFromConfig(aSection, KExpectedUid2(), expectedInt) )
-		{
-		TInt uid2 = aEntry.iType[KUid2Index].iUid;
-		aDataWrapper.INFO_PRINTF2(_L("Entry UID2 = %d"), uid2 );
-
-		if ( uid2 != expectedInt )
-			{
-			aDataWrapper.ERR_PRINTF3(_L("Entry UID2 %d  !=  ini UID1 %d)"), uid2, expectedInt);
-			ret = EFalse;
-			}
-		}
-		
-	if ( aDataWrapper.GetIntFromConfig(aSection, KExpectedUid3(), expectedInt) )
-		{
-		TInt uid3 = aEntry.iType[KUid3Index].iUid;
-		aDataWrapper.INFO_PRINTF2(_L("Entry UID3 = %d"), uid3 );
-		
-		if ( uid3 != expectedInt )
-			{
-			aDataWrapper.ERR_PRINTF3(_L("Entry UID3 %d  !=  ini UID3 %d)"), uid3, expectedInt);
-			ret = EFalse;
-			}
-		}
-		
-	if ( aDataWrapper.GetIntFromConfig(aSection, KExpectedMostDerivedUid(), expectedInt) )
-		{
-		TInt mostDerivedUid = aEntry.MostDerivedUid().iUid;
-		aDataWrapper.INFO_PRINTF2(_L("MostDerivedUid = %d"), mostDerivedUid);
-
-		if ( mostDerivedUid != expectedInt )
-			{
-			aDataWrapper.ERR_PRINTF3(_L("Entry MostDerivedUid %d  !=  ini MostDerivedUid %d)"), mostDerivedUid, expectedInt);
-			ret = EFalse;
-			}
-		}
-	
-
-	return ret;
-	}
-
-
-
-TBool FileserverUtil::VerifyTVolumeInfoDataFromIniL(CDataWrapper& aDataWrapper, const TDesC& aSection, TVolumeInfo& aVolumeInfo)
-	{
-	TBool ret = ETrue; 
-
-	//Get volume name from config.
-	TPtrC	volumeLabel;
-	if (aDataWrapper.GetStringFromConfig(aSection, KVolumeLabel(), volumeLabel))
-		{
-		//Checking that name of volume is equal to passed through config file.
-		if (aVolumeInfo.iName.CompareC(volumeLabel, 0, NULL) != 0)
-			{
-			aDataWrapper.ERR_PRINTF1(_L("Volume name from ini file not equal with volume name returned from function"));
-			ret = EFalse;
-			}
-		}
-	
-	TInt	tmp;
-	if (aDataWrapper.GetIntFromConfig(aSection, KVolumeSize(), tmp))
-		{
-		TInt64	volumeSize;
-		volumeSize = tmp;
-		//Checking that size of volume is equal to passed through config file.
-		if (volumeSize != aVolumeInfo.iSize)
-			{
-			aDataWrapper.ERR_PRINTF1(_L("Volume size from ini file not equal with volume size returned from function"));
-			ret = EFalse;
-			}
-		}
-
-	if (aDataWrapper.GetIntFromConfig(aSection, KVolumeFreeSpace(), tmp))
-		{
-		TInt64	freeSpace;
-		freeSpace = tmp;
-		//Checking that free space of volume is equal to passed through config file.
-		if (freeSpace != aVolumeInfo.iFree)
-			{
-			aDataWrapper.ERR_PRINTF1(_L("Volume free space amount from ini file not equal with volume free space amount returned from function"));
-			ret = EFalse;
-			}
-		}
-
-	if (aDataWrapper.GetIntFromConfig(aSection, KVolumeUniqueID(), tmp))
-		{
-		if(tmp<0)
-			{
-			aDataWrapper.ERR_PRINTF1(_L("ID in config should be not less than 0 "));
-			ret = EFalse;
-			}
-		else
-			{
-			TUint	volumeUniqueID;
-			volumeUniqueID = (TUint)tmp;
-			//Checking that Unique ID of volume is equal to passed through config file.
-			if (volumeUniqueID != aVolumeInfo.iUniqueID)
-				{
-				aDataWrapper.ERR_PRINTF1(_L("Volume unique ID from ini file not equal with volume unique ID returned from function"));
-				ret = EFalse;
-				}
-			}
-		}
-
-	TPtrC volumeFileCacheFlags;		
-	if (aDataWrapper.GetStringFromConfig(aSection, KVolumeFileCacheFlags(), volumeFileCacheFlags))
-		{
-		TFileCacheFlags tmpFileCacheFlags;
-		if(volumeFileCacheFlags == KFileCacheReadEnabled())
-			{
-			tmpFileCacheFlags = EFileCacheReadEnabled;
-			}
-		else if(volumeFileCacheFlags == KFileCacheReadOn())
-			{
-			tmpFileCacheFlags = EFileCacheReadOn;
-			}
-		else if(volumeFileCacheFlags == KFileCacheReadAheadEnabled())
-			{
-			tmpFileCacheFlags = EFileCacheReadAheadEnabled;
-			}
-		else if(volumeFileCacheFlags == KFileCacheReadAheadOn())
-			{
-			tmpFileCacheFlags = EFileCacheReadAheadOn;
-			}
-		else if(volumeFileCacheFlags == KFileCacheWriteEnabled())
-			{
-			tmpFileCacheFlags = EFileCacheWriteEnabled;
-			}
-		else if(volumeFileCacheFlags == KFileCacheWriteOn())
-			{
-			tmpFileCacheFlags = EFileCacheWriteOn;
-			}
-		else
-			{
-			aDataWrapper.ERR_PRINTF1(_L("Volume file cache flags from ini file not equal with volume file cache flags returned from function"));
-			ret = EFalse;
-			}
-			
-		if(ret && (aVolumeInfo.iFileCacheFlags != tmpFileCacheFlags))
-			{
-			aDataWrapper.ERR_PRINTF1(_L("Volume file cache flags from ini file not equal with volume file cache flags returned from function"));
-			ret = EFalse;
-			}
-		}
-	return ret;
-	}
-	
-	
-	
-TBool FileserverUtil::GetAttMask(CDataWrapper& aDataWrapper, const TDesC& aSection, const TDesC& aParameterName, TUint& aAttMask)
-	{
-	TPtrC	iniAttMaskStr;
-	TBool	ret = aDataWrapper.GetStringFromConfig(aSection, aParameterName, iniAttMaskStr);
-	if ( ret )
-		{
-		if ( !ConvertToAttMask(iniAttMaskStr, aAttMask) )
-			{
-			TInt	intTemp;
-			ret = aDataWrapper.GetIntFromConfig(aSection, aParameterName, intTemp);
-			if ( ret )
-				{
-				aAttMask = intTemp;
-				}
-			}
-		}
-
-	return ret;
-	}
-
-
-
-TBool FileserverUtil::ConvertToAttMask(const TDesC& aAttMaskStr, TUint& aAttMask)
-	{
-	TBool ret = ETrue;
-
-	if (aAttMaskStr == KEntryAttNormalStr)
-		{
-		aAttMask = KEntryAttNormal;
-		}
-	else if (aAttMaskStr == KEntryAttReadOnlyStr)
-		{
-		aAttMask = KEntryAttReadOnly;
-		}
-	else if (aAttMaskStr == KEntryAttHiddenStr)
-		{
-		aAttMask = KEntryAttHidden;
-		}
-	else if (aAttMaskStr == KEntryAttSystemStr)
-		{
-		aAttMask = KEntryAttSystem;
-		}
-	else if (aAttMaskStr == KEntryAttVolumeStr)
-		{
-		aAttMask = KEntryAttVolume;
-		}
-	else if (aAttMaskStr == KEntryAttDirStr)
-		{
-		aAttMask = KEntryAttDir;
-		}
-	else if (aAttMaskStr == KEntryAttArchiveStr)
-		{
-		aAttMask = KEntryAttArchive;
-		}
-	else if (aAttMaskStr == KEntryAttXIPStr)
-		{
-		aAttMask = KEntryAttXIP;
-		}
-#if (!defined(__Symbian_OS_v9_1__))
-	else if (aAttMaskStr == KEntryAttRemoteStr)
-		{
-		aAttMask = KEntryAttRemote;
-		}
-	else if (aAttMaskStr == KEntryAttMaskFileSystemSpecificStr)
-		{
-		aAttMask = KEntryAttMaskFileSystemSpecific;
-		}
-#endif
-	else if (aAttMaskStr == KEntryAttMatchMaskStr)
-		{
-		aAttMask = KEntryAttMatchMask;
-		}
-	else if (aAttMaskStr == KEntryAttMaskSupportedStr)
-		{
-		aAttMask = KEntryAttMaskSupported;
-		}
-	else if (aAttMaskStr == KEntryAttMatchExclusiveStr)
-		{
-		aAttMask = KEntryAttMatchExclusive;
-		}
-	else if (aAttMaskStr == KEntryAttMatchExcludeStr)
-		{
-		aAttMask = KEntryAttMatchExclude;
-		}
-	else if (aAttMaskStr == KEntryAttAllowUidStr)
-		{
-		aAttMask = KEntryAttAllowUid;
-		}
-	else if (aAttMaskStr.Match((_L("*|*"))) != KErrNotFound)
-		{
-		TUint	tmpAttMask;
-
-		TInt	location = aAttMaskStr.Match(_L("*|*"));
-		//Converting Left part of the data
-		TPtrC	left = aAttMaskStr.Left(location);
-		if (ConvertToAttMask(left, tmpAttMask))
-			{
-			aAttMask = tmpAttMask;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-
-		//Converting right data can be with another "|"
-		TPtrC	right = aAttMaskStr.Mid(location + 1);
-		if (ConvertToAttMask(right, tmpAttMask))
-			{
-			aAttMask = aAttMask | tmpAttMask;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	}
-
--- a/baseapitest/basesvs/common/src/TestStepV2.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,214 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "TestStepV2.h"
-
-/*@{*/
-///	Constant Literals used.
-_LIT(KIncludeSection,		"include");
-_LIT(KFile,					"file%d");
-_LIT(KMatch,				"*{*,*}*");
-_LIT(KStart,				"{");
-_LIT(KSeparator,			",");
-_LIT(KEnd,					"}");
-_LIT(KDataRead,				"INI READ : %S %S %S");
-/*@}*/
-
-CTestStepV2::CTestStepV2()
-:	CTestStep()
-	{
-	}
-
-CTestStepV2::~CTestStepV2()
-	{
-	iInclude.ResetAndDestroy();
-	iBuffer.ResetAndDestroy();
-	}
-
-enum TVerdict CTestStepV2::doTestStepPreambleL()
-	{
-	TBuf<KMaxTestExecuteCommandLength>	tempStore;
-
-	TVerdict	ret=CTestStep::doTestStepPreambleL();
-	TPtrC		fileName;
-	TBool		moreData=ETrue;
-	TBool		index=0;
-	while ( moreData )
-		{
-		tempStore.Format(KFile(), ++index);
-		moreData=GetStringFromConfig(KIncludeSection, tempStore, fileName);
-		if ( moreData )
-			{
-			CIniData*	iniData=CIniData::NewL(fileName);
-			CleanupStack::PushL(iniData);
-			iInclude.Append(iniData);
-			CleanupStack::Pop(iniData);
-			}
-		}
-
-	return ret;
-	}
-
-TBool CTestStepV2::GetBoolFromConfig(const TDesC& aSectName,const TDesC& aKeyName,TBool& aResult)
-	{
-	TPtrC	result;
-	TBool	ret=EFalse;
-	TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
-	if ( err != KErrNone )
-		{
-		ret=EFalse;
-		}
-	if ( ret )
-		{
-		_LIT(KTrue,"true");
-		aResult=(result.FindF(KTrue) != KErrNotFound);
-		}
-	return ret;
-	}
-
-TBool CTestStepV2::GetIntFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult)
-	{
-	TPtrC	result;
-	TBool	ret=EFalse;
-	TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
-	if ( err != KErrNone )
-		{
-		ret=EFalse;
-		}
-	if ( ret )
-		{
-		TLex	lex(result);
-		ret=(lex.Val(aResult)==KErrNone);
-		}
-
-	return ret;
-	}
-
-TBool CTestStepV2::GetStringFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult)
-	{
-	TBool	ret=EFalse;
-	TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, aResult));
-	if ( err != KErrNone )
-		{
-		ret=EFalse;
-		}
-	return ret;
-	}
-
-TBool CTestStepV2::GetHexFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TInt& aResult)
-	{
-	TPtrC	result;
-	TBool	ret=EFalse;
-	TRAPD(err, ret=GetCommandStringParameterL(aSectName, aKeyName, result));
-	if ( err != KErrNone )
-		{
-		ret=EFalse;
-		}
-	if ( ret )
-		{
-		TLex	lex(result);
-		ret=(lex.Val((TUint &)aResult, EHex)==KErrNone);
-		}
-
-	return ret;
-	}
-
-TBool CTestStepV2::GetCommandStringParameterL(const TDesC& aSectName, const TDesC& aKeyName, TPtrC& aResult)
-	{
-	TBool	ret=CTestStep::GetStringFromConfig(aSectName, aKeyName, aResult);
-
-	for ( TInt index=iInclude.Count(); (index>0) && (!ret);  )
-		{
-		ret=iInclude[--index]->FindVar(aSectName, aKeyName, aResult);
-		}
-
-	if ( ret )
-		{
-		if ( aResult.Match(KMatch)!=KErrNotFound )
-			{
-			//	We have an entry of the format
-			//	entry =*{section,entry}*
-			//	where * is one or more characters
-			//	We need to construct this from other data in the ini file replacing {*,*}
-			//	with the data from
-			//	[section]
-			//	entry =some_value
-			HBufC*	buffer=HBufC::NewLC(aResult.Length());
-			buffer->Des().Copy(aResult);
-
-			TInt	startLength=KStart().Length();
-			TInt	sparatorLength=KSeparator().Length();
-			TInt	endLength=KEnd().Length();
-			TInt	bufferLength;
-			TInt	start;
-			TInt	sparator;
-			TInt	end;
-			TPtrC	remaining;
-			TLex	lex;
-			do
-				{
-				bufferLength=buffer->Length();
-				start=buffer->Find(KStart);
-
-				remaining.Set(buffer->Des().Right(bufferLength-start-startLength));
-				sparator=remaining.Find(KSeparator);
-				remaining.Set(remaining.Right(remaining.Length()-sparator-sparatorLength));
-				sparator += (start + startLength);
-
-				end=remaining.Find(KEnd) + sparator + sparatorLength;
-
-				TPtrC	sectionName(buffer->Ptr()+start+startLength, sparator-start-startLength);
-				TPtrC	keyName(buffer->Ptr()+sparator+sparatorLength, end-sparator-sparatorLength);
-				sectionName.Set(TLex(sectionName).NextToken());
-				keyName.Set(TLex(keyName).NextToken());
-
-				TInt	entrySize=0;
-				TPtrC	entryData;
-				TBool	found=CTestStep::GetStringFromConfig(sectionName, keyName, entryData);
-				for ( TInt index=iInclude.Count(); (index>0) && (!found);  )
-					{
-					found=iInclude[--index]->FindVar(sectionName, keyName, entryData);
-					}
-				if ( found )
-					{
-					entrySize=entryData.Length();
-					}
-
-				TInt	newLength=start + bufferLength - end - endLength + entrySize;
-				HBufC*	bufferNew=HBufC::NewLC(newLength);
-				bufferNew->Des().Copy(buffer->Ptr(), start);
-				if ( entrySize>0 )
-					{
-					bufferNew->Des().Append(entryData);
-					}
-				bufferNew->Des().Append(buffer->Ptr() + end + endLength, bufferLength - end - endLength);
-				CleanupStack::Pop(bufferNew);
-				CleanupStack::PopAndDestroy(buffer);
-				buffer=bufferNew;
-				CleanupStack::PushL(buffer);
-				}
-			while ( buffer->Match(KMatch)!=KErrNotFound );
-			iBuffer.Append(buffer);
-			CleanupStack::Pop(buffer);
-			aResult.Set(*buffer);
-			INFO_PRINTF4(KDataRead, &aSectName, &aKeyName , &aResult);
-			}
-		}
-
-	return ret;
-	}
--- a/baseapitest/basesvs/config/t_base.tcs	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-
--- a/baseapitest/basesvs/conformance/f32/fat32/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-PRJ_TESTEXPORTS
-
-../scripts/f32-fat32-conformance.script				z:/base/conformance/f32/fat32/f32-fat32-conformance.script
-
-../testdata/winscw/f32-fat32-conformance.ini		/epoc32/release/winscw/udeb/z/base/conformance/f32/fat32/f32-fat32-conformance.ini
-../testdata/winscw/f32-fat32-conformance.ini		/epoc32/release/winscw/urel/z/base/conformance/f32/fat32/f32-fat32-conformance.ini
-../testdata/armv5/f32-fat32-conformance.ini			/epoc32/data/z/base/conformance/f32/fat32/f32-fat32-conformance.ini
-
-//pkg
-
-../pkg/t_fat32.pkg									/epoc32/pkg/t_fat32.pkg
-../pkg/tfat32.bat									/epoc32/pkg/tfat32.bat
-
-../scripts/f32-fat32-conformance.script				/epoc32/pkg/conformance/f32/fat32/f32-fat32-conformance.script
-
-../testdata/armv5/f32-fat32-conformance.ini			/epoc32/pkg/conformance/f32/fat32/f32-fat32-conformance.ini
-
-./t_base_f32_fat32.iby								/epoc32/rom/include/t_base_f32_fat32.iby
-
-PRJ_TESTMMPFILES
-t_fat32.mmp
--- a/baseapitest/basesvs/conformance/f32/fat32/group/t_base_f32_fat32.iby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-#ifndef __T_BASE_F32_FAT32_IBY__
-#define __T_BASE_F32_FAT32_IBY__
-
-#include <testexecute.iby>
-
-data=EPOCROOT##epoc32\data\Z\base\conformance\f32\fat32\f32-fat32-conformance.script 			base\conformance\f32\fat32\f32-fat32-conformance.script		 	
-data=EPOCROOT##epoc32\data\Z\base\conformance\f32\fat32\f32-fat32-conformance.ini 			base\conformance\f32\fat32\f32-fat32-conformance.ini 
-
-#if (!defined EKA2)
-file=ABI_DIR\BUILD_DIR\t_fat32server.exe		system\libs\t_fat32server.exe	
-#else
-file=ABI_DIR\BUILD_DIR\t_fat32server.exe	 	system\bin\t_fat32server.exe	
-#endif
-
-#endif
--- a/baseapitest/basesvs/conformance/f32/fat32/group/t_fat32.mmp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-TARGET      	t_fat32server.exe
-TARGETTYPE  	exe
-UID             0x1000007A 0x10281824
-VENDORID 		0x70000001
-EPOCHEAPSIZE	0x1000 0x02000000
-EPOCSTACKSIZE 	0x8000
-
-
-CAPABILITY		ALL
-
-SOURCEPATH  	../src
-SOURCE			t_fat32server.cpp 
-SOURCE			t_fat32base.cpp
-SOURCE			t_fat32format.cpp
-SOURCE			t_fat32mount.cpp
-SOURCE			t_fat32readraw.cpp
-SOURCE			t_fat32writeraw.cpp
-SOURCE			t_fat32readfile.cpp
-SOURCE			t_fat32writefile.cpp
-SOURCE			t_fat32checkdisk.cpp
-SOURCE			t_fat32calculate.cpp
-SOURCE			t_fat32filldisk.cpp
-SOURCE			t_fat32clusterbound.cpp
-SOURCE			t_fat32readwrite.cpp
-SOURCE			t_fat32larger512.cpp
-
-USERINCLUDE   	../inc
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY     	euser.lib
-LIBRARY			efsrv.lib
-LIBRARY			testexecuteutils.lib
-LIBRARY			testexecutelogclient.lib
-LIBRARY			hal.lib
-SMPSAFE
-
-
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/basetedefs.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef BASETEDEFS_H
-#define BASETEDEFS_H
-
-#define DO_TEST(COND)     				CarryOutTest((COND),((TText8*)__FILE__), __LINE__)
-#define DO_TEST2(PTR,COND)				(PTR)->CarryOutTest((COND),((TText8*)__FILE__), __LINE__)
-#define DO_TEST3(THREAD,PTR,COND)		(PTR)->CarryOutTest((THREAD),(COND),((TText8*)__FILE__), __LINE__)
-
-#define INFO_PRINTF8(p1, p2, p3, p4, p5, p6, p7, p8)	Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7), (p8))
-
-
-//define DO_TEST(COND, ERR_NUM)	if((COND)!=true){User::Panic(KBaseTestTAct,(ERR_NUM));}
-
-#define DO_PRINTF1(PTEST,P1)						(PTEST)->INFO_PRINTF1((P1))
-#define DO_PRINTF2(PTEST,P1,P2)						(PTEST)->INFO_PRINTF2((P1),(P2))
-#define DO_PRINTF3(PTEST,P1,P2,P3)					(PTEST)->INFO_PRINTF3((P1),(P2),(P3))
-#define DO_PRINTF4(PTEST,P1,P2,P3,P4)				(PTEST)->INFO_PRINTF4((P1),(P2),(P3),(P4))
-#define DO_PRINTF5(PTEST,P1,P2,P3,P4,P5)			(PTEST)->INFO_PRINTF5((P1),(P2),(P3),(P4),(P5))
-#define DO_PRINTF6(PTEST,P1,P2,P3,P4,P5,P6)			(PTEST)->INFO_PRINTF6((P1),(P2),(P3),(P4),(P5),(P6))
-#define DO_PRINTF7(PTEST,P1,P2,P3,P4,P5,P6,P7)		(PTEST)->INFO_PRINTF7((P1),(P2),(P3),(P4),(P5),(P6),(P7))
-#define DO_PRINTF8(PTEST,P1,P2,P3,P4,P5,P6,P7,P8)	(PTEST)->INFO_PRINTF8((P1),(P2),(P3),(P4),(P5),(P6),(P7),(P8))
-
-#define DO_THREAD_PRINTF1(PTEST,P1)   \
-					{\
-						RCriticalSection * pSection = (PTEST)->ReturnCritical();\
-						if (pSection) pSection->Wait();\
-						(PTEST)->INFO_PRINTF1((P1));\
-						if (pSection) pSection->Signal();\
-					}
-						
-
-
-#endif
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/sl_bpb1.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,243 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef SL_BPB1_H
-#define SL_BPB1_H
-
-#include <f32fsys.h>
-#include <f32ver.h>
-#include <f32dbg.h>
-#include <e32svr.h>
-
-#pragma warning (disable:4103) //  : used #pragma pack to change alignment
-
-static const TInt KFatDirNameSize=11;
-static const TInt KFatDirReservedSize=10;
-static const TInt KVolumeLabelSize=11;
-static const TInt KFileSysTypeSize=8;
-static const TInt KVendorIdSize=8;
-static const TInt KVFatEntryAttribute=0x0F;
-static const TInt KBootSectorSignature=0xAA55;
-
-class TFatDirEntry;
-enum TFault
-	{
-	EVFatNoLongName,
-	EFatChkDskFailed,
-	EFatBadParameter,
-	EFatCacheBadRead,
-	EFatCacheNotFatSector,
-	EFatBadLocalDrive,
-	EFatBadBootSectorParameter,
-	EFatBadDirEntryParameter,
-	EFatAddClusterNotLastInList,
-	EFatBadEntryValue,
-	EFatBadClusterValue,
-	EFatBadStdFormatName,
-	EFatBadDosFormatName,
-	EFatCorrupt,
-	EFatChkDskBitListOverFlow,
-	EFatChkDskIndexOverFlow,
-	EFatChkDskIllegalClusterNumber,
-	EFatChkDskClusterAlreadyInUse,
-	EFatChkDskBadCluster,
-	EFatChkDskInvalidEntrySize,
-	EFatDesTooBig,
-	EFatFilePosBeyondEnd,
-	EFatFileSeekIndexTooSmall,
-	EFatFileSeekIndexTooSmall2,
-	EFatDataAllocBadSeg,
-	EFatFileSystemBadMemory,
-	EFatFileSystemCreate1,
-	EFatFileSystemCreate2,
-	EFatFileSystemCreate3,
-	ECacheAllocatorSetMax,
-	EFatLruCacheBadGranularity,
-	EFatFixedCacheBadGranularity,
-	EFatFixedCacheBadCall,
-	EFatRawReadTooBig,
-	EFatRawWriteTooBig,
-	EWinsBadRamDriveRead,
-	EWinsBadRamDriveWrite,
-	EFatReadUidFailed,
-	ELruCacheFlushNotSupported
-	};
-
-struct SFatDirEntry
-	{
-    TUint8 iName[KFatDirNameSize];
-    TUint8 iAttributes;
-    TUint8 iReserved[KFatDirReservedSize];
-    TUint16 iTime;
-    TUint16 iDate;
-    TUint16 iStartCluster;
-    TUint32 iSize;
-	};	
-#define pDir ((SFatDirEntry*)&iData[0])
-
-//
-typedef TBuf8<KFatDirNameSize> TShortName;
-//
-const TInt KSizeOfFatBootSector=62;
-const TInt KSizeOfFatDirEntry=32;
-class TFatBootSector
-	{
-public:
-	inline const TPtrC8 VendorId() const;
-	inline TInt BytesPerSector() const{return iBytesPerSector;}
-	inline TInt SectorsPerCluster() const{return iSectorsPerCluster;}
-	inline TInt ReservedSectors() const {return iReservedSectors;};
-	inline TInt NumberOfFats() const {return iNumberOfFats;}
-	inline TInt RootDirEntries() const{return iRootDirEntries;}
-	inline TInt TotalSectors() const{return iTotalSectors;}
-	inline TUint8 MediaDescriptor() const {return iMediaDescriptor;}
-	inline TInt FatSectors() const {return iFatSectors;}
-	inline TInt SectorsPerTrack() const {return iSectorsPerTrack;}
-	inline TInt NumberOfHeads() const{return iNumberOfHeads;}
-	inline TInt HiddenSectors() const {return iHiddenSectors;}
-	inline TInt HugeSectors() const{return iHugeSectors;}
-	inline TInt PhysicalDriveNumber() const;
-	inline TInt ExtendedBootSignature() const;
-	inline TUint32 UniqueID() const;
-	inline const TPtrC8 VolumeLabel() const;
-	inline const TPtrC8 FileSysType() const {return TPtrC8(iFileSysType,KFileSysTypeSize);}
-	inline TInt BootSectorSignature() const;
-	inline void SetJumpInstruction();
-	inline void SetVendorID(const TDesC8& aDes);
-	inline void SetBytesPerSector(TInt aBytesPerSector);
-	inline void SetSectorsPerCluster(TInt aSectorsPerCluster);
-	inline void SetReservedSectors(TInt aReservedSectors);
-	inline void SetNumberOfFats(TInt aNumberOfFats);
-	inline void SetRootDirEntries(TInt aRootDirEntries);
-	inline void SetTotalSectors(TInt aTotalSectors);
-	inline void SetMediaDescriptor(TUint8 aMediaDescriptor);
-	inline void SetFatSectors(TInt aFatSectors);
-	inline void SetSectorsPerTrack(TInt aSectorsPerTrack);
-	inline void SetNumberOfHeads(TInt aNumberOfHeads);
-	inline void SetHiddenSectors(TUint32 aHiddenSectors);
-	inline void SetHugeSectors(TUint32 aTotalSectors);
-	inline void SetPhysicalDriveNumber(TInt aPhysicalDriveNumber);
-	inline void SetReservedByte(TUint8 aReservedByte);
-	inline void SetExtendedBootSignature(TInt anExtendedBootSignature);
-	inline void SetUniqueID(TUint32 anUniqueID);
-	inline void SetVolumeLabel(const TDesC8& aDes);
-	inline void SetFileSysType(const TDesC8& aDes);
-	
-public:
-	inline TBool Is16BitFat() {return(FileSysType()==_L8("FAT16   "));}
-	TInt FirstFatSectorPos()
-	{
-	return(ReservedSectors()*BytesPerSector());
-	}
-	inline TInt RootDirStartSector();
-	inline TInt FirstFreeSector();
-public:
-    TUint8  iJumpInstruction[3];        ///< Jump instruction used for bootable volumes
-    TUint8  iVendorId[KVendorIdSize];   ///< Vendor ID of the file system that formatted the volume
-    TUint16 iBytesPerSector;            ///< Bytes per sector 
-    TUint8  iSectorsPerCluster;         ///< Sectors per cluster ratio
-    TUint16 iReservedSectors;           ///< Number of reserved sectors on the volume
-    TUint8  iNumberOfFats;              ///< Number of Fats on the volume
-    TUint16 iRootDirEntries;	        ///< Number of entries allowed in the root directory, specific to Fat12/16, zero for FAT32
-    TUint16 iTotalSectors;              ///< Total sectors on the volume, zero for FAT32
-    TUint8  iMediaDescriptor;           ///< Media descriptor
-    TUint16 iFatSectors;                ///< Sectors used for the Fat table, zero for FAT32
-    TUint16 iSectorsPerTrack;           ///< Sectors per track
-    TUint16 iNumberOfHeads;             ///< Number of heads 
-    TUint32 iHiddenSectors;             ///< Number of hidden sectors in the volume
-    TUint32 iHugeSectors;               ///< Total sectors in the volume, Used if totalSectors > 65535
-	TUint32	iFatSectors32;              ///< Start of additional elements @ offset 36 for FAT32, Sectors in Fat table for 32 bit volume
-	TUint16 iFATFlags;                  ///< Fat flags
-	TUint16	iVersionNumber;		        ///< Version number of the file system
-	TUint32 iRootClusterNum;            ///< Cluster number of the root directory
-	TUint16 iFSInfoSectorNum;           ///< Sector number containing the FSIInfo structure
-	TUint16 iBkBootRecSector;           ///< Backup boot sector
-	TUint8	iReserved2[12];             ///< Reserved space, End of Fat32 Only parameters section
-	TUint8  iPhysicalDriveNumber;       ///< Physical drive number, not used in  OS
-    TUint8  iReserved;                  ///< Reserved byte
-    TUint8  iExtendedBootSignature;     ///< Extended boot signiture
-    TUint32 iUniqueID;                  ///< Unique volume ID
-    TUint8  iVolumeLabel[KVolumeLabelSize];  ///< 	The volume's label
-	TUint8  iFileSysType[KFileSysTypeSize];  ///< 	File system type
-	};
-	
-void Fault(TAny* aTestStep,TFault anError);
-GLREF_C TBool IsPowerOfTwo(TInt aNum);
-GLREF_C TInt Log2(TInt aNum);
-GLREF_C TTime DosTimeToTTime(TInt aDosTime,TInt aDosDate);
-GLREF_C TInt DosTimeFromTTime(const TTime& aTime);
-GLREF_C TInt DosDateFromTTime(const TTime& aTime);
-
-class TFatDirEntry
-	{
-public:
-	const TPtrC8 Name() const
-	{return TPtrC8((TUint8*)&(pDir->iName),11);
-	}
-	TInt Attributes() const 
-	{
-	return pDir->iAttributes;
-	}
-	inline TTime Time() const;
-	TInt StartCluster() const
-	{
-	return pDir->iStartCluster;
-	}
-	inline TUint32 Size() const;
-	TBool IsErased() const
-	{
-	return (TBool)(iData[0]==0xe5);
-	}
-	inline TBool IsCurrentDirectory() const;
-	inline TBool IsParentDirectory() const;
-	TBool IsEndOfDirectory() const 
-	{
-	return (TBool)(iData[0]==0x00);
-	}
-	TBool IsGarbage() const;
-	inline void SetName(const TDesC8& aDes);
-	inline void SetAttributes(TInt anAtt);
-	inline void SetTime(const TTime& aTime);
-	void SetStartCluster(TInt aStartCluster)
-	{
-	__ASSERT_DEBUG(!(aStartCluster&~KMaxTUint16),Fault( this,EFatBadDirEntryParameter));
-	pDir->iStartCluster=(TUint16)aStartCluster;
-	}
-	inline void SetSize(TUint32 aFilesize);
-	inline void SetErased();
-	inline void SetCurrentDirectory();
-	inline void SetParentDirectory();
-	inline void SetEndOfDirectory();
-	inline void ZeroReserved();
-public:
-	void InitializeRootEntry();
-	void InitializeAsVFat(TUint8 aCheckSum);
-	void SetVFatEntry(const TDesC& aName,TInt aRemainderLen);
-	void ReadVFatEntry(TDes16& aVBuf);
-	inline TBool IsLongNameStart() const;
-	TBool IsVFatEntry() const 
-	{
-	return (TBool)(Attributes()==0x0F && IsEndOfDirectory()==EFalse);
-	}
-	inline TInt NumFollowing() const;
-public:
-	TUint8 iData[KSizeOfFatDirEntry];
-	};
-
-#endif // SL_BPB1_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32base.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32BASE_H
-#define T_FAT32BASE_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-
-enum TDiskType
-    {
-    EFat12,
-    EFat16,
-    EFat32,
-    EFatUnknown
-    };
-/*
- *temporary macro to dump the test result.
- *should be moved a common header file.
- */
-#define FAT_TEST(cond, text)	 				  	{\
-												if (cond) \
-													{ \
-													INFO_PRINTF1(text); \
-													INFO_PRINTF1(_L("...passed"));\
-													} \
-												else \
-													{ \
-													ERR_PRINTF1(text); \
-													ERR_PRINTF1(_L("...failed"));\
-													SetTestStepResult(EFail);\
-													return TestStepResult();\
-													}\
-												}
-
-#define FAT_TEST_VAL(cond, text, errval)	 				  	{\
-												if (cond) \
-													{ \
-													INFO_PRINTF1(text); \
-													INFO_PRINTF1(_L("...passed"));\
-													} \
-												else \
-													{ \
-													ERR_PRINTF1(text); \
-													ERR_PRINTF2(_L("...failed: %d "), errval);\
-													SetTestStepResult(EFail);\
-													return TestStepResult();\
-													}\
-												}
-/**
-Fat32 ReadRaw Class. Inherits from the CTestStep.
-Contains functions needed to set up all tests. 
-
-
-*/												
-class CBaseTestFat32Base : public CTestStep
-	{
-	public:
-		CBaseTestFat32Base();
-		~CBaseTestFat32Base();
-		virtual TVerdict doTestStepPreambleL();	
-		TBool IsFileSystemFAT(RFs &aFsSession,TInt aDrive);
-		TBool IsFileSystemFAT32();
-		void ParseCommandArguments(void);
-		TInt CBaseTestFat32Base::CurrentDrive();
-		TInt CheckSecPerClus();
-		TInt CalculateClusCount();		
-		TInt Convert(TInt aLen, TUint8 *aBuffer, TUint32 *aField);
-		TInt ReadField(TInt aLen, TInt aOffSet, TUint32 *aName);			
-		void CheckDebug();
-		
-//****KARTHIK RE-WORK*****	
-		TInt PosInBytes(TInt aFatIndex);	
-		TInt64 ClusterToByte(TInt aCluster);	
-		TInt64 getBytesPerCluster(TUint32 aSecPerClus);
-
-	public:
-
-		RFs iTheFs;					// The file server session
-		TFileName iSessionPath;		// The session path
-		TChar iDriveToTest;			// The drive to run the tests on
-		TUint32 iClusterCount;		// The cluster count of the volume
-		TUint32 iBPB_TotSec32;		// Value of the field BPB_TotSec32
-		TUint32 iBPB_BytsPerSec;   // Value of the field BPB_BytsPerSec
-		TUint32 iBPB_ResvdSecCnt;	// Value of the field BPB_ResvdSecCnt
-		TUint32 iBPB_NumFATs;		// Value of the field BPB_NumFATs
-		TUint32 iBPB_FATSz32;		// Value of the field BPB_FATSz32
-		TUint32 iBPB_SecPerClus;	// Value of the field BPB_SecPerClus
-		TInt64  iDiskSize;			// Size of the disk from TVolumeInfo
-		TInt64  iDriveSize;			// Size of the disk from the media driver
-		TInt 	iMedia;				// 0 for MMC, 1 for SD
-	
-};
-
-_LIT(KTestStepBase, "Base");
-
-#endif //T_FAT32BASE_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32calculate.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef T_FAT32CALCULATE_H
-#define T_FAT32CALCULATE_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-#include "t_fat32base.h"
-
-/**
-Fat32 Calculate Class. Inherits from the base class.
-Contains functions needed to perform the following calculations:
-	a) Setting the cluster count to a value greater than it actually is
-	b) Calculate the size of a FAT
-	c) Obtaining the cluster count of the volume
-*/
-class CBaseTestFat32Calculate : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32Calculate();
-		~CBaseTestFat32Calculate();
-		virtual TVerdict doTestStepL();	
-		TInt Calculate(TInt64 aPos,TInt aValue);	
-		TInt SetToGreater(TUint32 aClusterCount, TInt aPos);
-		TInt ComputeFatSize();
-		TInt CheckClusterCount(TUint32 aClusterCount);	
-		TInt CheckFSInfo(TInt aPos);
-	protected:
-	
-	
-};
-
-_LIT(KTestStepCalculate, "Calculate");
-
-#endif // T_FAT32CALCULATE_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32checkdisk.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32CHECKDISK_H
-#define T_FAT32CHECKDISK_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-#include "t_fat32base.h"
-
-/**
-Fat32 CheckDisk Class. Inherits from the base class.
-Checks the integrity of the disk using RFs::CheckDisk() and 
-RFs::ScanDrive()
-*/
-class CBaseTestFat32CheckDisk : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32CheckDisk();
-		~CBaseTestFat32CheckDisk();
-		virtual TVerdict doTestStepL();		
-	protected:
-	
-	
-};
-
-_LIT(KTestStepCheckDisk, "CheckDisk");
-
-#endif // T_FAT32CHECKDISK_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32clusterbound.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32CLUSTERBOUND_H
-#define T_FAT32CLUSTERBOUND_H
-
-
-#include "t_fat32base.h"
-#include <f32file.h>
-#include <e32math.h>
-
-
-/**
-Fat32 ClusterBound Class. Inherits from the base class.
-Contains functions needed in attempting to access outside the 
-bounds of the cluster range
-*/ 
-class CBaseTestFat32ClusterBound : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32ClusterBound (); 
-		virtual  ~CBaseTestFat32ClusterBound ();
-		virtual TVerdict doTestStepL();	
-		TInt TestClusterBoundsWriteFile();
-		TInt TestClusterBoundsCreateFiles();
-		
-	protected:				
-};
-
-_LIT(KTestStepClusterBound, "ClusterBound");
-
-#endif // T_FAT32CLUSTERBOUND_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32filldisk.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#ifndef T_FAT32FILLDISK_H
-#define T_FAT32FILLDISK_H
-
-
-#include "t_fat32base.h"
-#include <f32file.h>
-#include <e32math.h>
-
-/**
-Fat32 FillDisk Class. Inherits from the base class.
-Fills the disk to its maxinmum capacity
-*/
-class CBaseTestFat32FillDisk : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32FillDisk (); 
-		virtual  ~CBaseTestFat32FillDisk ();
-		virtual TVerdict doTestStepL();	
-					
-};
-
-_LIT(KTestStepFillDisk, "FillDisk");
-
-#endif // T_FAT32FILLDISK_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32format.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32FORMAT_H
-#define T_FAT32FORMAT_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-#include "t_fat32base.h"
-
-/**
-Fat32 Format Class. Inherits from the base class.
-Contains functions needed to format the disk when given the format type
-that is required and the drive to format.
-*/
-class CBaseTestFat32Format : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32Format();
-		~CBaseTestFat32Format();
-		virtual TVerdict doTestStepL();	
-		TInt FormatFat(TDriveUnit aDrive, TPtrC16 aFormat);				
-	protected:
-	
-	
-};
-
-_LIT(KTestStepFormat, "Format");
-
-#endif // T_FAT32FORMAT_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32larger512.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32LARGER512_H
-#define T_FAT32LARGER512_H
-
-
-#include "t_fat32base.h"
-#include <f32file.h>
-#include <e32math.h>
-
-typedef enum
-{
-	ETRUE,
-	EFALSE	
-}TBOOL;
-
-/**
-Fat32 Larger512 Class. Inherits from the base class.
-Ensures that FAT32 is only implemented for disk sizes greater or equal to 512MB
-*/  	
-class CBaseTestFat32Larger512 : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32Larger512 (); 
-		virtual  ~CBaseTestFat32Larger512 ();
-		virtual TVerdict doTestStepL();	
-		
-	protected:
-					
-};
-
-_LIT(KTestStepLarger512, "Larger512");
-
-#endif // T_FAT32LARGER512_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32mount.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32MOUNT_H
-#define T_FAT32MOUNT_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-#include "t_fat32base.h"
-
-/**
-Fat32 Mount Class. Inherits from the base class.
-Contains functions needed to mount the file system
-*/
-class CBaseTestFat32Mount : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32Mount();
-		~CBaseTestFat32Mount();
-		virtual TVerdict doTestStepL();			
-	protected:
-	
-	
-};
-
-_LIT(KTestStepMount, "Mount");
-
-#endif // T_FAT32MOUNT_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32readfile.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32READFILE_H
-#define T_FAT32READFILE_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-#include "t_fat32base.h"
-
-/**
-Fat32 ReadFile Class. Inherits from the base class.
-Contains functions needed to read a file, with other associated functions, 
-such as:
-	a) Reading a file
-	b) Opening a file
-	c) Listing a list of directory entries
-	d) Obtaining the last modified date and time of a file
-*/
-class CBaseTestFat32ReadFile : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32ReadFile(); 
-		~CBaseTestFat32ReadFile();
-		// the actual test step
-		virtual TVerdict doTestStepL();	
-		TInt ReadFile(const TDesC16& aFile);
-		TInt OpenFile(const TDesC16& aFile);
-		TInt DirList(const TDesC16& aFile);
-		TInt GetModDate(const TDesC16& aFile);	
-		TInt GetModTime(const TDesC16& aFile);				
-	protected:
-	
-	
-};
-
-_LIT(KTestStepReadFile, "ReadFile");
-
-#endif // T_FAT32READFILE_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32readraw.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32READRAW_H
-#define T_FAT32READRAW_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-#include "t_fat32base.h"
-
-/**
-Fat32 ReadRaw Class. Inherits from the base class.
-Contains functions needed to read the raw disk when given the number
-of bytes to read and the position from which to read from
-*/
-class CBaseTestFat32ReadRaw : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32ReadRaw();
-		~CBaseTestFat32ReadRaw();
-		virtual TVerdict doTestStepL();	
-		TInt ReadRaw(TInt64 aPos,TInt aLen,TInt *aAsciiValue);
-		TInt GetCorrectResult(TInt aNumOfBytes,TInt* aCorrectResultArray);
-		TInt GetCluster(TInt aClusterNumber,TInt64 &aPosition);	
-		TInt CheckMask(TInt aMask, TInt aNumOfBytes, TInt *aAsciiValue, TInt64 aPos);			
-	protected:
-	
-	
-};
-
-_LIT(KTestStepReadRaw, "ReadRaw");
-
-#endif // T_FAT32READRAW_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32readwrite.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32READWRITE_H
-#define T_FAT32READWRITE_H
-
-
-#include "t_fat32base.h"
-#include <f32file.h>
-#include <e32math.h>
-
-
-/**
-Fat32 ReadWrite Class. Inherits from the base class.
-This class tests the read write operation on a file whilst removing the disk
-in the middle of an operation.
-*/  
-class CBaseTestFat32ReadWrite : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32ReadWrite (); 
-		virtual  ~CBaseTestFat32ReadWrite ();
-		virtual TVerdict doTestStepL();	
-		
-	protected:					
-};
-
-_LIT(KTestStepReadWrite, "ReadWrite");
-
-#endif // T_FAT32READWRITE_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32server.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef T_FAT32SERVER_H
-#define T_FAT32SERVER_H
-
-#include <test/testexecuteserverbase.h>
-
-
-class CBaseTestFat32Server : public CTestServer
-	{
-public:
-	static CBaseTestFat32Server* NewL();
-	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
-	};
-
-#endif // T_FAT32SERVER_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32writefile.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32WRITEFILE_H
-#define T_FAT32WRITEFILE_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-#include "t_fat32base.h"
-
-/**
-Fat32 WriteFile Class. Inherits from the base class.
-Contains functions needed to perform various different write file operations
-*/
-class CBaseTestFat32WriteFile : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32WriteFile(); 
-		~CBaseTestFat32WriteFile();
-		virtual TVerdict doTestStepL();	
-		TInt WriteFile(const TDesC16& aFile);	
-		TInt SetAttribs(const TDesC16& aFile);
-		TInt DirList(const TDesC16& aFile);	
-		TInt CheckErrCode(TInt aReturnCode);
-		TInt CheckAtt(const TDesC16& aFile, TUint setMask);
-		TInt MakeDirectory(const TDesC16& aDir);
-		TInt SetLabel(const TDesC16& aLabel);
-		TInt SetFileSize(const TDesC16& aFile);	
-		TInt DeleteFile(const TDesC16& aFile);	
-	
-	
-};
-
-_LIT(KTestStepWriteFile, "WriteFile");
-
-#endif // T_FAT32WRITEFILE_H
--- a/baseapitest/basesvs/conformance/f32/fat32/inc/t_fat32writeraw.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef T_FAT32WRITERAW_H
-#define T_FAT32WRITERAW_H
-
-#include <test/testexecutestepbase.h>
-#include <test/testexecuteserverbase.h>
-#include "t_fat32base.h"
-
-/**
-Fat32 WriteRaw Class. Inherits from the base class.
-Contains functions needed to write to the raw disk when given the number
-of bytes to read and the position at which to start writing to
-*/
-class CBaseTestFat32WriteRaw : public CBaseTestFat32Base
-	{
-	public:
-		CBaseTestFat32WriteRaw();
-		~CBaseTestFat32WriteRaw();
-		virtual TVerdict doTestStepL();	
-		TInt WriteRaw(TInt64 aPos,TInt aValue);	
-		TInt GetWriteValue(TInt aNumOfBytes,TInt* aValueArray);
-		TInt GetCluster(TInt aClusterNumber,TInt64 &aPosition);			
-	protected:
-	
-	
-};
-
-_LIT(KTestStepWriteRaw, "WriteRaw");
-
-#endif // T_FAT32WRITERAW_H
--- a/baseapitest/basesvs/conformance/f32/fat32/pkg/t_fat32.pkg	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-;
-; Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-; All rights reserved.
-; This component and the accompanying materials are made available
-; under the terms of "Eclipse Public License v1.0"
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-;
-; Install file for t_perf.exe
-;
-
-; Languages -
-&EN
-
-; Installation header
-; UID is the app's UID
-#{"t_fat32server"},(0x10281824),1,0,0
-
-;%{"Vendor-EN"}
-;:"Symbian"
-
-; Localised Vendor name
-%{"Nokia"}
-
-; Unique Vendor name
-:"Nokia"
-
-
-"t_fat32server.exe"-"!:\sys\bin\t_fat32server.exe"
-"tfat32.bat"-"!:\base\performance\f32\tfat32.bat"
-"conformance\f32\fat32\f32-fat32-conformance.script"-"!:\base\conformance\f32\fat32\f32-fat32-conformance.script"
-"t_base.tcs"-"!:\base\t_base.tcs"
-"conformance\f32\fat32\f32-fat32-conformance.ini"-"!:\base\conformance\f32\fat32\f32-fat32-conformance.ini"
-
-
-; Required files
-; None
-
-; Component .sis files
-; None
--- a/baseapitest/basesvs/conformance/f32/fat32/pkg/tfat32.bat	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-@rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
--- a/baseapitest/basesvs/conformance/f32/fat32/scripts/f32-fat32-conformance.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,749 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//@file f32-fat32-conformance.script
-//! @SYMTestSuiteName PBASE-FAT32
-//! @SYMScriptTestEnvironment base
-
-LOAD_SUITE t_fat32server
-
-START_TESTCASE                 	PBASE-BPB-FATSz32-0278
-//! @SYMTestCaseID               	PBASE-BPB-FATSz32-0278
-//! @SYMTestCaseDesc             	Verify that the field containing the FAT32 32-bit count of sectors occupied by one FAT is zero.
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Calculate the 32-bit count of sectors occupied by one FAT
-//!                              		2. Read the field containing the FAT32 32-bit count of sectors occupied by one FAT
-//!                              		3. Compare the value calculated and the value obtained
-//! @SYMTestExpectedResults      	The calclulated value and the obtained value are equal
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_FATSz32
-RUN_TEST_STEP -1 t_fat32server Calculate 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_FATSz32
-END_TESTCASE PBASE-BPB-FATSz32-0278
-
-
-START_TESTCASE                 	PBASE-BPB-ExtFlags-0279
-//! @SYMTestCaseID               	PBASE-BPB-ExtFlags-0279
-//! @SYMTestCaseDesc             	Verify that the extension flags contain the correct values
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Format the drive and read the BPB_ExtFlags field
-//!                              		2. Read Bits 4-6
-//!                              		3. Read Bits 8-15
-//! @SYMTestExpectedResults      	These are as follows:
-//!                              		1. If bit 7 is zero, then bits 0-3 are zero. If bit 7 is 1,
-//!                              		then bits 0-3 contain a zerobased number of the active FAT
-//!                              		2. Bits 4-6 are reserved and are therefore zero
-//!                              		3. Bits 8-15 are reserved and are therefore zero
-//! @SYMTestType                 	CIT
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_ExtFlags_1
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_ExtFlags_1
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_ExtFlags_4
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_ExtFlags_6
-END_TESTCASE PBASE-BPB-ExtFlags-0279
-
-
-START_TESTCASE                 	PBASE-Bit-CInShutBitMask-0280
-//! @SYMTestCaseID               	PBASE-Bit-CInShutBitMask-0280
-//! @SYMTestCaseDesc             	Verify the bits of the first reserved cluster FAT[0]
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Dismount the files system correctly and read the first reserved cluster bit.
-//! @SYMTestExpectedResults      	1. The first reserved cluster bit, FAT[0],  is 1
-//! @SYMTestType                	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  Bit_CInShutBitMask
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  Bit_CInShutBitMask
-END_TESTCASE PBASE-Bit-CInShutBitMask-0280
-
-
-START_TESTCASE                 	PBASE-Bit-CHrdErrBitMask-0281
-//! @SYMTestCaseID               	PBASE-Bit-CHrdErrBitMask-0281
-//! @SYMTestCaseDesc             	Verify the bits of the second reserved cluster FAT[0]
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Read the second reserved cluster, FAT[1], in the FAT table
-//! @SYMTestExpectedResults      	FAT table cluster contains the EOF mark.
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format		\base\conformance\f32\fat32\f32-fat32-conformance.ini  Bit_CHrdErrBitMask
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  Bit_CHrdErrBitMask
-END_TESTCASE PBASE-Bit-CHrdErrBitMask-0281
-
-
-START_TESTCASE                 	PBASE-BPB-FSVer-0282
-//! @SYMTestCaseID               	PBASE-BPB-FSVer-0282
-//! @SYMTestCaseDesc             	Verifying that disk utilities respect the version number
-//! @SYMREQ                     	 	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Read the version number.
-//!                              		2. Set the major version number to a value higher that already set only in the boot sector and 
-//!						then attempt to mount the volume
-//!	 					3. Set the major version number to a value higher that already set in both the boot sector and 
-//!						the backup boot sector and then attempt to mount the volume
-//!                              		4. Set the minor version number to a value higher that already set only in the boot sector and 
-//!						then attempt to operate on volumes
-//!						5. Set the minor version number to a value higher that already set in both the boot sector and 
-//!						the backup boot sector and then attempt to operate on volumes
-//!                              		with a higher minor version number
-//!                              		6. Attempt to mount volume when it contains a version number that was defined at the time that the driver
-//!                              		was written.
-//! @SYMTestExpectedResults      	With respect to the actions, they are as follows:
-//!								 1. The version number is 0.0
-//!								 2. The mount is successful as the backup boot sector is used
-//!								 3. The mount is unsuccessful
-//!								 4. The mount is successful as the backup boot sector is used
-//!								 5. The mount is unsuccessful
-//!								 6. The mount is successful 
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer
-RUN_TEST_STEP -1 t_fat32server  ReadRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer
-RUN_TEST_STEP -1 t_fat32server  Mount   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_2b
-RUN_TEST_STEP -1 t_fat32server  Mount   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_2b
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_3
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_3
-RUN_TEST_STEP -1 t_fat32server  Mount   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_3
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_3b
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_3
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_3b
-RUN_TEST_STEP -1 t_fat32server  Mount   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_3b
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_4
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_4
-RUN_TEST_STEP -1 t_fat32server  Mount   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_FSVer_4
-END_TESTCASE PBASE-BPB-FSVer-0282
-
-
-START_TESTCASE                 	PBASE-BPB-RootClus-0283
-//! @SYMTestCaseID               	PBASE-BPB-RootClus-0283
-//! @SYMTestCaseDesc             	Verify that disk repair utilities can easily find the root directory if the root cluster field gets zeroed
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Read the cluster number of the first cluster
-//!                              		2. Format the volume and mark cluster 2 asbad. Perform a quick format so that the bad cluster chains are kept and read the cluster number of the forst cluster.
-//!                              		3. Read the value of the cluster following the cluster ,marked as bad in the FAT table.
-//! @SYMTestExpectedResults      	These are as follows:
-//!                              		1. The cluster number of the first cluster is 2
-//!                              		2. Cluster number of the first cluster is 3.
-//!                              		3. Cluster contains the EOF mark (0x0FFFFFFF)
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_RootClus_1
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_RootClus_1
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_RootClus_2
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_RootClus_2
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_RootClus_2
-END_TESTCASE PBASE-BPB-RootClus-0283
-
-
-START_TESTCASE                 	PBASE-BPB-FSInfo-0284
-//! @SYMTestCaseID               	PBASE-BPB-FSInfo-0284
-//! @SYMTestCaseDesc             	Verify that the sector number of the FSINFO structure in the reserved area of the FAT32 volume is 1
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Read the sector number of the FSINFO structure in the reserved area of the FAT32 volume
-//! @SYMTestExpectedResults      	Sector number is 1
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_FSInfo
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_FSInfo
-END_TESTCASE PBASE-BPB-FSInfo-0284
-
-
-START_TESTCASE                 	PBASE-BPB_BkBootSec-0285
-//! @SYMTestCaseID               	PBASE-BPB_BkBootSec-0285
-//! @SYMTestCaseDesc             	Verify that the field points to the correct sector if a back-up boot sector exists.
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority            	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Read the field that indicates the sector number in the reserved area of the volume of a copy of the boot record.
-//!                              		2. Check to see if there is a copy of the boot record
-//! @SYMTestExpectedResults      	If the value obtained in action 1 is zero then there is no copy of the boot record
-//!                              		and sector 6 is zero. If the value obtained in action 1 is not zero then it is 6 and there is a copy of the boot
-//!                              		record in sector 6.
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_BkBootSec
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_BkBootSec
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_BkBootSec_i
-END_TESTCASE PBASE-BPB_BkBootSec-0285
-
-
-START_TESTCASE                	PBASE-BPB-Reserved-0286
-//! @SYMTestCaseID               	PBASE-BPB-Reserved-0286
-//! @SYMTestCaseDesc             	Verify that the formatting of a FAT32 volumes sets the field that is reserved for future expansion to zero.
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Perform a format of a FAT32 volume and read the field that is reserved for future expansion.
-//!                              		2. Perform a format of a FAT32 volume and, using raw disk access,  set the field that is reserved for
-//!                              		future expansion at offset 52 of the boot sector to 1. Following this check the integrity of the disk by
-//!                              		calling RFs::CheckDisk().
-//! @SYMTestExpectedResults      	These are as follows
-//!                              		1. Field that is reserved for future expansion to is set to zero.
-//!                              		2. KErrCorrupt is returned
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus              	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_Reserved
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_Reserved
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_Reserved_2
-RUN_TEST_STEP -1 t_fat32server CheckDisk 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_Reserved_2
-END_TESTCASE PBASE-BPB-Reserved-0286
-
-
-START_TESTCASE                 	PBASE-BPB-RootEntCnt-0287
-//! @SYMTestCaseID               	PBASE-BPB-RootEntCnt-0287
-//! @SYMTestCaseDesc             	Verify general characteristics of a FAT data structure.
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Read the first data cluster and note the cluster number by formatting the disk and creating a file
-//!                              		2. Read the BPB_RootEntCnt field at offset 17 of the boot sector and
-//!                              		3. Set the field BPB_RootEntCnt to a value other than zero and determine the integrity of the disk by calling RFs::CheckDisk().
-//! @SYMTestExpectedResults      	These are as follows
-//!                              		1. Cluster number is cluster 2
-//!                              		2. Value is 0
-//!                              		3. KErrUnknown
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus              	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_RootEntCnt_2
-RUN_TEST_STEP -1 t_fat32server ReadRaw	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_RootEntCnt_2
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  BPB_RootEntCnt_3
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_RootEntCnt_3i
-RUN_TEST_STEP -1 t_fat32server  CheckDisk    \base\conformance\f32\fat32\f32-fat32-conformance.ini   BPB_RootEntCnt_3
-END_TESTCASE PBASE-BPB-RootEntCnt-0287
-
-
-START_TESTCASE                 	PBASE-FAT32Cluster-0288
-//! @SYMTestCaseID               	PBASE-FAT32Cluster-0288
-//! @SYMTestCaseDesc             	Verify general cluster characteristics of a FAT32 file system
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Calculate the number of clusters that the FAT32 volume has
-//!                              		2. On a formatted volume, mark cluster 4 as bad. Following this create a file that is three clusters long.
-//!                              		Using raw disk access, read the values of clusters 3 till 6 in the FAT table.
-//! @SYMTestExpectedResults      	These are as follows
-//!                              		1. Cluster number is cluster 2
-//!                             		2. Value is 0
-//!                              		3. KErrUnknown
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FAT32Cluster_1
-RUN_TEST_STEP -1 t_fat32server Calculate	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FAT32Cluster_1
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FAT32Cluster_2a
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FAT32Cluster_2a
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FAT32Cluster_2a
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FAT32Cluster_2a
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FAT32Cluster_2b
-END_TESTCASE PBASE-FAT32Cluster-0288
-
-
-START_TESTCASE                 	PBASE-FSINFOSTRUC-1-0289
-//! @SYMTestCaseID               	PBASE-FSINFOSTRUC-1-0289
-//! @SYMTestCaseDesc             	Validate FAT32 FSInfo Sector Structure and Backup Boot Sector Parameters
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Read the lead signature, FSI_LeadSig at offset 0 of the FSInfo sector
-//!                              		2. Read the tail signature, FSI_LeadSig at offset 0 of the FSInfo sector
-//!                              		3. Read the FSI_StrucSig field at offset 484 of the FSInfo Sector,
-//!                              		4. Perform the following for the field that contains the last known cluster count on the volume
-//!                              			a. Read the FSI_Free_Count field at offset 488 of the FSInfo sector
-//!                              			b. Write a file of 3 clusters long. Following this use raw disk access to read the FSI_Free_Count field.
-//!                              			c. Set the FSI_Free_count field to 0xFFFFFFFF and check the integrity of the disk.
-//!                              			d. Set the field to a value greater than the cluster count and check the integrity of the disk by calling RFs::CheckDisk();
-//!                              		5. Perform the following for the field that indicates the cluster number at which the driver should start looking for a free cluster
-//!                              			a. Read the FSI_Nxt_Free field at offset 492 of the FSInfo sector.
-//!                              			b. Mark cluster 3 as bad with the value 0x0FFFFFF7. Perform a quick format and read the FSI_Nxt_Free field.
-//!                              			c. Write a file that is 3 clusters long. Following this read the FSI_Nxt_Free field.
-//! @SYMTestExpectedResults      These are as follows
-//!                              		1. Lead signature is 0x41615252
-//!                              		2. Tail signature is 0xAA550000
-//!                              		3. Field contains the value 0x61417272
-//!                              		4. The expected results from these actions are
-//!                              			a. Either contains the cluster count or the value 0xFFFFFFFF
-//!                              			b. Contains the cluster count minus 3
-//!                              			c. Disk is not reported as corrupt
-//!                              			d. Disk is reported as corrupt
-//!                              		5. The expected results for these actions are
-//!                              			a. Driver starts looking at cluster 2
-//!                              			b. Driver starts looking at cluster 4
-//!                              			c. Driver starts looking at cluster 6
-//! @SYMTestType                	 CIT
-//! @SYMTestStatus               	 Implemented
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_1
-RUN_TEST_STEP -1 t_fat32server  ReadRaw  	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_1
-RUN_TEST_STEP -1 t_fat32server  ReadRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_2
-RUN_TEST_STEP -1 t_fat32server  ReadRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_3
-RUN_TEST_STEP -1 t_fat32server  WriteFile   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_4b
-RUN_TEST_STEP -1 t_fat32server  Calculate   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_4b
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_4c
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_4c
-RUN_TEST_STEP -1 t_fat32server  CheckDisk   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_4c
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_4d
-RUN_TEST_STEP -1 t_fat32server  Calculate   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_4d
-RUN_TEST_STEP -1 t_fat32server  CheckDisk   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_4d
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_5b
-RUN_TEST_STEP -1 t_fat32server  Format   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_5b
-RUN_TEST_STEP -1 t_fat32server  ReadRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_5b
-RUN_TEST_STEP -1 t_fat32server  Format  	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_5c
-RUN_TEST_STEP -1 t_fat32server  WriteFile   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_5c
-RUN_TEST_STEP -1 t_fat32server  ReadRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   FSINFOSTRUC_5c
-END_TESTCASE PBASE-FSINFOSTRUC-1-0289
-
-
-START_TESTCASE                 	PBASE-DIR-Name-0290
-//! @SYMTestCaseID               	PBASE-DIR-Name-0290
-//! @SYMTestCaseDesc             	Validate the values for the first byte of the short name field
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Write a file. Delete the file created and read the first byte of the sort name field.
-//!                              		2. Read the first byte of the short name field of an emty entry.
-//!                              		3. Write a file. Set the first byte of the short name field to a value less than 0x20 and attempt to open the file.
-//!                              		4. Write a file. Set the first byte of the short name field to 0x05 and attempt to open the file.
-//!                              		5. Write a file. Set the first byte of the shorname field to the values stated below and following this attempt to open the file.
-//!                              		0x22, 0x2A, 0x2B, 0x2C, 0x2E, 0x2F, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x5B, 0x5C, 0x5D, 0x7C.
-//! @SYMTestExpectedResults      	These are as follows
-//!                              		1. The first byte of the short name field is set to 0xE5
-//!                              		2. The first byte of the short name field is set to 0x00
-//!                              		3. File is reported as corrupt
-//!                              		4. File is opened
-//!                              		5. File is reported as corrupt in all cases
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_1
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_1
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_1
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_2
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_3
-RUN_TEST_STEP -1 t_fat32server WriteFile	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_3
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_3
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_3
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5i
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5i
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5i
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5i
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5ii
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5ii
-RUN_TEST_STEP -1 t_fat32server WriteRaw	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5ii
-RUN_TEST_STEP -1 t_fat32server ReadFile	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5ii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5iii
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5iii
-RUN_TEST_STEP -1 t_fat32server WriteRaw	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5iii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5iii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5iv
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5iv
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5iv
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5iv
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5v
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5v
-RUN_TEST_STEP -1 t_fat32server WriteRaw	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5v
-RUN_TEST_STEP -1 t_fat32server ReadFile	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Name_5v
-END_TESTCASE PBASE-DIR-Name-0290
-
-
-START_TESTCASE                 	PBASE-DIR-Attr-0291
-//! @SYMTestCaseID               	PBASE-DIR-Attr-0291
-//! @SYMTestCaseDesc             	Verify the parameters for the field that specifies the attributes of the file
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Create a test file, set the KEntryAttReadOnly attribute to the file and attempt to write to the file.
-//!                              		2. Create a test file, set the attribute KEntryAttHidden and perform a CDir listing excluding the KEntryAttHidden mask.
-//!                              		3. Create a test file, set the attribute KEntryAttSyste and check that the attributes have been changed
-//!                              		4. Create a test file, set the attribute KEntryAttDir and check that the attributes have been changed.
-//!                              		5. Create a test directory and check the attributes of the entry.
-//!                              		6. Set a file system label "X:TestLabel". Following this perform a raw read to look for the entry and read the attribute.
-//!                              		7. Attempt to create another entry with ATTR_VOLUME_ID set
-//! @SYMTestExpectedResults      	These are as follows
-//!                              		1. Write access is denied
-//!                              		2. The file does not appear in the listing
-//!                              		3. Attributes of the test file have been changed
-//!                              		4. Attributes of the test file are not changed
-//!                              		5. The attribute is specified as ATTR_DIRECTORY.
-//!                              		6. The attribute is specified as ATTR_VOLUME_ID.
-//!                              		7. Permission is denied to have more than one file specified with the attribute ATTR_VOLUME_ID.
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_1
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_1
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_2
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_2
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_3
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_3
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_4
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_4
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_5
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_5
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_6
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_6
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_7
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Attr_7
-END_TESTCASE PBASE-DIR-Attr-0291
-
-
-START_TESTCASE                 	PBASE-DIRSPECIALENT-0292
-//! @SYMTestCaseID               	PBASE-DIRSPECIALENT-0292
-//! @SYMTestCaseDesc             	Verify that if the directory is not in the root directory, 2 special entries are created in the first two
-//!                              		32-byte directory entries of the directory
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              	1. Perform a full format and create a directory. Using raw disk access read
-//!                              		a. the first byte of the entry
-//!                              		b. the 32nd byte of the entry
-//!                              	2. Attempt to create a file, using RFile::Write() with the following names
-//!                              		a. "."
-//!                             	 	b. ".."
-//! @SYMTestExpectedResults      These are as follows
-//!                              	1. Two special entries are created in the first two 32-byte directory entries of the directory
-//!                              	a. First directory has the name set to "."
-//!                              	b. Second directory has the name set to ".."
-//!                              	2.
-//!                              	a. File cannot be created, KErrBadName is returned
-//!                              	b. File cannot be created, KErrBadName is returned
-//! @SYMTestType              CIT
-//! @SYMTestStatus            Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIRSPECIALENT_1
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIRSPECIALENT_1
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIRSPECIALENT_1a
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIRSPECIALENT_1b
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIRSPECIALENT_2a
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIRSPECIALENT_2b
-END_TESTCASE PBASE-DIRSPECIALENT-0292
-
-
-START_TESTCASE                 	PBASE-DIR-Date-0293
-//! @SYMTestCaseID               	PBASE-DIR-Date-0293
-//! @SYMTestCaseDesc             	Validating the date format
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Create a file and using raw disk access, change the created date field and the modified date
-//!                              		field in the entry various correct and incorrectvalues. Following this call the function RFs::Modified().
-//! @SYMTestExpectedResults      	These are as follows
-//!                              			a. All correct values return the date written to the disk
-//!                             		 	b. All incorrect values return the default vlaue 01/01/0000
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format		 \base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1ai
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1aii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1aii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1bi
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1bii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1bii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1ci
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1cii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_1cii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2ai
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2aii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2aii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2bi
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2bii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2bii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2ci
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2cii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2cii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2di
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2dii
-RUN_TEST_STEP -1 t_fat32server ReadFile	 \base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_2dii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_3ai
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_3aii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_3aii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_3bi
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_3bii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Date_3bii
-END_TESTCASE PBASE-DIR-Date-0293
-
-
-START_TESTCASE                 	PBASE-DIR-Time-0294
-//! @SYMTestCaseID               	PBASE-DIR-Time-0294
-//! @SYMTestCaseDesc             	Validating the time format
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Create a file and using raw disk access, change the created time field and the modified time
-//!                              		field in the entry various correct and incorrectvalues. Following this call the function RFs::Modified().
-//! @SYMTestExpectedResults      	These are as follows
-//!                              		a. All correct values return the time written to the disk
-//!                              		b. All incorrect values return the default vlaue 00:00:00
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1ai
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1aii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1aii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1bi
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1bii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1bii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1ci
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1cii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_1cii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2ai
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2aii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2aii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2bi
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2bii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2bii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2ci
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2cii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_2cii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3ai
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3aii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3aii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3bi
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3bii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3bii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteFile	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3bi
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3bii
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  DIR_Time_3bii
-END_TESTCASE PBASE-DIR-Time-0294
-
-
-START_TESTCASE                 	PBASE-LDIR-0295
-//! @SYMTestCaseID               	PBASE-LDIR-0295
-//! @SYMTestCaseDesc             	Validate values for the long name field.
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Create a file that takes up 3 long directory entries. Read the first byte of the last long directory name.
-//!                              		2. Create a file that taked up 2 long directory entries. Delete the file and Read the fist byte of each long entry
-//!                              		3. Create a file that takes up 6long directory entries. Read the first byte of the last long entry and the first byte of the first
-//!                              		long entry to check the range.
-//!                              		4. Create a file and read the attributes of the long directory entry at position 11 of the entry
-//!                              		5. Create a file and perform the following
-//!                              			a) Read the field LDIR_FstClusLO at position 26 of the long directory entry
-//!                              			b) Use raw disk access to write a value other than zero to the LDIR_FstClusLO field and
-//!                              		following this check the integrity of the disk by calling RFs::CheckDisk().
-//! @SYMTestExpectedResults      	These are as follows
-//!                              		1. The value is masked witih 0x40 and is therefore 0x43
-//!                              		2. The first byte of each long entry is set to 0xE5
-//!                              		3. The first byte of the last long entry is 0x46 and the first byte of the first long entry is 0x01, indicating that the range is 1-6
-//!                              		4. The attribute is set to ATTR_LONG_NAME (0x0F)
-//!                              		5. The following is expected form the actions
-//!                              			a. Value is 0x00
-//!                              			b. Disk errors are reported
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_1
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_1
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_1
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_2a
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_2a
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_2a
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_2ai
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_2b
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_2b
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_2b
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_2bi
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_3
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_3
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_3
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_3i
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_4
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_4
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_4
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_5
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_5
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_5
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_5i
-RUN_TEST_STEP -1 t_fat32server ReadFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  LDIR_5i
-END_TESTCASE PBASE-LDIR-0295
-
-
-START_TESTCASE                 	PBASE-HighFourRes-0296
-//! @SYMTestCaseID               	PBASE-HighFourRes-0296
-//! @SYMTestCaseDesc             	Ensuring that the first 4 bytes from offset 36 cannot be any value other than zero
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Format the volume and using raw disk access change the third cluster value in the FAT table to 0xFFFFFFFF.
-//!                              		Following this perform a quick format and using raw disk access, read the third cluster value.
-//! @SYMTestExpectedResults      	Third cluster contains the value 0x0FFFFFFF
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  HighFourRes_a
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  HighFourRes_a
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  HighFourRes_a
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  HighFourRes_b
-RUN_TEST_STEP -1 t_fat32server ReadRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  HighFourRes_b
-END_TESTCASE PBASE-HighFourRes-0296
-
-
-START_TESTCASE                 	PBASE-CorruptFatTable-0297
-//! @SYMTestCaseID               	PBASE-CorruptFatTable-0297
-//! @SYMTestCaseDesc             	Purposely corrupting file systems to ensure they are handled gracefully
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	These are as follows:
-//!                              		1. Purposely producing an  FAT table and determine the integrity of the disk
-//!                              		2. Introducing 'garbage' material into the fat table and calling RFs::Checkdisk to determine the integrity of the disk
-//!                              		3. Purposely allowing the FAT table to point to positions that do not exist and  determine the integrity of the disk
-//!                              		4. Marking blocks that are bad as good without performing a full low-level scan of the media and  determine the integrity of the disk
-//! @SYMTestExpectedResults      	The disk is reported as corrupt in all cases
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_1i
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_1i
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_1ii
-RUN_TEST_STEP -1 t_fat32server CheckDisk 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_1ii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_2i
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_2i
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_2ii
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_2iii
-RUN_TEST_STEP -1 t_fat32server CheckDisk 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_2iii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_3i
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_3i
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_3ii
-RUN_TEST_STEP -1 t_fat32server CheckDisk 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_3ii
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_4i
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_4i
-RUN_TEST_STEP -1 t_fat32server WriteFile 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_4ii
-RUN_TEST_STEP -1 t_fat32server WriteRaw 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_4ii
-RUN_TEST_STEP -1 t_fat32server CheckDisk 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  CorruptFatTable_4iii
-END_TESTCASE PBASE-CorruptFatTable-0297
-
-
-START_TESTCASE                 	PBASE-BadMedia-0298
-//! @SYMTestCaseID               	PBASE-BadMedia-0298
-//! @SYMTestCaseDesc             	Using unreadable or unusable media to ensure they are handled gracefully
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Attempting to mount a file system on unreadable media
-//! @SYMTestExpectedResults      	The media is reported as unkown
-//! @SYMTestType                 	CIT
-RUN_TEST_STEP -1 t_fat32server  Format  	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BadMedia
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BadMedia
-RUN_TEST_STEP -1 t_fat32server  WriteRaw   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BadMedia_i
-RUN_TEST_STEP -1 t_fat32server  CheckDisk    \base\conformance\f32\fat32\f32-fat32-conformance.ini   BadMedia
-RUN_TEST_STEP -1 t_fat32server  Mount   	\base\conformance\f32\fat32\f32-fat32-conformance.ini   BadMedia
-END_TESTCASE PBASE-BadMedia-0298
-
-
-START_TESTCASE                 	PBASE-Larger512-0299
-//! @SYMTestCaseID               	PBASE-Larger512-0299
-//! @SYMTestCaseDesc             	Ensuring FAT32 is only used when necessary
-//! @SYMREQ                     	 	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Mounting the file system on various size media
-//! @SYMTestExpectedResults      	The media is reported as unkown
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  Larger512
-RUN_TEST_STEP -1 t_fat32server Larger512 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  Larger512
-END_TESTCASE PBASE-Larger512-0299
-
-
-START_TESTCASE                 	PBASE-FillDisk-0300
-//! @SYMTestCaseID               	PBASE-FillDisk-0300
-//! @SYMTestCaseDesc             	Ensuring that the disk can be filled to its maximum capacity
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Perform the following actions on FAT32 media
-//!                              			a. Filling the drive with one big file
-//!                              			b. Check the size of the file
-//! @SYMTestExpectedResults      	These are as follows:
-//!                              		a. The disk is full
-//!                              		b. Size of the file is equal to the free space available on the disk before it has been filled
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FillDisk
-RUN_TEST_STEP -1 t_fat32server FillDisk 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FillDisk
-RUN_TEST_STEP -1 t_fat32server ClusterBound \base\conformance\f32\fat32\f32-fat32-conformance.ini  ClusterBound_1
-END_TESTCASE PBASE-FillDisk-0300
-
-
-START_TESTCASE                 	PBASE-ClusterBound-0301
-//! @SYMTestCaseID               	PBASE-ClusterBound-0301
-//! @SYMTestCaseDesc             	Testing the cluster boundary values
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Perform the following actions on FAT32 media
-//!                              		1. Create one big file to fill the disk. Following this, create another file and attempt to write to this new file.
-//!                              		2. Create one big file to fill the disk then fill the root directory by creating many empty files. Following this attempt to create another file.
-//! @SYMTestExpectedResults      	The disk is full
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format 		\base\conformance\f32\fat32\f32-fat32-conformance.ini  FillDisk
-RUN_TEST_STEP -1 t_fat32server FillDisk 		\base\conformance\f32\fat32\f32-fat32-conformance.ini  FillDisk
-RUN_TEST_STEP -1 t_fat32server ClusterBound 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  ClusterBound_1
-RUN_TEST_STEP -1 t_fat32server Format 		\base\conformance\f32\fat32\f32-fat32-conformance.ini  FillDisk
-RUN_TEST_STEP -1 t_fat32server FillDisk		 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  FillDisk
-RUN_TEST_STEP -1 t_fat32server ClusterBound 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  ClusterBound_2
-END_TESTCASE PBASE-ClusterBound-0301
-
-
-START_TESTCASE                 	PBASE-RemoveMedia-0302
-//! @SYMTestCaseID               	PBASE-RemoveMedia-0302
-//! @SYMTestCaseDesc             	Sudden removal of removable media cards
-//! @SYMREQ                      	REQ7827
-//! @SYMTestPriority             	High
-//! @SYMTestActions              	Perform the following actions on FAT32 media
-//!                              		1. Simulating the removal of a media card whilst operations are taking place
-//! @SYMTestExpectedResults      	The disk should not be corrupt
-//! @SYMTestType                 	CIT
-//! @SYMTestStatus               	Implemented
-RUN_TEST_STEP -1 t_fat32server Format		 \base\conformance\f32\fat32\f32-fat32-conformance.ini  RemoveMedia
-Print DURING THIS TEST PLEASE REMOVE THE CARD
-RUN_TEST_STEP -1 t_fat32server ReadWrite 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  RemoveMedia
-Print PLEASE INSERT THE CARD
-DELAY 3000
-RUN_TEST_STEP -1 t_fat32server CheckDisk 	\base\conformance\f32\fat32\f32-fat32-conformance.ini  RemoveMedia
-END_TESTCASE PBASE-RemoveMedia-0302
-
-
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32base.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,456 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32base.h"
-#include "sl_bpb1.h"
-#include "basetedefs.h"
-#include <f32file.h>
-
-static RRawDisk TheDisk;
-static  TFatBootSector TheBootSector;
-
-TDiskType gDiskType = EFatUnknown;
-TInt gBytesPerCluster;
-TInt gEntriesPerCluster;
-TInt gDataStartBytes;
-TInt gRootDirSectors;
-TInt gTotalSectors;
-TInt gRootDirStart;
-TInt gRootSector;
-TInt gRootCluster;
-TInt gFatStartBytes;
-TInt gFatTestEntries;
-TInt gFatSizeSectors;
-TInt gFirstDataSector;
-TInt gFirstDataCluster;
-TInt gMaxDataCluster;
-TInt gClusterCount;
-TInt gEndOfChain;      
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32Base::CBaseTestFat32Base() 
-	{
-	SetTestStepName(KTestStepBase);
-	}
-	
-/**
-Class Destructor
-*/		    
-CBaseTestFat32Base::~CBaseTestFat32Base() 
-	{
-	}
-
-
-/** 
-Base step to all test steps which carries out the followng actions:
-1. Gets the drive letter
-2. Checks that it is not a RAM drive
-3. Obtains the size of the disk
-4. Ensures that the volume is either FAT or FAT32
-5. Sets the session path
-6. Ensures that the number of sectors per cluster is correct
-7. Calculates the cluster count of the volume. 
-
-@return EPass if test passes and EFail if test fails
-*/ 
-
-TVerdict CBaseTestFat32Base::doTestStepPreambleL()
-	{
-	SetTestStepResult(EFail);
-	RDebug::Printf("Starting next test step...");
-	CheckDebug(); 
-	ParseCommandArguments();
-	iTheFs.Connect();
-	TInt drvNum = CurrentDrive();
-	if (!IsFileSystemFAT32() && !IsFileSystemFAT(iTheFs,drvNum))
-		{
-		_LIT(KNotFat, "Test requires FAT filesystem");
-		INFO_PRINTF1(KNotFat);
-		return TestStepResult();
-		}
-	
-	
-	// check this is not the internal ram drive and get the size of the disk
-	TVolumeInfo volumeInfo;
-	iTheFs.Volume(volumeInfo, CurrentDrive());
-	TBool isRamDrive = volumeInfo.iDrive.iMediaAtt&KMediaAttVariableSize;
-	iDiskSize = volumeInfo.iSize;
-
-	// Obtain the Size of the disk from the media driver
-	TBusLocalDrive mmcDrive;
-	TBool changeFlag;
-	changeFlag=EFalse;
-	TInt r = mmcDrive.Connect(1,changeFlag);
-	TTime startTime;
-	startTime.HomeTime();
-	TLocalDriveCapsV2 information;
-	TPckg<TLocalDriveCapsV2> pckg(information);
-	r = mmcDrive.Caps(pckg);
-	iDriveSize = information.iSize;
-
-
-	// Set the Session Path	
-	_LIT(Ksp, "%c:\\");
-	TBuf<4> sessionPath;
-	sessionPath.Format(Ksp, (TUint)iDriveToTest);
-	r = iTheFs.SetSessionPath(sessionPath);
-	r = iTheFs.SessionPath(iSessionPath);
-	 
-	
-
-	CalculateClusCount();
-	
-	// Check the Sectors per cluster and Cluster count	
-	r = CheckSecPerClus();
-	if (r != KErrNone)
-		{
-		INFO_PRINTF1(_L("WARNING: Sector Per Cluster check was incorrect - Card should have special format requirements"));
-		iMedia = 1;
-		}
-	else
-		{
-		INFO_PRINTF1(_L("Sector Per Cluster check is correct"));
-		iMedia = 0;
-		}
-	
-	if (isRamDrive)
-		{
-		SetTestStepResult(EAbort);
-		_LIT(KRamNotValid, "Tests not valid on internal ram drive ");
-		INFO_PRINTF1(KRamNotValid);
-		return TestStepResult();
-		}
-	else
-	SetTestStepResult(EPass);
-	return TestStepResult();
-	}
-
-/**
-Get the drive letter from the ini file
-*/
-void CBaseTestFat32Base::ParseCommandArguments(void)
-	{
-	TBufC<2> driveLetter;
-	TPtrC16 letter = driveLetter;
-	_LIT(KLetter,"DriveLetter");
-	_LIT(KCommon,"Common");
-	TBool alright = GetStringFromConfig(KCommon, KLetter, letter);
-	if (alright)		
-		{			
-		iDriveToTest = letter[0];
-		iDriveToTest.UpperCase();
-		}
-	
-	}
-
-/** 
-Sets the debug register value for debug builds if specified in the ini file
-*/	
-void CBaseTestFat32Base::CheckDebug()
-	{
-	TInt debug;
-	_LIT(KDebug,"SetDebug");
-	_LIT(KCommon,"Common");
-	TBool alright = GetIntFromConfig(KCommon, KDebug, debug);
-	if (alright)		
-		{
-		if (debug == 1)
-			{
-			#ifdef _DEBUG			
-			iTheFs.SetDebugRegister(KFSYS);
-			#else
-			_LIT(KNotDebug,"This is not a Debug build");
-			INFO_PRINTF1(KNotDebug);
-			#endif
-			}
-		else
-			{
-			_LIT(KSpecifyDebug,"Debugging not specified in ini file");
-			INFO_PRINTF1(KSpecifyDebug);
-			}
-		}
-	
-	}
-/** 
-Converts the drive letter to the drive number
-
-@return driveNum The number of the drive
-*/	
-TInt CBaseTestFat32Base::CurrentDrive()
-	{
-	TInt driveNum;
-	iTheFs.CharToDrive(iDriveToTest,driveNum);
-	return(driveNum);
-	}
-	
-	
-/** 
-Check to see whether the volume is FAT32
-
-@return TRUE if is Fat32 else FALSE
-*/	
-TBool CBaseTestFat32Base:: IsFileSystemFAT32()
-	{
-//	_LIT(KFat32Name,"Fat32");
-	if(TheBootSector.RootDirEntries() == 0)
-		{
-		gEndOfChain = 0x0FFFFFFF;
-		_LIT(KIsFat32, "Is Fat32 filesystem");
-		INFO_PRINTF1(KIsFat32);
-		return TRUE;
-		}
-	else
-		{
-		_LIT(KIsNotFat32, "Is Not Fat32 filesystem");
-		INFO_PRINTF1(KIsNotFat32);
-		return FALSE;
-		}
-	}
-
-/** 
-Check to see whether the volume is FAT
-
-@return TRUE if is Fat else FALSE
-*/	
-TBool CBaseTestFat32Base::IsFileSystemFAT(RFs &aFsSession,TInt aDrive)
-	{
-	_LIT(KFatName,"Fat");
-	TFileName f;
-	TInt r = aFsSession.FileSystemName(f,aDrive);
-	if (r != KErrNone)
-		{
-		_LIT(KNoFatName, "Unable to get file system name");
-		INFO_PRINTF1(KNoFatName);
-		return FALSE;
-		}
-	return (f.CompareF(KFatName) == 0);
-	}
-
-
-/** 
-Check that the sectors per cluster is correct for the disk size used
-
-@return KErrNone if Sectors Per Cluster is correct
-*/	
-TInt CBaseTestFat32Base::CheckSecPerClus()
-	{
-	TInt64 diskSizeSec = iDiskSize / 512;
-	if (diskSizeSec <= 16777216)
-		{
-		if (iBPB_SecPerClus == 8)
-		return KErrNone;
-		else return -1;
-		}
-	else if (diskSizeSec <= 33554432)
-		{
-		if (iBPB_SecPerClus == 16)
-		return KErrNone;
-		else return -1;
-		}
-	else if (diskSizeSec <= 67108864)
-		{
-		if (iBPB_SecPerClus == 32)
-		return KErrNone;
-		else return -1;
-		}
-	else if (diskSizeSec <= 0xFFFFFFFF)
-		{
-		if (iBPB_SecPerClus == 64)
-		return KErrNone;
-		else return -1;
-		}
-	return KErrNone;
-	}
-
-
-/**
-Calculate the cluster count of the volume
-
-@return KErrNone Successful
-*/	
-TInt CBaseTestFat32Base::CalculateClusCount()
-	{
-	TInt r;
-	r = TheDisk.Open(iTheFs, CurrentDrive());
-	if (r != KErrNone)
-		{
-		_LIT(KErrorRead, "Cannot open the raw disk - r=%d");
-		INFO_PRINTF2(KErrorRead, r);
-		return r;
-		}
-
-	r = ReadField(4, 32,  &iBPB_TotSec32); 
-	if (r != KErrNone)
-		{
-		_LIT(KErrorRead, "Cannot get the field value BPB_TotSec32 - r=%d");
-		INFO_PRINTF2(KErrorRead, r);
-		return r;
-		}
-	r = ReadField(2, 14,  &iBPB_ResvdSecCnt);
-	if (r != KErrNone)
-		{
-		_LIT(KErrorReadField, "Cannot get the field value BPB_ResvdSecCnt - r=%d");
-		INFO_PRINTF2(KErrorReadField, r);
-		return r;
-		}
-	r = ReadField(1, 16,  &iBPB_NumFATs);
-	if (r != KErrNone)
-		{
-		_LIT(KErrorReadField, "Cannot get the field value BPB_NumFATs - r=%d");
-		INFO_PRINTF2(KErrorReadField, r);
-		return r;
-		}
-	r = ReadField(4, 36,  &iBPB_FATSz32);
-	if (r != KErrNone)
-		{
-		_LIT(KErrorReadField, "Cannot get the field value BPB_FATSz32 - r=%d");
-		INFO_PRINTF2(KErrorReadField, r);
-		return r;
-		}
-	r = ReadField(1, 13,  &iBPB_SecPerClus);
-	if (r != KErrNone)
-		{
-		_LIT(KErrorReadField, "Cannot get the field value BPB_SecPerClus - r=%d");
-		INFO_PRINTF2(KErrorReadField, r);
-		return r;
-		}
-	r = ReadField(2, 11,  &iBPB_BytsPerSec);    
-    if (r != KErrNone)
-        {
-		_LIT(KErrorReadField, "Cannot get the field value iBPB_BytsPerSec - r=%d");
-		INFO_PRINTF2(KErrorReadField, r);
-		return r;         
-        }
-	iClusterCount = (iBPB_TotSec32-(iBPB_ResvdSecCnt+(iBPB_NumFATs*iBPB_FATSz32)))/(iBPB_SecPerClus);
-	_LIT(KClusterCountValue, "The cluster count of the volume is %d");
-	INFO_PRINTF2(KClusterCountValue, iClusterCount);	
-	TheDisk.Close();
-	return KErrNone;	
-	}
-
-/** 
-Convert the field to the correct endien format
-
-@param aLen The length of the field being read
-@param aBuffer The original endien format of the field
-@param aField the correct endien format of the field
-
-@return KErrNone Successful
-*/	
-TInt CBaseTestFat32Base::Convert(TInt aLen, TUint8 *aBuffer, TUint32 *aField)
-	{
-	TInt i = aLen-1;
-	*aField = 0;
-	while(i >= 0)
-		{
-		*aField = *aField << 8;
-		*aField = *aField + aBuffer[i];
-		i--;
-		}
-	return KErrNone;
-	}
-
-/** 
-Read the entire field
-
-@param aLen The length of the field being read
-@param aOffSt The position at which to start reading
-@param aName The entire field to read
-
-@return KErrNone Successful
-*/		
-TInt CBaseTestFat32Base::ReadField(TInt aLen, TInt aOffSet, TUint32 *aName)
-	{
-	TInt r;
-	TUint8  aField[4];
-	TPtr8 bufPtr(&aField[0], aLen);
-	r=TheDisk.Read(aOffSet, bufPtr);
-	if (r != KErrNone)
-		{
-		_LIT(KErrorRead, "Cannot read the raw disk - r=%d");
-		INFO_PRINTF2(KErrorRead, r);
-		return r;
-		}
-	r = Convert(aLen, aField,aName); 
-	return r;
-	}
-
-
-/** 
-Get the number of bytes per sector
-
-@param aSecPerCluster The number of sectors per cluster
-
-@return The number of bytes per cluster
-*/		
-TInt64 getBytesPerCluster(TUint32 aSecPerClus)
-	{
-	TInt64 res = aSecPerClus * 512;
-	return res;
-	}
-
-/** 
-Convert the cluster number to byte offset on disk
-
-@param aCluster The cluster number 
-
-@return The offset in bytes
-*/
-TInt64 CBaseTestFat32Base::ClusterToByte(TInt aCluster)
-	{
-	TInt64 FirstDataSector = (iBPB_ResvdSecCnt + (iBPB_NumFATs * iBPB_FATSz32));
-	TInt64 pos;
-	pos = ((aCluster - 2) * iBPB_SecPerClus + FirstDataSector) * 512 ;
-	return pos;
-	}
-
-/** 
-Return number of bytes into the FAT
-
-@param aFatIndex The Fat index 
-
-@return The Fat position in bytes
-*/
-TInt CBaseTestFat32Base::PosInBytes(TInt aFatIndex)
-	{
-	TInt fatPosInBytes = -1;
-	if(IsFileSystemFAT32())
-		{
-		gDiskType = EFat32;
-		}	
-	switch (gDiskType)
-		{
-		case EFat32:
-			fatPosInBytes=aFatIndex<<2;
-			break;
-		case EFat16:
-			fatPosInBytes=aFatIndex<<1;
-			break;
-		case EFat12:
-			fatPosInBytes=(aFatIndex*3>>1);
-			break;
-		default:
-			break;
-		}
-	return(fatPosInBytes);
-	}
-	
-	
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32calculate.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,248 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32calculate.h"
-#include "sl_bpb1.h"
-
-static RRawDisk TheDisk;
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32Calculate::CBaseTestFat32Calculate() 
-	{
-	SetTestStepName(KTestStepCalculate);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32Calculate::~CBaseTestFat32Calculate() 
-	{
-	}
-
-
-/** 
-Get the calculation to be performed from the ini file and carry out that
-particular calculation
-1. 	If SetGreater is specified in the ini file then the function SetToGreater 
-	is called the set the cluster count to a value greater than it actually is
-2. 	If ComputeFatSize is specified in the ini file then the function 
-	ComputeFatSize is called to computer the size of each FAT
-3. 	If ClusterCount is specified in the ini file, then the function 
-	ClusterCount is called to return the clutser count of the volume
-
-@return EPass if test passes and EFail if test fails
-*/ 
-TVerdict CBaseTestFat32Calculate::doTestStepL()
-	{
-	SetTestStepResult(EFail);
-	_LIT(KCalculation,"Calculation");
-	TBufC<6> calculationType;
-	TPtrC16 calculation = calculationType;	
-	TBool alright = GetStringFromConfig(ConfigSection(), KCalculation, calculation);
-	if(alright)
-		{
-		if (calculation == _L("SetGreater"))
-			{
-			TInt r = SetToGreater(iClusterCount, 1000);
-			if (r != KErrNone)
-				{
-				_LIT(KFailClusterCount, "Failed to Set to a greater cluster count - r=%d");
-				INFO_PRINTF2(KFailClusterCount, r);
-				return TestStepResult();
-				}	
-			}
-		if (calculation == _L("ComputeFatSize"))
-			{
-			TInt r = ComputeFatSize();
-			if (r != KErrNone)
-				{
-				_LIT(KFailComputeFatSz, "Failed to compute FatSz - r=%d");
-				INFO_PRINTF2(KFailComputeFatSz, r);
-				return TestStepResult();
-				}	
-			}
-		if (calculation == _L("ClusterCount"))
-			{
-			TInt r = CheckClusterCount(iClusterCount);
-			if (r != KErrNone)
-				{
-				_LIT(KFailComputeClusCnt, "Failed to compute ClusterCount - r=%d");
-				INFO_PRINTF2(KFailComputeClusCnt, r);
-				return TestStepResult();
-				}	
-			}
-		if (calculation == _L("CheckFSInfo"))
-			{
-			TInt r = CheckFSInfo(0x3E8);
-			if (r != KErrNone)
-				{
-				_LIT(KFailCheckFSInfo, "Failed FSInfo check - r=%d");
-				INFO_PRINTF2(KFailCheckFSInfo, r);
-				return TestStepResult();
-				}	
-			}
-		}
-	else
-		{
-		_LIT(KIniFileError, "Failed to read calculation type from ini file");
-		INFO_PRINTF1(KIniFileError);
-		return TestStepResult();
-		}
-	
-	SetTestStepResult(EPass);
-	_LIT(KWritePass, "Calculation Pass");
-	INFO_PRINTF1(KWritePass);
-	return TestStepResult();
-	}
-
-/** 
-Set the cluster count to a value greater than it should be
-The bad cluster count is caluclated as 10000 added to the actual
-cluster count value. The bad cluster count is then written to the disk 
-in place of the actual cluster count. 
-
-@param aClusterCount The cluster count of the volume
-@param aPos The position at which to start writing to the raw disk
-
-@return KErrNone if successful
-*/	
-TInt CBaseTestFat32Calculate::SetToGreater(TUint32 aClusterCount, TInt aPos)
-	{
-	TUint32 badClusterCount;
-	badClusterCount = aClusterCount+10000;
-	TUint8 num[4];
-	TInt i;
-	TInt r;
-
-	r = TheDisk.Open(iTheFs, CurrentDrive());
-	for (i=0; i<4; i++)
-		{
-
-		num[i] = 0;
-		num[i] = num[i] + badClusterCount;
-		badClusterCount = badClusterCount >> 8;
-		}
-
-	TUint8 data[1];
-	TPtr8 buffer((TUint8*)&data[0],1);
-	
-	for (i=0; i<4; i++)
-		{
-		aPos = aPos + 1;
-		r=TheDisk.Read(aPos,buffer);
-		data[0]=num[i];
-		r=TheDisk.Write(aPos,buffer);
-		}
-	TheDisk.Close();
-	return r;
-	}
-
-/** 
-Calculate the size of each FAT and verify that it is equal the 
-value in BPB_FATSz32. The 'BPB_..' values are read directly from the disk
-and the calculation is taken from the Microsoft FAT32 speification document
-
-@return KErrNone if successful
-*/		
-TInt CBaseTestFat32Calculate::ComputeFatSize()
-	{		
-	TInt TmpVal1 = (iDriveSize/512) - iBPB_ResvdSecCnt;
-	TInt TmpVal2 = (256 * iBPB_SecPerClus) + iBPB_NumFATs;
-	TmpVal2 = TmpVal2 / 2;
-	TInt FatSz32 = (TmpVal1 + (TmpVal2 - 1)) / TmpVal2;
-	INFO_PRINTF2(_L("FatSz32 = %d"), FatSz32);
-	if (iBPB_FATSz32 == (TUint32)FatSz32) 
-		{
-		_LIT(KFatSzPass, "BPB_FATSz32 = %d is equal to calculated value = %d");
-		INFO_PRINTF3(KFatSzPass,iBPB_FATSz32, FatSz32 );
-		return KErrNone;
-		}
-	else
-		{
-		_LIT(KFatSzFail, "BPB_FATSz32 = %d is not equal to the calculated value = %d");
-		INFO_PRINTF3(KFatSzFail, iBPB_FATSz32,FatSz32);
-		return -1;
-		}
-	}
-
-/** 
-Verify that the cluster count is greater than 65525. 
-If the volume is FAT32 then it should have a cluster count greater than
-65525. Otherwise the volume should be FAT16. 
-
-@param aClusterCount The cluster count of the volume
-
-@return KErrNone if successful
-*/			
-TInt CBaseTestFat32Calculate::CheckClusterCount(TUint32 aClusterCount)
-	{
-	if (aClusterCount > 65525)
-		{
-		_LIT(KClusCntPass, "Cluster count is greater than 65525");
-		INFO_PRINTF1(KClusCntPass);
-		return KErrNone;
-		}
-	else
-		{
-		_LIT(KClusCntFail, "Cluster count is not greater than 65525");
-		INFO_PRINTF1(KClusCntFail);
-		return -1;
-		}
-	}
-/** 
-Read the FSInfo sector at the FSI_Free_Count field. 
-Following this check that the last known cluster count is less than 
-the actual cluster count of the volume. 
-
-Note: This function should be called after files have been written 
-to the disk to ensure that clusters have been occupied
-
-@param aPos The position at which to start reading from the raw disk
-
-@return KErrNone if successful
-*/	
-TInt CBaseTestFat32Calculate::CheckFSInfo(TInt aPos)
-	{
-	TUint32 fsInfo;
-
-	TUint32 data;
-	TPtr8 buffer((TUint8*)&data,4);
-	
-	TInt r = TheDisk.Open(iTheFs, CurrentDrive());
-	r = TheDisk.Read(aPos,buffer);
-	
-	fsInfo = data; 
-	
-	TheDisk.Close();
-	
-	if (fsInfo < iClusterCount)
-		{
-		_LIT(KFSInfoPass, "FSInfo Correct, iClusterCount = %08x fsInfo = %08x fsInfo = %08x");
-		INFO_PRINTF4(KFSInfoPass, iClusterCount, data, fsInfo);
-		return KErrNone;
-		}
-	else
-		{
-		_LIT(KFSInfoFail, "FSInfo incorrect, iClusterCount = %08x fsInfo = %08x");
-		INFO_PRINTF3(KFSInfoFail, iClusterCount, fsInfo);
-		return -1;
-		}
-	}
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32checkdisk.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32checkdisk.h"
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32CheckDisk::CBaseTestFat32CheckDisk()
-	{
-	SetTestStepName(KTestStepCheckDisk);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32CheckDisk::~CBaseTestFat32CheckDisk() 
-	{
-	}
-
-
-/** 
-The function performs the following actions
-1. Verify the integrity of the disk by calling RFs::ScanDisk() 
-2. Check whether the code returned match the code specified in the ini file. 
-3. If scan dsik is specified in the ini file then call RFs::ScanDrive()
-
-@return EPass if test passes and EFail if test fails
-*/ 
-TVerdict CBaseTestFat32CheckDisk::doTestStepL()
-	{
-	SetTestStepResult(EFail);
-	TInt r; 
-	_LIT(KCheckCode,"CheckCode");
-	TInt checkcode;
-	_LIT(KScan,"Scan");
-	TInt scan;
-	_LIT(KPassRegardless,"PassRegardless");
-	TBuf<4> passRegardless;
-	TPtrC16 passregardless = passRegardless;
-	TBool alright = GetIntFromConfig(ConfigSection(), KCheckCode, checkcode);
-	if(alright)
-		{
-		TBool alright2 = GetStringFromConfig(ConfigSection(), KPassRegardless, passregardless);
-		if(alright2)
-			{
-			// Perform a check disk. 
-			r=iTheFs.CheckDisk(iSessionPath);
-			if (r!=checkcode)
-				{
-				// If the code returned does not match the code expected and would
-				// like only a warning to be displayed as opposed to failing the 
-				// test
-				if (passregardless == _L("Y"))
-					{
-					SetTestStepResult(EPass);
-					_LIT(KErrorPass, "RFs::CheckDisk() returns %d & does not match expected value %d");
-					INFO_PRINTF3(KErrorPass, r, checkcode);		
-					}
-				// If the code returned does not match the code expected and would
-				// like to fail the test
-				else
-					{
-					SetTestStepResult(EFail);
-					_LIT(KCheckDiskFail, "RFs::CheckDisk() returns %d & does not match expected value %d");
-					INFO_PRINTF3(KCheckDiskFail, r, checkcode);
-					}
-				}
-			else 
-				{
-				SetTestStepResult(EPass);
-				_LIT(KCheckDiskPass, "RFs::CheckDisk() returns %d & matches expected value %d");
-				INFO_PRINTF3(KCheckDiskPass, r, checkcode);	
-				}
-			// If specified in the ini file, perform a ScanDrive on the volume
-			TBool alright = GetIntFromConfig(ConfigSection(), KScan, scan);
-			if(alright)
-				{
-				r=iTheFs.ScanDrive(iSessionPath);
-				if (r!=KErrNone)
-					{
-					SetTestStepResult(EFail);
-					_LIT(KScanFail, "RFs::ScanDrive() failed returns %d");
-					INFO_PRINTF2(KScanFail, r);		
-					}
-				else
-					{
-					SetTestStepResult(EPass);
-					_LIT(KScanPass, "RFs::ScanDrive() passed");
-					INFO_PRINTF1(KScanPass);
-					}
-				}
-			else
-				{
-				_LIT(KNoScan, "RFs::ScanDrive() not indicated in ini file");
-				INFO_PRINTF1(KNoScan);	
-				}
-			return TestStepResult();	
-			}
-			
-		else
-			{
-			_LIT(KReadIniFail, "Could not read PassRegardless from ini file");
-			INFO_PRINTF1(KReadIniFail);
-			return TestStepResult();
-			}
-		}
-	else
-		{
-		_LIT(KReadIniFail, "Could not read CheckCode from ini file");
-		INFO_PRINTF1(KReadIniFail);
-		return TestStepResult();
-		}
-	}
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32clusterbound.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include "t_fat32clusterbound.h"
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32ClusterBound::CBaseTestFat32ClusterBound()
-	{
-	SetTestStepName(KTestStepClusterBound);
-	}
-	
-/**
-Class Destructor
-*/	
-CBaseTestFat32ClusterBound::~CBaseTestFat32ClusterBound() 
-	{
-	}
-
-
-/** 
-This test should be performed once the disk has been filled to its max capacity. 
-Obtains the cluster bounds action from the configuration file and calls the function 
-that is required to be carried out
- 
-@return EPass if test passes and EFail if test fails
-*/ 		    
-TVerdict CBaseTestFat32ClusterBound::doTestStepL()
-	{
-	SetTestStepResult(EFail);
-	TInt r;
-	TBufC<20> clusterAction;
-	TPtrC16 clusteraction = clusterAction;
-	_LIT(KClusterAction,"ClusterAction");
-	TBool alright = GetStringFromConfig(ConfigSection(), KClusterAction, clusteraction);
-	if (alright)		
-		{			
-		if (clusteraction == _L("WriteToFile"))
-			{
-			r = TestClusterBoundsWriteFile();
-			if (r != KErrNone)
-				{
-				INFO_PRINTF1(_L("ClusterAction:WriteToFile failed"));
-				SetTestStepResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF1(_L("ClusterAction:WriteToFile passed"));
-				SetTestStepResult(EPass);
-				}
-			}
-		if (clusteraction == _L("CreateFiles"))
-			{
-			r = TestClusterBoundsCreateFiles();
-			if (r != KErrNone)
-				{
-				INFO_PRINTF1(_L("ClusterAction:CreateFiles failed"));
-				SetTestStepResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF1(_L("ClusterAction:CreateFiles passed"));
-				SetTestStepResult(EPass);
-				}
-			}
-		}
-	else 
-		{
-		INFO_PRINTF1(_L("No ClusterAction specified in ini file"));
-		SetTestStepResult(EFail);
-		}						
-	return TestStepResult();
-	}
-
-/** 
-Attepts to access out of bounds clusters by creating another file and 
-attempting to write to it.
-
-@return KErrNone if successfull, otherwise one of the other system-wide 
-error codes.
-*/
-TInt CBaseTestFat32ClusterBound::TestClusterBoundsWriteFile()
-{
-	TInt r;
-	TVolumeInfo iInfo;
-	
-	TInt freeSpace;
-	RFile rFile;
-	
-	r = iTheFs.Volume(iInfo, CurrentDrive());
-	if(r != KErrNone)
-		{
-		INFO_PRINTF2(_L("Unable to obtain the volume information, error = %d"), r);
-		return r;
-		}
-	freeSpace = iInfo.iFree;
-	TBuf8<100> buffer3(freeSpace + 1); 
-	r = rFile.Replace(iTheFs, _L("TESTClusterBound.txt"), EFileWrite);
-	if(r != KErrNone)
-		{
-		INFO_PRINTF2(_L("Unable to create the file, error = %d"), r);
-		return r;
-		}				
-	r = rFile.Write(buffer3,freeSpace + 1);
-	if (r == KErrDiskFull)
-		{
-		INFO_PRINTF1(_L("Disk is Full - Attempting to access out of bounds clusters returns the correct error value"));
-		rFile.Close();
-		return KErrNone;
-		}
-	else 
-		{
-		INFO_PRINTF2(_L("Attempting to access out of bounds clusters returns the incorrect error value %d"), r);
-		rFile.Close();
-		return r;
-		}
-
-}
-
-/** 
-Attepts to access out of bounds clusters by creating empty files to fill
-the root directory and following this, attempting to create another empty file 
-
-@return KErrNone if successfull, otherwise one of the other system-wide 
-error codes.
-*/
-TInt CBaseTestFat32ClusterBound::TestClusterBoundsCreateFiles()
-	{
-	RFile rFile;
-	_LIT(KFileName, "File%d.txt");
-	
-	TInt sizeOfShortDir = 16 * 4; //Short dir is 64 bytes long
-	TInt bytesPerSector = iBPB_BytsPerSec;
-	TInt sizeOfCluster = iBPB_SecPerClus * bytesPerSector;
-	TInt filesToCreate = sizeOfCluster / sizeOfShortDir;
-	filesToCreate = filesToCreate - 1;
-	
-	TInt r;
-	TInt i;
-	for (i = 0; i < filesToCreate; i++)
-		{
-		TBuf<20> fileName;
-		TInt fileNumber = i + 1;
-		fileName.Format(KFileName, fileNumber);
-		r= rFile.Replace(iTheFs,fileName , EFileWrite);
-		if (r == KErrDiskFull)
-		break;
-		rFile.Close(); 
-		}
-	
-
-	r = rFile.Replace(iTheFs, _L("TFile.txt") , EFileWrite);
-	if (r == KErrDiskFull)
-		{
-		INFO_PRINTF1(_L("Attempting to access out of bounds clusters returns the correct error value"));
-		return KErrNone;
-		}
-	else 
-		{
-		INFO_PRINTF2(_L("Attempting to access out of bounds clusters returns the incorrect error value %d"), r);
-		return r;
-		}
-	}
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32filldisk.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include <e32def.h> 
-#include "t_fat32filldisk.h"
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32FillDisk::CBaseTestFat32FillDisk()
-	{
-	SetTestStepName(KTestStepFillDisk);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32FillDisk::~CBaseTestFat32FillDisk() 
-	{
-	}
-
-/**
-Thread that sends a signal along the serial port so that it is not assumed 
-that the board has hung.
-*/
-TInt Thread1Func(TAny* /*aPtr*/)
-	{
-	for(;;)
-		{
-		RDebug::Printf("Filling the disk...");
-		User::After(600000000);
-		}
-	}
-	
-/** 
-Filling the disk to its maximum capacity by writing 1 file.
-If the disk is greater than 2GB in size, 2 files are created.  
-
-@return EPass if test passes and EFail if test fails
-*/ 		    
-TVerdict CBaseTestFat32FillDisk::doTestStepL()
-	{
-	SetTestStepResult(EFail);
-	TVolumeInfo iInfo;
-	RFile rFile;
-	TInt filesize = 0;
-	RFile rFile2;
-	TInt filesize2 = 0;	
-	RFile rFile3;
-	TInt filesize3 = 0;	
-	TInt  r = KErrNone;
-	r = iTheFs.Volume(iInfo, CurrentDrive());
-	if (r != KErrNone)
-	INFO_PRINTF2(_L("volume info for %C:"), (TUint)iDriveToTest);
-	_LIT(KFileReplace, "RFile::Replace, epecting KErrNone");
-	r = rFile.Replace(iTheFs, _L("\\TEST.txt"), EFileWrite);				
-	FAT_TEST_VAL(r==KErrNone, KFileReplace, r);
-	
-	TBuf<20> threadName1 =_L("Thread1");
-	RThread thread1;
-	r = thread1.Create(threadName1,Thread1Func,KDefaultStackSize,0x1000,0x1000,NULL);
-	if (r != KErrNone)
-		{
-		INFO_PRINTF2(_L("Could not create thread1 - r=%d"),r);
-		}
-	thread1.Resume();
-	
-	TInt64 count = 0;
-	TBuf8<4096> buffer(4096); 
-	r = KErrNone;
-	while ((count < iInfo.iSize) && (r == KErrNone))
-		{
-		r=rFile.Write(buffer,4096);
-		count = count + 4096;
-		} ;
-	rFile.Size(filesize);
-	INFO_PRINTF2(_L("after filling r = %d"),r);
-	if (r == KErrTooBig)
-		{
-		r = rFile2.Replace(iTheFs, _L("\\TEST2.txt"), EFileWrite);				
-		FAT_TEST_VAL(r == KErrNone, KFileReplace, r);
-		TInt64 count2 = 0;
-		TBuf8<4096> buffer2(4096); 
-		r = KErrNone;
-		while ((count2 < (iInfo.iSize - filesize)) && (r == KErrNone))
-			{
-			r=rFile2.Write(buffer2,4096);
-			count2 = count2 + 4096;
-			} ;
-		rFile2.Size(filesize2);
-		}
-
-	if (r == KErrDiskFull)
-		{
-		INFO_PRINTF2(_L("Disk full on %c:\n"), (TUint)iDriveToTest);
-		SetTestStepResult(EPass);
-		}
-
-	if(r != KErrNone && r != KErrDiskFull && r != KErrTooBig)
-		{
-		INFO_PRINTF4(_L("Write Failed:%d FileSize:%d DiskFreeSize:%d"), r, filesize,I64INT(iInfo.iFree));
-		SetTestStepResult(EFail);
-		thread1.Kill(r);
-		thread1.Close();
-		return 	TestStepResult();
-		}
-	if (r == KErrNone && r != KErrDiskFull)
-		{
-		r = rFile3.Replace(iTheFs, _L("\\TEST3.txt"), EFileWrite);	
-		r = iTheFs.Volume(iInfo, CurrentDrive());
-		TInt extra = iInfo.iFree;
-		INFO_PRINTF2(_L("extra = %d:\n"), extra);
-		rFile3.SetSize(extra);
-		rFile3.Size(filesize3);
-		}
-	
-	r = iTheFs.Volume(iInfo, CurrentDrive());
-	if (iInfo.iSize - iInfo.iFree == iInfo.iSize)
-		{
-		SetTestStepResult(EPass);
-		}
-	rFile.Close();	
-	rFile2.Close();
-	rFile3.Close();
-	TInt64 totalFileSize = filesize + filesize2 + filesize3;	
-
-	r = iTheFs.Volume(iInfo, CurrentDrive());
-	INFO_PRINTF2(_L("File size1 = %d"),filesize);
-	INFO_PRINTF2(_L("File size2 = %d"),filesize2);
-	INFO_PRINTF2(_L("File size3 = %d"),filesize3);
-	INFO_PRINTF2(_L("Total File size = %Ld"),totalFileSize);
-	INFO_PRINTF4(_L("Free space on %c: %Ld KB (out of %Ld KB)\n"),
-				(TUint)iDriveToTest,((iInfo.iFree) / 1024),((iInfo.iSize) / 1024));
-	
-	thread1.Kill(r);
-	thread1.Close();
-	return TestStepResult();
-
-	}
-
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32format.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32format.h"
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32Format::CBaseTestFat32Format() 
-	{
-	SetTestStepName(KTestStepFormat);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32Format::~CBaseTestFat32Format() 
-	{
-	}
-
-
-/** 
-Get the type of format required from the ini file and format the disk
-
-@return EPass if test passes and EFail if test fails
-*/ 
-
-TVerdict CBaseTestFat32Format::doTestStepL()
-	{
-	_LIT(KFormatType,"FormatType");
-	TBuf<4> formatType;
-	TPtrC16 format = formatType;
-	SetTestStepResult(EFail);
-	TDriveUnit drive (CurrentDrive());
-	TBool alright = GetStringFromConfig(ConfigSection(), KFormatType, format);
-	if(alright)
-		{
-		TInt r = FormatFat(drive, format);
-		if (r != KErrNone)
-			{
-			_LIT(KFormatError, "Error %d - could not format %c drive");
-			INFO_PRINTF3(KFormatError, r, (TUint)iDriveToTest);
-			SetTestStepResult(EFail);
-			return TestStepResult();
-			}
-		}
-	else
-		{
-		_LIT(KErrorRead, "Cannot get the format type from the ini file");
-		INFO_PRINTF1(KErrorRead);
-		SetTestStepResult(EFail);
-		return TestStepResult();
-		}
-	SetTestStepResult(EPass);
-	return TestStepResult();
-	}
-
-
-/** 
-Format the disk
-
-@param aDrive The drive to format
-@param aFormat The type of format to perform
-
-@return EPass if test passes and EFail if test fails
-*/ 
-TInt CBaseTestFat32Format::FormatFat(TDriveUnit aDrive, TPtrC16 aFormat)
-	{
-	TInt count;
-	RFormat format;
-	TInt r;
-	TFormatMode formatMode = EFullFormat;
-	if (aFormat == _L("Full"))
-		{
-		formatMode = EFullFormat;
-		}
-	else if (aFormat == _L("Special"))
-		{
-		formatMode = ESpecialFormat;
-		}
-	else if (aFormat == _L("Quick"))
-		{
-		formatMode = EQuickFormat;
-		}
-		
-	r = format.Open(iTheFs,aDrive.Name(),formatMode,count);
-	if(r!=KErrNone)
-		{
-		_LIT(KFormatOpen, "Device could not be opened for formatting");
-		INFO_PRINTF1(KFormatOpen);
-		return r;
-		}
-	INFO_PRINTF2(_L("Count = %d"), count);
-	do	{
-		r = format.Next(count);
-		if (r != KErrNone)
-			{
-			_LIT(KFormatNextError, "format.Next() error %d count %d\n");
-			INFO_PRINTF3(KFormatNextError, r, count);
-			return r;
-			}
-		}while (count > 0);
-	format.Close();
-	INFO_PRINTF2(_L("Count = %d"), count);
-	return r; 
-	}
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32larger512.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
- 
-#include "t_fat32larger512.h"
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32Larger512::CBaseTestFat32Larger512()
-	{
-	SetTestStepName(KTestStepLarger512);
-	}
-	
-/**
-Class Destructor
-*/	
-CBaseTestFat32Larger512::~CBaseTestFat32Larger512() 
-	{
-	}
-
-
-/**
-Checks that if the disk size is greater or equal to 512MB, the file system is 
-FAT32, else the file system is FAT. 
-
-
-@return EPass if test passes and EFail if test fails
-*/		    			    
-TVerdict CBaseTestFat32Larger512::doTestStepL()
-	{
-	SetTestStepResult(EPass);
-	
-	if (iDiskSize >= (512*1024*1024))
-		{
-		if (IsFileSystemFAT32())
-			{
-			_LIT(KLargCorrect, "Disk size is greater or equal to 512MB and the filesystem is FAT32");
-			INFO_PRINTF1(KLargCorrect);
-			SetTestStepResult(EPass);
-			}
-		else
-			{
-			_LIT(KLargErr, "Disk size is greater or equal to 512MB and the filesystem is not FAT32");
-			INFO_PRINTF1(KLargErr);
-			SetTestStepResult(EFail);
-			}
-		}
-	if (iDiskSize < (512*1024*1024))
-		{
-		if (IsFileSystemFAT(iTheFs ,CurrentDrive()))
-			{
-			_LIT(KLargCorrect, "Disk size is less 512MB and the filesystem is FAT");
-			INFO_PRINTF1(KLargCorrect);
-			SetTestStepResult(EPass);
-			}
-		else
-			{
-			_LIT(KLargErr, "Disk size less than 512MB and the filesystem is not FAT");
-			INFO_PRINTF1(KLargErr);
-			SetTestStepResult(EFail);
-			}
-		}
-	return TestStepResult();		
-	}
-
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32mount.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32mount.h"
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32Mount::CBaseTestFat32Mount() 
-	{
-	SetTestStepName(KTestStepMount);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32Mount::~CBaseTestFat32Mount() 
-	{
-	}
-
-/** 
-Mounting the file system
-From the ini file obtain whether the mount should pass or fail
-
-@return EPass if test passes and EFail if test fails
-*/ 
-TVerdict CBaseTestFat32Mount::doTestStepL()
-	{
-	SetTestStepResult(EFail);
-	TDriveUnit drive (CurrentDrive());
-	TInt r;
-	TInt res;
-	_LIT(KMountPass, "Pass");
-	_LIT(KMountFail, "Fail");
-	_LIT(KCorrectVerdict,"CorrectVerdict");
-	TBuf<4> correctVerdict;
-	TPtrC16 correct = correctVerdict;
-	TBuf<4> actualVerdict;
-	TPtrC16 actual = actualVerdict;
-
-	if(IsFileSystemFAT32())
-		{
-		TFullName oldFs;
-		res = iTheFs.FileSystemName(oldFs,CurrentDrive());
-		res = iTheFs.DismountFileSystem(oldFs,CurrentDrive());
-		if (res != KErrNone)
-			{
-			_LIT(KDismountError, "Error %d - could not could not dismount filesystem from drive %d");
-			INFO_PRINTF3(KDismountError, res, CurrentDrive());
-			}
-		_LIT(KFsNameFat32, "Fat");
-		r = iTheFs.AddFileSystem(KFsNameFat32);
-		
-		TBool alright = GetStringFromConfig(ConfigSection(), KCorrectVerdict, correct);
-		if(alright)
-			{
-			r = iTheFs.MountFileSystem(KFsNameFat32, CurrentDrive());
-			if (r != KErrNone)
-				{
-				actualVerdict = KMountFail;
-				}
-			else 
-				{
-				actualVerdict = KMountPass;
-				}
-			if (actualVerdict == correct)
-				{
-				SetTestStepResult(EPass);
-				return TestStepResult();
-				}
-			else
-				{
-				SetTestStepResult(EFail);
-				return TestStepResult();
-				}
-			}
-		}
-	else
-		{
-			_LIT(KFsNameFat, "Fat");
-		res = iTheFs.DismountFileSystem(KFsNameFat,CurrentDrive());
-		if (res !=KErrNone)
-			{
-			_LIT(KDismountError, "Error %d - could not could not dismount filesystem from drive %d");
-			INFO_PRINTF3(KDismountError, res, CurrentDrive());
-			}
-		r = iTheFs.MountFileSystem(KFsNameFat, CurrentDrive());
-		}
-	if (r != KErrNone)
-		{
-		_LIT(KMountError, "Error %d - could not mount filesystem on drive %d");
-		INFO_PRINTF3(KMountError, r, CurrentDrive());
-		SetTestStepResult(EFail);
-		return TestStepResult();
-		}
-
-	SetTestStepResult(EPass);
-	return TestStepResult();
-	}
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32readfile.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32readfile.h"
-
-
-static RFile TheFile;
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32ReadFile::CBaseTestFat32ReadFile() 
-	{
-	SetTestStepName(KTestStepReadFile);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32ReadFile::~CBaseTestFat32ReadFile() 
-	{
-	}
-
-/** 
-The function performs the following actions:
-1. Get the file name and path from the ini file. 
-	-> If no file name is specified he create a file 
-	-> If no path is specified, use the session path. 
-2. Get the action that is required from the ini file
-3. Call the function that carries out that particular action
-
-@return EPass if test passes and EFail if test fails
-*/ 
-TVerdict CBaseTestFat32ReadFile::doTestStepL()
-	{
-	SetTestStepResult(EFail);
-	TInt r = KErrNone;
-	_LIT(KFileName,"FileName");
-	_LIT(KCreatedFileName,"ReadTestFile.txt");
-	TBufC<255> fileName;
-	TPtrC16 filename = fileName;
-	_LIT(KPath,"Path");
-	TBufC<255> pathName;
-	TPtrC16 path = pathName;
-	_LIT(KReadAction,"ReadAction");
-	TBufC<255> readAction;
-	TPtrC16 readaction = readAction;
-	TBuf<255> fullPath;
-	TBool alright = GetStringFromConfig(ConfigSection(), KFileName, filename);
-	if(alright)
-		{
-		TBool alright2 = GetStringFromConfig(ConfigSection(), KPath, path);
-		if(alright2)
-			{
-			fullPath.Append(path);
-			}
-		else
-			{
-			fullPath.Append(iSessionPath);
-			}
-		fullPath.Append(filename);
-	
-		TBool alright3 = GetStringFromConfig(ConfigSection(), KReadAction, readaction);
-		if(alright3)
-			{
-			if (readaction == _L("OpenFile"))
-				{
-				r = OpenFile(fullPath);
-				}
-			if (readaction == _L("ReadFile"))
-				{
-				r = ReadFile(fullPath);
-				}
-			if (readaction == _L("GetModTime"))
-				{
-				INFO_PRINTF1(_L("Calling the function GetModTime"));
-				r = GetModTime(fullPath);
-				INFO_PRINTF2(_L("Finished the function GetModTime - r=%d"),r);
-				}
-			if (readaction == _L("GetModDate"))
-				{
-				INFO_PRINTF1(_L("Calling the function GetModDate"));
-				r = GetModDate(fullPath);
-				INFO_PRINTF2(_L("Finished the function GetModDate - r=%d"),r);
-				}
-		
-			if(r != KErrNone)
-				{
-				_LIT(KErrorReadFile, "Error with read action");
-				INFO_PRINTF1(KErrorReadFile);
-				SetTestStepResult(EFail);
-				return TestStepResult();
-				}
-			else
-				{
-				SetTestStepResult(EPass);
-				_LIT(KReadPass, "Read Action Passed");
-				INFO_PRINTF1(KReadPass);
-				return TestStepResult();
-				}
-			}
-		}
-	else
-		{
-		TInt r = TheFile.Replace(iTheFs,KCreatedFileName,EFileRead|EFileWrite);
-		if (r != KErrNone)
-			{
-			_LIT(KErrorCreateNewFile, "Cannot creat new file - Error code = %d");
-			INFO_PRINTF2(KErrorCreateNewFile,r);
-			SetTestStepResult(EFail);
-			return TestStepResult();	
-			}
-		else
-			{
-			TInt r = ReadFile(KCreatedFileName);
-			if(r != KErrNone)
-				{
-				_LIT(KErrorReadFile, "Error reading the file, Error Code = %d");
-				INFO_PRINTF2(KErrorReadFile, r);
-				SetTestStepResult(EFail);
-				return TestStepResult();
-				}
-			else
-				{
-				SetTestStepResult(EPass);
-				_LIT(KReadPass, "Read Passed");
-				INFO_PRINTF1(KReadPass);
-				return TestStepResult();
-				}
-			}
-		}
-	return TestStepResult();
-	}
-
-
-/** 
-Read the file
-
-@param aFile The name of the file to read 
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32ReadFile::ReadFile(const TDesC16& aFile)
-	{
-	TBuf8<255> temp;
-	temp.Copy(aFile);
-	TInt r = KErrNone; 
-//	_LIT(KReadCheckCode,"ReadCheckCode");
-//	TInt readcheckcode;
-	r = TheFile.Open(iTheFs, aFile, EFileRead);
-	r = TheFile.Read(temp);
-	return r;
-	}
-
-/** 
-Open a file and check whether the error code returned is equal to that
-stated in the ini file
-
-@param aFile The name of the file to read 
-
-@return KErrNone if successfull
-*/	
-TInt CBaseTestFat32ReadFile::OpenFile(const TDesC16& aFile)
-	{
-	TBuf8<255> temp;
-	temp.Copy(aFile);
-	_LIT(KReadCheckCode,"ReadCheckCode");
-	TInt readcheckcode;
-	TInt res = TheFile.Open(iTheFs, aFile, EFileRead);
-	TBool alright = GetIntFromConfig(ConfigSection(), KReadCheckCode, readcheckcode);
-	if(alright)
-		{
-		if (res == readcheckcode)
-			{
-			_LIT(KReadPass, "Check code for open file is correct res = %d");
-			INFO_PRINTF2(KReadPass, res);
-			return KErrNone;
-			}
-		else
-			{
-			_LIT(KReadFail, "Check code for open file is incorrect correct res = %d, correct return = %d");
-			INFO_PRINTF3(KReadFail, res, readcheckcode);
-			return KErrNone;
-			}
-			
-		}
-	else 
-		{
-		_LIT(KNoIni, "Unable to get ReadCheckCode from ini file");
-		INFO_PRINTF1(KNoIni);
-		return -1;
-		}
-
-	}
-
-/** 
-Check what error the RFs::Modified fuction should return from the ini file 
-and call RFs::Modified()
-
-@param aFile The name of the file to read 
-
-@return KErrNone if successfull
-*/	
-TInt CBaseTestFat32ReadFile::GetModDate(const TDesC16& aFile)
-	{
-	TInt r = KErrNone;
-	TTime modifiedTime;
-	TBufC<9> checkDate;
-	TPtrC16 actualDate = checkDate;
-	_LIT(KCheckDate,"Date");
-	TBuf <255> date;
-	TBool alright = GetStringFromConfig(ConfigSection(), KCheckDate, actualDate);
-	if(alright)
-		{
-		INFO_PRINTF1(_L("Calling the function RFs::Modified within GetModTime"));
-		r = iTheFs.Modified(aFile, modifiedTime);
-		modifiedTime.FormatL(date, _L("%D%M%Y%1 %2 %3"));
-		INFO_PRINTF2(_L("Returned from RFs::Modified within the function GetModTime - r=%d"), r);
-		TPtrC16 readdate = date;
-		if (readdate == actualDate)
-			{
-			INFO_PRINTF1(_L("RFs::Modified returns the correct value "));
-			return KErrNone;
-			}
-		else 
-			{
-			INFO_PRINTF2(_L("RFs::Modified returns the incorrect value %S"), &date);
-			return -1;
-			}
-		}
-	return r;
-	}
-
-/** 
-Check what error the RFs::Modified fuction should return from the ini file 
-and call RFs::Modified()
-
-@param aFile The name of the file to read 
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32ReadFile::GetModTime(const TDesC16& aFile)
-	{
-	TInt r = KErrNone;
-	TTime modifiedTime;
-	TBufC<9> checkTime;
-	TPtrC16 actualTime = checkTime;
-	_LIT(KCheckTime,"Time");
-	TBuf <255> time;
-	TBool alright = GetStringFromConfig(ConfigSection(), KCheckTime, actualTime);
-	if(alright)
-		{
-		INFO_PRINTF1(_L("Calling the function RFs::Modified within GetModTime"));
-		r = iTheFs.Modified(aFile, modifiedTime);
-		modifiedTime.FormatL(time, _L("%H%T%S"));
-		INFO_PRINTF2(_L("Returned from RFs::Modified within the function GetModTime - r=%d"), r);
-		TPtrC16 readtime = time;
-		if (readtime == actualTime)
-			{
-			INFO_PRINTF1(_L("RFs::Modified returns the correct value "));
-			return KErrNone;
-			}
-		else 
-			{
-			INFO_PRINTF2(_L("RFs::Modified returns the incorrect value %S"), &time);
-			return -1;
-			}
-		}
-		return r;
-	}
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32readraw.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,412 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include "t_fat32readraw.h"
-
-static RRawDisk TheDisk;
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32ReadRaw::CBaseTestFat32ReadRaw() 
-	{
-	SetTestStepName(KTestStepReadRaw);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32ReadRaw::~CBaseTestFat32ReadRaw() 
-	{
-	}
-
-
-/** 
-This function performs the following actions:
-1. Gets the position to read on the raw disk from the ini file
-	-> if a cluster is specified then get the position from GetCluster(). 
-2. Get the number of bytes to read starting from the obtained position 
-3. Read the disk byte by byte and place into an array. 
-	-> If a mask is specified then compare the mask with the read value. 
-	-> If the correct results are specified in the ini file then compare 
-	   the array contain the read values with the array containing the 
-	   correct results.
-
-@return EPass if test passes and EFail if test fails
-*/ 
-TVerdict CBaseTestFat32ReadRaw::doTestStepL()
-	{
-	SetTestStepResult(EFail);
-
-	TInt ascivalue[20];
-	TInt correctresults[20];
-	TInt r; 
-	
-	_LIT(KPosition,"ReadPosition");
-	TInt position; 
-	TBool alright = GetHexFromConfig(ConfigSection(), KPosition, position);
-	if(alright)
-		{
-		if (iMedia == 1 && position >= 16384)
-			{
-			INFO_PRINTF2(_L("Position = %d"), position);
-			INFO_PRINTF2(_L("iBPB_ResvdSecCnt = %d"), iBPB_ResvdSecCnt);
-			position = (iBPB_ResvdSecCnt * 512) + (position - 0x4000);
-			INFO_PRINTF2(_L("New Position = %d"), position);
-			}
-		_LIT(KCluster,"ClusterNumber");
-		TInt64 clusterPosition;
-		TInt cluster; 
-		TBool alright2 = GetIntFromConfig(ConfigSection(), KCluster, cluster);
-		if (alright2)
-			{
-			r = GetCluster(cluster, clusterPosition);
-			if (r != KErrNone)
-				{
-				SetTestStepResult(EFail);
-				INFO_PRINTF1(_L("Could not get disk position"));
-				return TestStepResult();
-				}
-			else
-				{
-				position = clusterPosition;
-				} 
-			}
-			
-		_LIT(KFATEntryReadPosition,"FATEntryReadPosition");
-        _LIT(KFATEntry0,"FATEntry0");
-		_LIT(KFATEntry1,"FATEntry1");
-		_LIT(KFATEntry3,"FATEntry3");
-		_LIT(KFATEntry4,"FATEntry4");
-        TPtrC fat_entry_str;
-        if(GetStringFromConfig(ConfigSection(), KFATEntryReadPosition, fat_entry_str))
-        {
-            if(!fat_entry_str.Compare(KFATEntry0))
-            {
-                position = iBPB_ResvdSecCnt * iBPB_BytsPerSec;
-            }
-            else if(!fat_entry_str.Compare(KFATEntry1))
-            {
-                position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4;
-            }
-            else if(!fat_entry_str.Compare(KFATEntry3))
-            {
-                position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*3;
-            }
-            else if(!fat_entry_str.Compare(KFATEntry4))
-            {
-                position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*4;
-            }           
-        }
-		_LIT(KReadPosition, "The position on the disk being read is %d");
-		INFO_PRINTF2(KReadPosition,position);
-
-		_LIT(KNumOfBytes,"NumberOfBytes");
-		TInt numbyte;
-		TBool alright3 = GetHexFromConfig(ConfigSection(), KNumOfBytes, numbyte);
-		if (alright3)
-			{
-			r = ReadRaw(position, numbyte, ascivalue);
-			if(r != KErrNone)
-				{
-				_LIT(KErrorRead, "Cannot read the raw disk at position %d and length %d - error = %d");
-				INFO_PRINTF4(KErrorRead,position, numbyte, r);
-				SetTestStepResult(EFail);
-				return TestStepResult();
-				}
-			_LIT(KMask,"Mask");
-			TInt mask;
-			TBool alright4 = GetHexFromConfig(ConfigSection(), KMask, mask);
-			if (alright4)
-				{
-				r = CheckMask(mask,numbyte, ascivalue, position);
-				if (r == KErrNone)
-				{
-				_LIT(KValueCorrect, "Result Correct");
-					INFO_PRINTF1(KValueCorrect);
-					SetTestStepResult(EPass);
-					_LIT(KReadPass, "Read Passed");
-					INFO_PRINTF1(KReadPass);
-					return TestStepResult();
-					}
-				else
-					{
-					_LIT(KValueWrong, "Result Incorrect, value is %X but should be %X");
-					INFO_PRINTF3(KValueWrong, ascivalue[0], mask);
-					SetTestStepResult(EFail);
-					_LIT(KReadFail, "Read Failed");							
-					INFO_PRINTF1(KReadFail);
-					return TestStepResult();
-					}
-				}
-			else
-				{
-				r = GetCorrectResult(numbyte,correctresults);
-				TInt i;
-				for (i = 0; i < numbyte; i++)
-					{
-					if (ascivalue[i] != correctresults[i])
-						{
-						if ((ascivalue[i] == 0xFF) && (correctresults[i] == 0x00))
-							{
-							_LIT(KValueCorrect, "Result Correct");
-							INFO_PRINTF1(KValueCorrect);
-							SetTestStepResult(EPass);
-							_LIT(KReadPass, "Read Passed");
-							INFO_PRINTF1(KReadPass);
-							return TestStepResult();
-							}
-						else
-							{
-							_LIT(KValueWrong, "Result Incorrect, value is %X but should be %X");
-							INFO_PRINTF3(KValueWrong, ascivalue[i], correctresults[i]);
-							SetTestStepResult(EFail);
-							_LIT(KReadFail, "Read Failed");
-							INFO_PRINTF1(KReadFail);
-							return TestStepResult();
-							}
-						}
-					else
-						{
-						_LIT(KValueCorrect, "Result Correct");
-						INFO_PRINTF1(KValueCorrect);
-						SetTestStepResult(EPass);
-						_LIT(KReadPass, "Read Passed");
-						INFO_PRINTF1(KReadPass);
-						return TestStepResult();
-						}
-					}
-				}
-			}
-			else
-			{
-			_LIT(KErrorRead, "Cannot read the ini file Number of Bytes ");
-			INFO_PRINTF3(KErrorRead,position, numbyte);
-			SetTestStepResult(EFail);
-			return TestStepResult();
-			}
-		}
-	else
-		{
-		_LIT(KErrorRead, "Cannot read the ini file Read Position ");
-		INFO_PRINTF1(KErrorRead);
-		SetTestStepResult(EFail);
-		return TestStepResult();	
-		}
-	return TestStepResult();
-	}
-
-
-/** 
-Read from the raw disk byte by byte and place the results into an array
-
-@param aPos The position from which to start reading the raw disk
-@param aNumberOfBytes The number of bytes to read from the raw disk
-@param aAsciiValue Array containing the values that are read from the raw disk
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32ReadRaw::ReadRaw(TInt64 aPos,TInt aNumberOfBytes,TInt *aAsciiValue)
-	{
-	TInt r;
-	r = TheDisk.Open(iTheFs, CurrentDrive());
-		if (r != KErrNone)
-		{
-		_LIT(KErrorRead, "Cannot open the raw disk - r=%d");
-		INFO_PRINTF2(KErrorRead, r);
-		return r;
-		}
-	
-	TUint8 data[20];
-	TPtr8 buf(&data[0], 20);
-	r = TheDisk.Read(aPos, buf);
-	if (r != KErrNone)
-		{
-		_LIT(KErrorRead, "Cannot read the raw disk - r=%d");
-		INFO_PRINTF2(KErrorRead, r);
-		return r;
-		}
-	TInt i;	
-	for (i = 0; i < aNumberOfBytes; i++)
-		{
-		aAsciiValue[i] = data[i];
-		}
-	TheDisk.Close();	
-	return r; 
-	}
-
-/** 
-Get the correct result value byte by byte and place into an array
-
-@param aNumberOfBytes The number of bytes to read from the raw disk
-@param aCorrectResultArray Array containing the values that are expected
-
-@return KErrNone if successful
-*/
-
-TInt CBaseTestFat32ReadRaw::GetCorrectResult(TInt aNumOfBytes,TInt* aCorrectResultArray)
-	{
-	TInt result;
-	TInt i;
-	_LIT(KCorrectResult,"CorrectResult%d");
-	for (i=1; i<aNumOfBytes+1; i++)
-		{
-		TBuf<20> a;
-		a.Format(KCorrectResult, i);
-		TBool alright3 = GetHexFromConfig(ConfigSection(), a, result);
-		if (alright3)
-			{
-			aCorrectResultArray[i-1] = result;
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Could not get correct result from ini file"));
-			return KErrGeneral;
-			}
-		}
-	return KErrNone;
-	}
-
-/** 
-Get the position by calulating from the entry and position in the entry 
-specified in the ini file 
-
-
-@param aClusterNumber The cluster number on the raw disk
-@param aPosition The position from which to start reading the raw disk
-
-@return KErrNone if successful
-*/	
-TInt CBaseTestFat32ReadRaw::GetCluster(TInt aClusterNumber,TInt64 &aPosition)
-	{
-	TInt entry;
-	_LIT(KEntry,"Entry");
-	TInt entryposition;
-	_LIT(KPositionInEntry,"PositionInEntry");
-	TBool alright = GetIntFromConfig(ConfigSection(), KEntry, entry);
-	if (alright)
-		{
-		TBool alright2 = GetIntFromConfig(ConfigSection(), KPositionInEntry, entryposition);
-		if (alright2)
-			{
-			// Calculating the byte number on the disk when given the 
-			// cluster number, the entry number and the position in the entry
-			TInt sizeOfEntry = 96;
-			aPosition = (iBPB_ResvdSecCnt + (iBPB_FATSz32 * 2) + (iBPB_SecPerClus * (aClusterNumber - 2))) * 512;
-			aPosition = aPosition + ((entry - 1) * sizeOfEntry) + entryposition;
-			return KErrNone;
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Could not read position in entry from ini file"));
-			return KErrGeneral;
-			}
-		}
-	else 
-		{
-		INFO_PRINTF1(_L("Could not read entry number from ini file"));
-		return KErrGeneral;
-		}
-	}
-
-/** 
-Check if the mask value is correct with the mask obtained from the ini file
-
-@param aMask Value of the mask
-@param aNumberOfBytes The number of bytes to read from the raw disk
-@param aAsciiValue Array containing the values that are read from the raw disk
-@param aPos The position on the raw disk
-
-@reutrn KErrNone is successfull
-*/
-TInt CBaseTestFat32ReadRaw::CheckMask(TInt aMask, TInt aNumOfBytes, TInt *aAsciiValue, TInt64 aPos)
-	{
-	TUint32 readValue;
-	TInt maskreturn;
-	_LIT(KMaskReturn,"MaskReturn");
-	TInt i;
-	
-	readValue = 0;
-	for (i=aNumOfBytes-1; i>=0; i--)
-		{
-
-		readValue = readValue << 8;
-		readValue = readValue + aAsciiValue[i];
-		}
-	// Special case for the extension flag field. Checks whether mirroring is
-	// enabled or disabled and whether is contains the correct value. Position
-	// on the disk for this fiels is 0x29
-	if ((aPos == 0x29) && (aMask == 0))
-		{
-		if(readValue != 0)
-			{
-			aMask = 0x80;
-			if ((readValue&aMask) == (TUint32)aMask)
-				{
-				aMask = 0x0D;
-				if ((aMask&readValue) == 0)
-					{
-					INFO_PRINTF1(_L("Mirroring is DISABLED and the active FAT is correct"));
-					return KErrNone;
-					}
-				else 
-					{
-					INFO_PRINTF1(_L("Mirroring is DISABLED and the active FAT is incorrect"));
-					return KErrGeneral;
-					}
-				}
-			}
-		else 
-			{
-			INFO_PRINTF1(_L("Mirroring is ENABLED and the field is 0"));
-			return KErrNone;
-			}
-		}
-	else
-		{
-		TBool alright = GetIntFromConfig(ConfigSection(), KMaskReturn, maskreturn);
-		if (alright)
-			{
-			if (maskreturn == 0)
-				{
-				if ((readValue&aMask) == 0)
-					{
-					return KErrNone;
-					}
-				else 
-					{
-					return KErrGeneral;
-					}
-				}
-			else
-				{
-				if ((readValue&aMask) == (TUint32)aMask)
-					{
-					return KErrNone;
-					}
-				else 
-					{
-					return KErrGeneral;
-					}
-				}
-			}
-		}
-	return KErrNone;
-	}
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32readwrite.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include "t_fat32readwrite.h"
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32ReadWrite::CBaseTestFat32ReadWrite()
-	{
-	SetTestStepName(KTestStepReadWrite);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32ReadWrite::~CBaseTestFat32ReadWrite() 
-	{
-	} 
-
-/**
-Writes and reads a file on the drive
-The disk should be removed while doing read or write operation. 
-
-@return EPass if test passes and EFail if test fails
-*/		    
-TVerdict CBaseTestFat32ReadWrite::doTestStepL()
-	{
-	SetTestStepResult(EPass);
-	
-	TInt r;
-	RFile rfile;
-	_LIT(KFileCreate, "RFs::Replace, expecting KErrNone");
-	_LIT(KTestFilename, "%c:\\TEST.txt");
-	TBuf<255> testFilename;
-	testFilename.Format(KTestFilename, (TUint)iDriveToTest);
-	r =  rfile.Replace(iTheFs,testFilename, EFileWrite);
-	FAT_TEST(r == KErrNone, KFileCreate);
-	
-	_LIT(KData, "Testing file operation");	
-	TBuf8<25> buffer;
-	buffer.Copy(KData);
-	TUint index = 0;
-	TInt pos = 0;
-	
-	while(index++<1000)
-		{
-		r = rfile.Write(buffer);
-		if(r == KErrNotReady)
-			{
-		  	INFO_PRINTF2(_L("Write Failed:%d"), r);
-			break;
-			}					
-		}
-	if(r == KErrNone)
-		{
-		rfile.Seek(ESeekStart, pos);
-		index = 0;
-		while(index++ < 1000)
-			{
-			rfile.Read(buffer, 25);	
-			if(r==KErrNotReady)
-				{
-		  		INFO_PRINTF2(_L("Read Failed:%d"), r);
-				break;
-				}				
-			}	    	
-		}		
-	rfile.Close();	
-	return 	TestStepResult();
-	}
-
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32server.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32server.h"
-#include "t_fat32base.h"
-#include "t_fat32format.h"
-#include "t_fat32mount.h"
-#include "t_fat32readraw.h"
-#include "t_fat32writeraw.h"
-#include "t_fat32readfile.h"
-#include "t_fat32writefile.h"
-#include "t_fat32checkdisk.h"
-#include "t_fat32calculate.h"
-#include "t_fat32filldisk.h"
-#include "t_fat32clusterbound.h"
-#include "t_fat32readwrite.h"
-#include "t_fat32larger512.h"
-
-CBaseTestFat32Server* CBaseTestFat32Server::NewL()
-	{
-	CBaseTestFat32Server* server = new (ELeave) CBaseTestFat32Server();
-	CleanupStack::PushL(server);
-	RProcess handle = RProcess();
-	TParsePtrC serverName(handle.FileName());
-	server->ConstructL(serverName.Name());
-	CleanupStack::Pop(server);
-	return server;
-	}
-
-LOCAL_C void MainL()
-	{
-	RProcess().DataCaging(RProcess::EDataCagingOn);
-	RProcess().SecureApi(RProcess::ESecureApiOn);
-
-	CActiveScheduler* sched=NULL;
-	sched=new(ELeave) CActiveScheduler;
-	CActiveScheduler::Install(sched);
-	CBaseTestFat32Server* server = NULL;
-	TRAPD(err,server = CBaseTestFat32Server::NewL());
-	if(!err)
-		{
-		RProcess::Rendezvous(KErrNone);
-		sched->Start();
-		}
-	delete server;
-	delete sched;
-	}
-
-GLDEF_C TInt E32Main()
-	{
-	CTrapCleanup* cleanup = CTrapCleanup::New();
-	if(cleanup == NULL)
-		{
-		return KErrNoMemory;
-		}
-	TRAP_IGNORE(MainL());
-	delete cleanup;
-	return KErrNone;
-    }
-
-CTestStep* CBaseTestFat32Server::CreateTestStep(const TDesC& aStepName)
-	{
-	CTestStep* testStep = NULL;
-	
-	if (aStepName == KTestStepFormat)
-		{
-		testStep = new CBaseTestFat32Format();
-		}
-		else if (aStepName == KTestStepMount)
-		{
-		testStep = new CBaseTestFat32Mount();
-		}
-		else if (aStepName == KTestStepReadRaw)
-		{
-		testStep = new CBaseTestFat32ReadRaw();
-		}
-		else if (aStepName == KTestStepWriteRaw)
-		{
-		testStep = new CBaseTestFat32WriteRaw();
-		}
-		else if (aStepName == KTestStepReadFile)
-		{
-		testStep = new CBaseTestFat32ReadFile();
-		}
-		else if (aStepName == KTestStepWriteFile)
-		{
-		testStep = new CBaseTestFat32WriteFile();
-		}
-		else if (aStepName == KTestStepCheckDisk)
-		{
-		testStep = new CBaseTestFat32CheckDisk();
-		}
-		else if (aStepName == KTestStepCalculate)
-		{
-		testStep = new CBaseTestFat32Calculate();
-		}
-		else if (aStepName == KTestStepFillDisk)
-		{
-		testStep = new CBaseTestFat32FillDisk();			
-		}
-		else if (aStepName == KTestStepClusterBound)
-		{
-		testStep = new CBaseTestFat32ClusterBound();			
-		}
-		else if (aStepName == KTestStepReadWrite)
-		{
-		testStep = new CBaseTestFat32ReadWrite();			
-		}
-		else if (aStepName == KTestStepLarger512)
-		{
-		testStep = new CBaseTestFat32Larger512();			
-		}
-	return testStep;
-	}
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32writefile.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,476 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32writefile.h"
-
-static RRawDisk TheDisk;
-static RFile TheFile;
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32WriteFile::CBaseTestFat32WriteFile() 
-	{
-	SetTestStepName(KTestStepWriteFile);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32WriteFile::~CBaseTestFat32WriteFile() 
-	{
-	}
-
-
-/** 
-The function performs the following actions
-1. If there is a file specified in the ini file then 
-	-> create a file with that filename 
-	-> Else create a file name ReadTestFile.txt
-2. Get the file action required from the ini file and carry out that action
-
-@return EPass if test passes and EFail if test fails
-*/ 
-TVerdict CBaseTestFat32WriteFile::doTestStepL()
-	{
-	TInt r = 0;
-	TInt errcode;
-	SetTestStepResult(EFail);
-	_LIT(KAction,"Action");
-	TBuf<10> actionAfterCreate;
-	TPtrC16 action = actionAfterCreate;
-	_LIT(KName,"SetFileName");
-	_LIT(KPath,"%c:\\");
-	TBuf<10> setFileName;
-	TPtrC16 name = setFileName;
-	TBuf<255> fileName;
-	_LIT(KCreatedFileName,"%c:\\ReadTestFile.txt");
-
-	TBool alright = GetStringFromConfig(ConfigSection(), KName, name);
-	if (alright)
-		{
-		fileName.Format(KPath, (TUint)iDriveToTest);
-		fileName.Append(name);
-		}
-	else
-		{
-		fileName.Format(KCreatedFileName, (TUint)iDriveToTest);
-		}
-	TInt res = TheFile.Replace(iTheFs,fileName,EFileWrite);
-	TheFile.Close();
-	TBool alright2 = GetStringFromConfig(ConfigSection(), KAction, action);
-	if (alright2)
-		{
-		errcode = SetAttribs(fileName);
-		if (action == _L("Write"))
-			{
-			errcode = WriteFile(fileName);
-			}
-		if (action == _L("DirList"))
-			{
-			errcode = DirList(fileName);
-			}
-		if (action == _L("CheckAtt"))
-			{
-			errcode = SetAttribs(fileName);
-			}
-		if (action == _L("CheckCode"))
-			{
-			errcode = CheckErrCode(res);
-			}
-		if (action == _L("MakeDirectory"))
-			{
-			errcode = MakeDirectory(_L("TestDirectory\\"));
-			}
-		if (action == _L("MakeTwoDirectory"))
-			{
-			errcode = MakeDirectory(_L("TestDirectory\\"));
-			if (errcode == KErrNone)
-				{
-				errcode = MakeDirectory(_L("TestDirectory\\TestDirectory2\\"));
-				}
-			}
-		if (action == _L("SetLabel"))
-			{
-			errcode = SetLabel(_L("TestLabel"));
-			}
-		if (action == _L("SetTwoLabels"))
-			{
-			errcode = SetLabel(_L("TestLabel"));
-			if (errcode == KErrNone)
-				{
-				errcode = SetLabel(_L("TestSecondLabel"));
-				}
-			}
-		if (action == _L("SetFileSize"))
-			{
-			errcode = SetFileSize(fileName);
-			}
-		if (action == _L("DeleteFile"))
-			{
-			errcode = DeleteFile(fileName);
-			}
-		r = CheckErrCode(errcode);
-		if(r != KErrNone)
-			{
-			_LIT(KErrorWriteFile, "Error writing the file, Error Code = %d");
-			INFO_PRINTF2(KErrorWriteFile, r);
-			SetTestStepResult(EFail);
-			}
-		else
-			{
-			SetTestStepResult(EPass);
-			_LIT(KReadPass, "Read Passed");
-			INFO_PRINTF1(KReadPass);
-			}
-		}
-	else
-		{
-		r = CheckErrCode(res);
-		if(r != KErrNone)
-			{
-			_LIT(KErrorWriteFile, "Error writing the file, Error Code = %d");
-			INFO_PRINTF2(KErrorWriteFile, r);
-			SetTestStepResult(EFail);
-			}
-		else
-			{
-			_LIT(KReadPass, "Read Passed");
-			INFO_PRINTF1(KReadPass);
-			SetTestStepResult(EPass);
-			}					
-		}
-	return TestStepResult(); 
-	}
-
-/** 
-Open the file
-
-@param aFile The name of the file to write 
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32WriteFile::WriteFile(const TDesC16& aFile)
-	{
-	TBuf8<255> temp;
-	temp.Copy(aFile);
-	TInt r = 0; 
-	r = TheFile.Open(iTheFs,aFile,EFileWrite);
-	if(r != KErrNone)
-		{
-		_LIT(KErrorOpenFile, "Unable to open the file, Error Code = %d");
-		INFO_PRINTF2(KErrorOpenFile, r);
-		return r; 
-		}
-	TheFile.Close();
-	return r; 
-	}
-
-/** 
-Get the attribute to set from the ini file and set the attributes of the file
-
-@param aFile The name of the file whos attributes are to be set 
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32WriteFile::SetAttribs(const TDesC16& aFile)
-	{		
-	TBuf8<255> temp;
-	temp.Copy(aFile);
-	TInt r = 0; 
-	TUint setMask = KEntryAttNormal;
-	_LIT(KAtt,"Attributes");
-	TBuf<10> fileAttributes;
-	TPtrC16 attributes = fileAttributes;
-
-	TBool alright3 = GetStringFromConfig(ConfigSection(), KAtt, attributes);
-	if (alright3)
-		{
-		if (attributes == _L("Normal"))
-			{
-			setMask = KEntryAttNormal;
-			}	
-		else if (attributes == _L("ReadOnly"))
-			{
-			setMask = KEntryAttReadOnly;
-			}
-		else if (attributes == _L("Hidden"))
-			{
-			setMask = KEntryAttHidden;
-			}
-		else if (attributes == _L("System"))
-			{
-			
-			setMask = KEntryAttSystem;
-			}
-		else if (attributes == _L("Dir"))
-			{
-			setMask = KEntryAttDir;
-			}
-			
-		r = TheFile.Open(iTheFs,aFile,EFileWrite);
-		if (r != KErrNone)
-			{
-			_LIT(KOpenFail, "Cannot open the file, error = %d");
-			INFO_PRINTF2(KOpenFail, r);
-			return r;
-			}
-		r = TheFile.SetAtt(setMask, 0);
-		if (r != KErrNone)
-			{
-			_LIT(KSetAttFail, "Cannot set the attributes, error = %d");
-			INFO_PRINTF2(KSetAttFail, r);
-			return r;
-			}
-			
-		TheFile.Close();
-		
-		r = CheckAtt(aFile, setMask);	
-		if (r != KErrNone)
-			{
-			_LIT(KAttFail, "Cannot check the attributes, error = %d");
-			INFO_PRINTF2(KAttFail, r);
-			return r;
-			}
-		}
-	else
-		{
-		_LIT(KNoAttribs, "No attributes specified in the ini file");
-		INFO_PRINTF1(KNoAttribs);
-		return KErrNone;	
-		}
-	return r; 
-	}
-
-/** 
-Check the attributes of the file and compare them to the attributes expected
-
-@param aFile The name of the file whos attributes are to be checked 
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32WriteFile::CheckAtt(const TDesC16& aFile, TUint setMask)
-	{
-	TInt r = 0;
-	TUint fileAttributes;
-	r = iTheFs.Att(aFile, fileAttributes);
-	if (r != KErrNone)
-		{
-		_LIT(KGetAttFail, "Failed to get the file attributes");
-		INFO_PRINTF1(KGetAttFail);
-		return KErrGeneral;
-		}
-	else
-		{
-		if (fileAttributes&setMask)
-			{
-			_LIT(KAttChanged, "Attributes changed correctly");
-			INFO_PRINTF1(KAttChanged);
-			return r;
-			}
-		else
-			{
-			_LIT(KAttNotChanged, "Attributes have not been changed");
-			INFO_PRINTF1(KAttNotChanged);
-			return KErrGeneral;
-			}
-		}
-	}
-
-/** 
-Searching the directory to see if it contains the file who's attributes 
-were set as hidden. 
-
-@param aFile The name of the file to search for 
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32WriteFile::DirList(const TDesC16& aFile)
-	{
-
-	TInt i; 	
-	CDir* dirPtr;	
-	TBuf<10> dir1;
-	dir1 = iSessionPath;
-	dir1.Append(_L("*.*"));
-	TBuf<20> buf;
-	buf.Append(aFile);
-	buf.Delete(0,3);
-	TInt match = 0;
-	iTheFs.GetDir(dir1,KEntryAttMatchExclude|(KEntryAttHidden|0x24),ESortNone,dirPtr);
-	TInt num = dirPtr->Count();
-	TEntry entry;
-	for (i=0; i<num; i++)
-		{
-		entry=(*dirPtr)[i];
-		if (entry.iName == _L("ReadTestFile.txt"))
-			{
-			match = match + 1;
-			}
-		}
-	if (match > 0)
-		{	
-		_LIT(KFileFound, "File found");
-		INFO_PRINTF1(KFileFound);
-		return KErrNone;
-		}
-	else
-		{
-		_LIT(KFileNotFound, "File not found");
-		INFO_PRINTF1(KFileNotFound);
-		return KErrNotFound;
-		}
-	}
-
-/** 
-Compare the error code that is expected to the one returned from the action
-
-@param aReturnCode The return value that is to be compared 
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32WriteFile::CheckErrCode(TInt aReturnCode)
-	{
-	_LIT(KCheckCode,"CheckCode");
-	TInt checkcode;
-	TBool alright4 = GetIntFromConfig(ConfigSection(), KCheckCode, checkcode);
-	if (alright4)
-		{
-		if (aReturnCode == checkcode)
-			{
-			_LIT(KCorrectCode, "Correct error code = %d");
-			INFO_PRINTF2(KCorrectCode, aReturnCode);
-			return KErrNone;
-			}
-		else
-			{	
-			_LIT(KBadCode, "Incorrect error code = %d");
-			INFO_PRINTF2(KBadCode, aReturnCode);
-			return KErrGeneral;
-			}
-		}
-	else 
-		{
-		_LIT(KNoIniCode, "CheckCode not specified in ini file");
-		INFO_PRINTF1(KNoIniCode);
-		return KErrGeneral;
-		}		
-	}
-
-/** 
-Creating a directory
-
-@param aDir The name of the directory to create 
-
-@return KErrNone if successfull
-*/	
-TInt CBaseTestFat32WriteFile::MakeDirectory(const TDesC16& aDir)
-	{
-	TInt r = 0;
-	TBuf<255> dirName;
-	dirName.Append(iSessionPath);
-	dirName.Append(aDir);
-	TUint setMask = KEntryAttDir;
-	r = iTheFs.MkDir(dirName);
-	if (r != KErrNone)
-		{
-		_LIT(KMkDirFail, "Failed make the directory");
-		INFO_PRINTF1(KMkDirFail);
-		return r;
-		}	
-	r = CheckAtt(dirName, setMask);	
-	if (r != KErrNone)
-		{
-		_LIT(KChkAttFail, "Failed to check the attributes");
-		INFO_PRINTF1(KChkAttFail);
-		return r;
-		}
-	return r; 
-	}
-
-/** 
-Setting a volume label
-
-@param aLabel The name of the lable to set
-
-@return KErrNone if successfull
-*/		
-TInt CBaseTestFat32WriteFile::SetLabel(const TDesC16& aLabel)
-	{
-	TInt r = 0;
-	r = iTheFs.SetVolumeLabel(aLabel, CurrentDrive());
-	if (r != KErrNone)
-		{
-		_LIT(KSetLabelFail, "Failed to set volume label");
-		INFO_PRINTF1(KSetLabelFail);
-		return r;
-		}
-	return r; 
-	}
-
-/** 
-Setting the size of the file
-
-@param aFile The name of the file whos size to set
-
-@return KErrNone if successfull
-*/			
-TInt CBaseTestFat32WriteFile::SetFileSize(const TDesC16& aFile)
-	{
-	TInt r = 0;
-	r = TheFile.Open(iTheFs,aFile,EFileWrite);
-	if (r != KErrNone)
-		{
-		_LIT(KOpenFail, "Failed to open the file");
-		INFO_PRINTF1(KOpenFail);
-		return r;
-		}
-	TInt fileSize = (iBPB_SecPerClus/2) * 3 * 1024; // File accomodates 3 clusters
-	r = TheFile.SetSize(fileSize);
-	if (r != KErrNone)
-		{
-		_LIT(KSetSizeFail, "Failed set the size of the file");
-		INFO_PRINTF1(KSetSizeFail);
-		return r;
-		}
-	TheFile.Close();
-	r = iTheFs.FinaliseDrive(CurrentDrive(), RFs::EFinal_RW);
-	return r; 
-	}
-
-/** 
-Delete the file
-
-@param aFile The name of the file to delete
-
-@return KErrNone if successfull
-*/				
-TInt CBaseTestFat32WriteFile::DeleteFile(const TDesC16& aFile)
-	{
-	TInt r = 0;
-	r = iTheFs.Delete(aFile);
-	if (r != KErrNone)
-		{
-		_LIT(KDeleteFail, "Failed delete the file");
-		INFO_PRINTF1(KDeleteFail);
-		return r;
-		}
-	return r; 
-	}
-	
--- a/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32writeraw.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,267 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include "t_fat32writeraw.h"
-
-static RRawDisk TheDisk;
-
-/**
-Class Constructor
-*/		    
-CBaseTestFat32WriteRaw::CBaseTestFat32WriteRaw() 
-	{
-	SetTestStepName(KTestStepWriteRaw);
-	}
-	
-/**
-Class Destructor
-*/
-CBaseTestFat32WriteRaw::~CBaseTestFat32WriteRaw() 
-	{
-	}
-
-/** 
-This function performs the following actions:
-1. Get the position at which to write on the raw disk from the ini file
-	-> if a cluster is specified, get the position from the GetCluster function 
-2. Get the number of bytes to write from the ini file 
-3. Obtain the values to be written to the disk from the ini file. 
-4. Write the values to the disk byte by byte.
-
-@return EPass if test passes and EFail if test fails
-*/ 
-TVerdict CBaseTestFat32WriteRaw::doTestStepL()
-	{
-	SetTestStepResult(EFail);
-	_LIT(KPosition,"WritePosition");
-	_LIT(KNumOfBytes,"NumberOfBytes");
-	_LIT(KCluster,"ClusterNumber");
-	TInt writevalues[12];
-	TInt position; 
-	TInt64 clusterPosition;
-	TInt cluster; 
-	TInt numbyte;
-	TInt r;
-	TBool alright = GetHexFromConfig(ConfigSection(), KPosition, position);
-	if(alright)
-		{
-		if (iMedia == 1 && position >= 16384)
-			{
-			INFO_PRINTF2(_L("Position = %d"), position);
-			INFO_PRINTF2(_L("iBPB_ResvdSecCnt = %d"), iBPB_ResvdSecCnt);
-			position = (iBPB_ResvdSecCnt * 512) + (position - 0x4000);
-			INFO_PRINTF2(_L("New Position = %d"), position);
-			}
-		TBool alright2 = GetHexFromConfig(ConfigSection(), KNumOfBytes, numbyte);
-		if (alright2)
-			{
-			TBool alright2 = GetIntFromConfig(ConfigSection(), KCluster, cluster);
-			if (alright2)
-				{
-				r = GetCluster(cluster, clusterPosition);
-				position = clusterPosition;
-				}
-			else
-				{
-				position = position;
-				}
-            _LIT(KFATEntryWritePosition,"FATEntryWritePosition");
-            _LIT(KFATEntry0,"FATEntry0");
-            _LIT(KFATEntry1,"FATEntry1");
-            _LIT(KFATEntry2,"FATEntry2");
-            _LIT(KFATEntry3,"FATEntry3");
-            _LIT(KFATEntry4,"FATEntry4");
-            _LIT(KFATEntry6,"FATEntry6");
-            _LIT(KFATEntry18,"FATEntry18");
-            _LIT(KFATEntry52,"FATEntry52");
-            _LIT(KFATEntry78,"FATEntry78");
-
-            
-            TPtrC fat_entry_str;
-            if(GetStringFromConfig(ConfigSection(), KFATEntryWritePosition, fat_entry_str))
-            {
-                if(!fat_entry_str.Compare(KFATEntry0))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec;
-                }
-                else if(!fat_entry_str.Compare(KFATEntry1))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4;
-                }
-                else if(!fat_entry_str.Compare(KFATEntry2))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*2;
-                }
-                else if(!fat_entry_str.Compare(KFATEntry3))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*3;
-                }
-                else if(!fat_entry_str.Compare(KFATEntry4))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*4;
-                }           
-                else if(!fat_entry_str.Compare(KFATEntry6))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*6;
-                }
-                else if(!fat_entry_str.Compare(KFATEntry18))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*18;
-                }
-                else if(!fat_entry_str.Compare(KFATEntry52))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*52;
-                }
-                else if(!fat_entry_str.Compare(KFATEntry78))
-                {
-                    position = iBPB_ResvdSecCnt * iBPB_BytsPerSec + 4*78;
-                }   
-
-            }
-			_LIT(KWritePosition, "The position on the disk being written to is %d");
-			INFO_PRINTF2(KWritePosition,position);
-			r = GetWriteValue(numbyte,writevalues);
-			TInt i;
-			r = TheDisk.Open(iTheFs, CurrentDrive());
-			if (r!=KErrNone)
-				{
-				_LIT(KErrorOpen, "Cannot open the raw disk - r=%d");
-				INFO_PRINTF2(KErrorOpen, r);
-				}
-			for (i=0;i<numbyte;i++)
-				{
-				r = WriteRaw(position+i, writevalues[i]);
-				if(r != KErrNone)
-					{
-					_LIT(KErrorRead, "Cannot write to the raw disk at position %d with value %d");
-					INFO_PRINTF3(KErrorRead,position, writevalues[i]);
-					SetTestStepResult(EFail);
-					return TestStepResult();
-					}
-				}
-			TheDisk.Close();
-			}
-		else
-			{
-			_LIT(KNoIniNumByte, "Cannot read the number of bytes from the ini file");
-			INFO_PRINTF1(KNoIniNumByte);
-			SetTestStepResult(EFail);
-			return TestStepResult();		
-			}
-		}
-	else
-		{
-		_LIT(KNoIniPos, "Cannot read the position from the ini file");
-		INFO_PRINTF1(KNoIniPos);
-		SetTestStepResult(EFail);
-		return TestStepResult();	
-		}
-
-	
-	SetTestStepResult(EPass);
-	_LIT(KWritePass, "Write Passed");
-	INFO_PRINTF1(KWritePass);
-	return TestStepResult();
-	}
-
-/** 
-Writing a value to the raw disk
-
-@param aPos The position from which to start writing to the raw disk
-@param aValue The value to write to the raw disk
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32WriteRaw::WriteRaw(TInt64 aPos,TInt aValue)
-	{
-//	int val = 0;
-	TInt r;
-	TUint8 data[1];
-	TPtr8 buffer((TUint8*)&data[0],1);
-	r = TheDisk.Read(aPos,buffer);
-	data[0] = aValue;
-	r = TheDisk.Write(aPos,buffer);
-	if (r != KErrNone)
-		{
-		_LIT(KErrorWrite, "Cannot write to the raw disk - r=%d");
-		INFO_PRINTF2(KErrorWrite,r);
-		}		
-	return r; 
-	}
-	
-/** 
-Get the values that are to be written to the disk byte by byte 
-and place into an array
-
-@param aNumberOfBytes the nummber of bytes to write to the raw disk
-@param aValueArray Array containing the values to write to the raw disk
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32WriteRaw::GetWriteValue(TInt aNumOfBytes,TInt* aValueArray)
-	{
-	TInt value;
-	TInt i;
-	_LIT(KWriteValues,"WriteValue%d");
-	for (i = 1; i < aNumOfBytes + 1; i++)
-		{
-		TBuf<20> writeValue;
-		writeValue.Format(KWriteValues, i);
-		TBool alright3 = GetHexFromConfig(ConfigSection(), writeValue, value);
-		if (alright3)
-			{
-			aValueArray[i-1] = value;
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Cannot read WriteValue from ini file"));
-			return KErrGeneral;
-			}
-		}
-	return KErrNone;
-	}
-
-/** 
-Get the position by calulating from the entry and position in the entry 
-specified in the ini file
-
-@param aClusterNumber The cluster on the disk to write to
-@param aPosition the position within an entry
-
-@return KErrNone if successfull
-*/
-TInt CBaseTestFat32WriteRaw::GetCluster(TInt aClusterNumber,TInt64 &aPosition)
-	{
-	TInt entry;
-	_LIT(KEntry,"Entry");
-	TInt entryposition;
-	_LIT(KPositionInEntry,"PositionInEntry");
-	TBool alright = GetIntFromConfig(ConfigSection(), KEntry, entry);
-		if (alright)
-			{
-			TBool alright2 = GetIntFromConfig(ConfigSection(), KPositionInEntry, entryposition);
-			if (alright2)
-				{
-				aPosition = (iBPB_ResvdSecCnt + (iBPB_FATSz32*2) + (iBPB_SecPerClus * (aClusterNumber - 2))) * 512;
-				aPosition = aPosition + ((entry - 1)*96)+ entryposition;//(32 * (entry - 1));
-				}
-			}
-	return KErrNone;
-	}
-
--- a/baseapitest/basesvs/conformance/f32/fat32/testdata/armv5/f32-fat32-conformance.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1347 +0,0 @@
-[Common]
-DriveLetter=E
-SetDebug=0
-
-[Larger512]
-FormatType=Full
-
-
-[BadMedia]
-FormatType=Full
-
-ReadPosition=11
-NumberOfBytes=2
-WritePosition=11
-WriteValue1=1
-WriteValue2=0
-CheckCode=-20
-PassRegardless=N
-CorrectVerdict=Fail
-
-[BadMedia_i]
-NumberOfBytes=2
-WritePosition=C11
-WriteValue1=1
-WriteValue2=0
-
-[CorruptFatTable_4i]
-FormatType=Full
-
-SetFileName=FatCorrupt.txt
-Action=SetFileSize
-CheckCode=0
-
-[CorruptFatTable_4ii]
-
-SetFileName=FatCorrupt2.txt
-Action=SetFileSize
-CheckCode=0
-WritePosition=4018
-FATEntryWritePosition=FATEntry6
-NumberOfBytes=1	
-WriteValue1=4
-
-[CorruptFatTable_4iii]
-
-CheckCode=2
-PassRegardless=N
-
-[CorruptFatTable_3i]
-FormatType=Full
-
-SetFileName=FatCorrupt.txt
-Action=SetFileSize
-CheckCode=0
-
-[CorruptFatTable_3ii]
-
-WritePosition=4010
-FATEntryWritePosition=FATEntry4
-NumberOfBytes=8	
-WriteValue1=ff
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=0f
-WriteValue5=0
-WriteValue6=0
-WriteValue7=0
-WriteValue8=0
-CheckCode=4
-PassRegardless=N
-
-[CorruptFatTable_2i]
-FormatType=Full
-
-NumberOfBytes=4
-WritePosition=4048	
-FATEntryWritePosition=FATEntry18
-WriteValue1=18
-WriteValue2=0
-WriteValue3=0
-WriteValue4=0
-CorrectVerdict=Fail
-
-[CorruptFatTable_2ii]
-
-NumberOfBytes=4
-WritePosition=40D0	
-FATEntryWritePosition=FATEntry52	
-WriteValue1=22
-WriteValue2=0
-WriteValue3=0
-WriteValue4=0
-
-[CorruptFatTable_2iii]
-
-NumberOfBytes=4
-WritePosition=4138	
-FATEntryWritePosition=FATEntry78
-WriteValue1=2
-WriteValue2=0
-WriteValue3=0
-WriteValue4=0
-CheckCode=3
-PassRegardless=Y
-
-[CorruptFatTable_1i]
-FormatType=Full
-
-SetFileName=FatCorrupt.txt
-Action=SetFileSize
-CheckCode=0
-
-[CorruptFatTable_1ii]
-
-WritePosition=400C
-FATEntryWritePosition=FATEntry3
-NumberOfBytes=4	
-WriteValue1=0
-WriteValue2=0
-WriteValue3=0
-WriteValue4=0
-CheckCode=1
-PassRegardless=N
-
-[BPB_FATSz32]
-FormatType=Full
-
-Calculation=ComputeFatSize
-
-[Bit_CInShutBitMask]
-FormatType=Quick
-
-ReadPosition=4000
-FATEntryReadPosition=FATEntry0
-Mask=4000000
-MaskReturn=1
-NumberOfBytes=4
-
-[Bit_CHrdErrBitMask]
-FormatType=Quick
-
-ReadPosition=4004
-FATEntryReadPosition=FATEntry1
-Mask=8000000
-MaskReturn=1
-NumberOfBytes=4
-
-[BPB_ExtFlags_1]
-FormatType=Full
-
-ReadPosition=29
-Mask=0
-NumberOfBytes=1
-
-
-[BPB_ExtFlags_4]
-FormatType=Quick
-
-ReadPosition=29
-Mask=70
-MaskReturn=0
-NumberOfBytes=1
-
-[BPB_ExtFlags_6]
-FormatType=Quick
-
-ReadPosition=28
-Mask=FF
-MaskReturn=0
-NumberOfBytes=1
-
-[BPB_FSVer]
-FormatType=Full
-
-ReadPosition=2A
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-WritePosition=2A	
-WriteValue1=1
-WriteValue2=0
-CorrectVerdict=Pass
-
-[BPB_FSVer_2b]
-FormatType=Full
-NumberOfBytes=2
-WritePosition=C2A	
-WriteValue1=1
-WriteValue2=0
-CorrectVerdict=Fail
-
-[BPB_FSVer_3]
-FormatType=Full
-
-ReadPosition=2A
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-WritePosition=2B	
-WriteValue1=0
-WriteValue2=1
-CorrectVerdict=Pass
-
-[BPB_FSVer_3b]
-FormatType=Full
-
-ReadPosition=2A
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-WritePosition=C2B	
-WriteValue1=0
-WriteValue2=1
-CorrectVerdict=Fail
-
-[BPB_FSVer_4]
-FormatType=Full
-
-NumberOfBytes=2
-WritePosition=2B	
-WriteValue1=0
-WriteValue2=0
-CorrectVerdict=Pass
-
-[BPB_RootClus_1]
-FormatType=Full
-
-ReadPosition=2C
-NumberOfBytes=4
-CorrectResult1=2
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-
-[BPB_RootClus_2]
-FormatType=Quick
-
-ReadPosition=2C
-NumberOfBytes=4
-CorrectResult1=3
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-WritePosition=4008	
-FATEntryWritePosition=FATEntry2	
-WriteValue1=f7
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=0f
-
-[BPB_FSInfo]
-FormatType=Full
-
-ReadPosition=30
-NumberOfBytes=2
-CorrectResult1=1
-CorrectResult2=0
-
-[BPB_BkBootSec]
-FormatType=Full
-
-ReadPosition=32
-NumberOfBytes=2
-CorrectResult1=6
-CorrectResult2=0
-
-[BPB_BkBootSec_i]
-FormatType=Full
-
-ReadPosition=C03
-NumberOfBytes=4
-CorrectResult1=45
-CorrectResult2=50
-CorrectResult3=4F
-CorrectResult4=43
-
-[BPB_Reserved]
-FormatType=Full
-
-ReadPosition=34
-NumberOfBytes=C
-CorrectResult1=0
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-CorrectResult5=0
-CorrectResult6=0
-CorrectResult7=0
-CorrectResult8=0
-CorrectResult9=0
-CorrectResult10=0
-CorrectResult11=0
-CorrectResult12=0
-
-[BPB_Reserved_2]
-
-WritePosition=34
-NumberOfBytes=C
-WriteValue1=1
-WriteValue2=1
-WriteValue3=1
-WriteValue4=1
-WriteValue5=1
-WriteValue6=1
-WriteValue7=1
-WriteValue8=1
-WriteValue9=1
-WriteValue10=1
-WriteValue11=1
-WriteValue12=1
-CheckCode=-5
-PassRegardless=Y
-
-[BPB_RootEntCnt_2]
-FormatType=Quick
-
-ReadPosition=11
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-
-[BPB_RootEntCnt_3]
-
-ReadPosition=11
-NumberOfBytes=2
-WritePosition=11
-WriteValue1=1
-WriteValue2=0
-CheckCode=-20
-PassRegardless=N
-
-[BPB_RootEntCnt_3i]
-NumberOfBytes=2
-WritePosition=C11
-WriteValue1=1
-WriteValue2=0
-
-[FAT32Cluster_1]
-FormatType=Full
-
-Calculation=ClusterCount
-
-[FAT32Cluster_2a]
-FormatType=Quick
-
-ReadPosition=4010
-FATEntryReadPosition=FATEntry4
-NumberOfBytes=4
-CorrectResult1=f7
-CorrectResult2=ff
-CorrectResult3=ff
-CorrectResult4=0f
-WritePosition=4010	
-FATEntryWritePosition=FATEntry4	
-WriteValue1=f7
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=0f
-Action=SetFileSize
-CheckCode=0
-Attributes=Normal
-
-[FAT32Cluster_2b]
-
-ReadPosition=400C
-FATEntryReadPosition=FATEntry3
-NumberOfBytes=10
-CorrectResult1=05
-CorrectResult2=00
-CorrectResult3=00
-CorrectResult4=00
-CorrectResult5=f7
-CorrectResult6=ff
-CorrectResult7=ff
-CorrectResult8=0f
-CorrectResult9=06
-CorrectResult10=00
-CorrectResult11=00
-CorrectResult12=00
-CorrectResult13=ff
-CorrectResult14=ff
-CorrectResult15=ff
-CorrectResult16=0f
-
-
-[FSINFOSTRUC_1]
-FormatType=Full
-
-ReadPosition=200
-NumberOfBytes=4
-CorrectResult1=52
-CorrectResult2=52
-CorrectResult3=61
-CorrectResult4=41
-
-[FSINFOSTRUC_2]
-
-ReadPosition=3FC
-NumberOfBytes=4
-CorrectResult1=00
-CorrectResult2=00
-CorrectResult3=55
-CorrectResult4=AA
-
-[FSINFOSTRUC_3]
-
-ReadPosition=3E4
-NumberOfBytes=4
-CorrectResult1=72
-CorrectResult2=72
-CorrectResult3=41
-CorrectResult4=61
-
-[FSINFOSTRUC_4b]
-
-ReadPosition=3E8
-NumberOfBytes=4
-CorrectResult1=CB
-CorrectResult2=57
-CorrectResult3=3
-CorrectResult4=0
-Action=SetFileSize
-CheckCode=0
-Attributes=Normal
-Calculation=CheckFSInfo
-
-[FSINFOSTRUC_4c]
-
-FormatType=Quick
-WritePosition=3E8
-NumberOfBytes=4
-WriteValue1=FF
-WriteValue2=FF
-WriteValue3=FF
-WriteValue4=FF
-CheckCode=0
-PassRegardless=N
-
-[FSINFOSTRUC_4d]
-FormatType=Full
-
-Calculation=SetGreater
-CheckCode=-20
-PassRegardless=Y
-
-[FSINFOSTRUC_5a]
-FormatType=Quick
-
-ReadPosition=3EC
-CorrectResult1=2
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-
-[FSINFOSTRUC_5b]
-FormatType=Quick
-
-ReadPosition=3EC
-NumberOfBytes=4
-WritePosition=400C	
-FATEntryWritePosition=FATEntry3	
-WriteValue1=f7
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=0f
-CorrectResult1=3
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-
-[FSINFOSTRUC_5c]
-FormatType=Full
-NumberOfBytes=4
-
-ReadPosition=3EC
-ReadLength=4
-CorrectResult1=5
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-Action=SetFileSize
-CheckCode=0
-Attributes=Normal
-
-[DIR_Name_1]
-FormatType=Full
-
-Action=DeleteFile
-CheckCode=0
-Attributes=Normal
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=64
-NumberOfBytes=1
-CorrectResult1=E5
-
-[DIR_Name_2]
-
-ReadPosition=0
-ClusterNumber=3
-Entry=1
-PositionInEntry=64
-NumberOfBytes=1
-CorrectResult1=0
-
-[DIR_Name_3]
-FormatType=Full
-
-SetFileName=Tst06.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=6
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst06.txt
-ReadCheckCode=-20
-
-[DIR_Name_5_check]
-FormatType=Full
-
-CheckCode=-5
-PassRegardless=Y
-
-[DIR_Name_5i]
-FormatType=Full
-
-SetFileName=Tst22.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=22
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst22.txt
-ReadCheckCode=-20
-
-[DIR_Name_5ii]
-FormatType=Full
-
-SetFileName=Tst2A.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=2A
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst2A.txt
-ReadCheckCode=-20
-
-[DIR_Name_5iii]
-FormatType=Full
-
-SetFileName=Tst2B.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=2B
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst2B.txt
-ReadCheckCode=-20
-[DIR_Name_5iv]
-FormatType=Full
-
-SetFileName=Tst2C.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=2C
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst2C.txt
-ReadCheckCode=-20
-[DIR_Name_5v]
-FormatType=Full
-
-SetFileName=Tst2E.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=2D
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst2E.txt
-ReadCheckCode=-20
-
-
-
-
-[DIR_Attr_1]
-FormatType=Quick
-
-Action=Write
-OpenMode=ReadOnly
-CheckCode=-21
-Attributes=ReadOnly
-
-[DIR_Attr_2]
-FormatType=Quick
-
-Action=DirList
-OpenMode=ReadOnly
-CheckCode=-1
-Attributes=Hidden
-
-[DIR_Attr_3]
-FormatType=Quick
-
-Action=CheckAtt
-CheckCode=0
-Attributes=System
-
-[DIR_Attr_4]
-FormatType=Quick
-
-Action=CheckAtt
-CheckCode=-2
-Attributes=Dir
-
-[DIR_Attr_5]
-FormatType=Quick
-
-Action=MakeDirectory
-CheckCode=0
-Attributes=Dir
-SetFileName=DirCreate
-
-[DIR_Attr_6]
-FormatType=Quick
-
-Action=SetLabel
-CheckCode=0
-Attributes=Dir
-
-[DIR_Attr_7]
-FormatType=Quick
-
-Action=SetTwoLabels
-CheckCode=-28
-Attributes=Dir
-
-[DIRSPECIALENT_1]
-FormatType=Full
-
-Action=MakeTwoDirectory
-Attributes=Dir
-CheckCode=0
-
-[DIRSPECIALENT_1a]
-
-ReadPosition=0
-ClusterNumber=3
-Entry=1
-PositionInEntry=0
-NumberOfBytes=B
-CorrectResult1=2E
-CorrectResult2=20
-CorrectResult3=20
-CorrectResult4=20
-CorrectResult5=20
-CorrectResult6=20
-CorrectResult7=20
-CorrectResult8=20
-CorrectResult9=20
-CorrectResult10=20
-CorrectResult11=20
-
-[DIRSPECIALENT_1b]
-
-ReadPosition=0
-ClusterNumber=3
-Entry=1
-PositionInEntry=32
-NumberOfBytes=B
-CorrectResult1=2E
-CorrectResult2=2E
-CorrectResult3=20
-CorrectResult4=20
-CorrectResult5=20
-CorrectResult6=20
-CorrectResult7=20
-CorrectResult8=20
-CorrectResult9=20
-CorrectResult10=20
-CorrectResult11=20
-
-[DIRSPECIALENT_2a]
-FormatType=Quick
-
-SetFileName=.
-CheckCode=-28
-
-[DIRSPECIALENT_2b]
-FormatType=Quick
-
-SetFileName=..
-CheckCode=-28
-
-[DIR_Date]
-FormatType=Full
-
-SetFileName=DirDateTestFile.txt
-CheckCode=0
-
-[DIR_Date_1ai]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80	
-WriteValue1=21
-WriteValue2=00
-
-[DIR_Date_1aii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88	
-WriteValue1=21
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 1980
-
-[DIR_Date_1bi]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=3F
-WriteValue2=00
-
-[DIR_Date_1bii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=3F
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 31 01 1980
-
-[DIR_Date_1ci]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=20
-WriteValue2=00
-
-[DIR_Date_1cii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=20
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 0000
-
-[DIR_Date_2ai]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=21
-WriteValue2=00
-
-[DIR_Date_2aii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=21
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 1980
-
-[DIR_Date_2bi]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=81
-WriteValue2=01
-
-[DIR_Date_2bii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=81
-WriteValue2=01
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 12 1980
-
-[DIR_Date_2ci]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=01
-WriteValue2=00
-
-[DIR_Date_2cii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=01
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 0000
-
-[DIR_Date_2di]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=A1
-WriteValue2=01
-
-[DIR_Date_2dii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=A1
-WriteValue2=01
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 0000
-
-[DIR_Date_3ai]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=21
-WriteValue2=00
-
-[DIR_Date_3aii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88	
-WriteValue1=21
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 1980
-
-[DIR_Date_3bi]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=21
-WriteValue2=FE
-
-[DIR_Date_3bii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=21
-WriteValue2=FE
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 2107
-
-[DIR_Date_checknegative]
-
-FileName=DirDateTestFile.txt
-ReadAction=GetModTime
-Date= 01 01 1980
-
-[DIR_Date_checkpositive]
-
-FileName=DirDateTestFile.txt
-ReadAction=GetModTime
-Date= 01 01 1980
-
-
-[DIR_Time]
-FormatType=Full
-
-SetFileName=DirTimeTestFile.txt
-CheckCode=0
-
-[DIR_Time_1ai]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=00
-
-[DIR_Time_1aii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86	
-WriteValue1=00
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_1bi]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=1D
-WriteValue2=00
-
-[DIR_Time_1bii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=1D
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000058
-
-[DIR_Time_1ci]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78
-WriteValue1=1E
-WriteValue2=00
-
-[DIR_Time_1cii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=1E
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_2ai]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=00
-
-[DIR_Time_2aii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=00
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_2bi]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=60
-WriteValue2=07
-
-[DIR_Time_2bii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=60
-WriteValue2=07
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=005900
-
-[DIR_Time_2ci]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=80
-WriteValue2=07
-
-[DIR_Time_2cii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=80
-WriteValue2=07
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_3ai]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=00
-
-[DIR_Time_3aii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=00
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_3bi]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=B8
-
-[DIR_Time_3bii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=00
-WriteValue2=B8
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=230000
-
-[DIR_Time_3ci]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=C0
-
-[DIR_Time_3cii]
-
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=00
-WriteValue2=C0
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_checknegative]
-
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-ShouldPass=-1
-
-[DIR_Time_checkpositive]
-
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-ShouldPass=0
-
-[LDIR_1]
-FormatType=Full
-
-SetFileName=ThisFileShouldTakeUpThreeLongEnts.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-Mask=40
-MaskReturn=1
-NumberOfBytes=1
-
-[LDIR_2a]
-FormatType=Full
-
-SetFileName=ThisFileIsTwoLongEnts.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1
-CorrectResult1=42
-
-[LDIR_2ai]
-
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=32
-NumberOfBytes=1
-CorrectResult1=1
-
-[LDIR_2b]
-FormatType=Full
-
-SetFileName=ThisFileIsTwoLongEnts.txt
-CheckCode=0
-Action=DeleteFile
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1
-CorrectResult1=E5
-
-[LDIR_2bi]
-
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=32
-NumberOfBytes=1
-CorrectResult1=E5
-
-[LDIR_3]
-FormatType=Full
-
-SetFileName=ThisFileShouldAndDoesTakeUpFiveLongDirectoryEntries.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1
-CorrectResult1=45
-
-[LDIR_3i]
-
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=128
-NumberOfBytes=1
-CorrectResult1=1
-
-[LDIR_4]
-FormatType=Full
-
-SetFileName=ReadTestFile.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=11
-NumberOfBytes=1
-CorrectResult1=F
-
-[LDIR_5]
-FormatType=Full
-
-SetFileName=ReadTestFile.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=26
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-
-[LDIR_5i]
-
-ClusterNumber=2
-Entry=1
-WritePosition=0
-PositionInEntry=26
-NumberOfBytes=2
-WriteValue1=2
-WriteValue2=0
-FileName=ReadTestFile.txt
-ReadAction=OpenFile
-ReadCheckCode=-20
-
-[LDIR_6i]
-
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1
-CorrectResult1=E5
-
-[LDIR_6ii]
-
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=32
-NumberOfBytes=1
-CorrectResult1=E5
-
-[HighFourRes_a]
-FormatType=Full
-
-NumberOfBytes=4
-WritePosition=4004	
-FATEntryWritePosition=FATEntry1	
-WriteValue1=ff
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=ff
-ReadPosition=4004	
-FATEntryReadPosition=FATEntry1
-CorrectResult1=ff
-CorrectResult2=ff
-CorrectResult3=ff
-CorrectResult4=0f
-
-[HighFourRes_b]
-FormatType=Quick
-
-NumberOfBytes=4
-ReadPosition=4004	
-FATEntryReadPosition=FATEntry1
-CorrectResult1=ff
-CorrectResult2=ff
-CorrectResult3=ff
-CorrectResult4=0f
-
-[FillDisk]
-FormatType=Full
-
-
-[ClusterBound_1]
-
-ClusterAction=WriteToFile
-
-[ClusterBound_2]
-
-ClusterAction=CreateFiles
-
-[RemoveMedia]
-
-FormatType=Full
-CheckCode=0
-PassRegardless=N
\ No newline at end of file
--- a/baseapitest/basesvs/conformance/f32/fat32/testdata/winscw/f32-fat32-conformance.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1186 +0,0 @@
-[Common]
-DriveLetter=X
-SetDebug=0
-
-[Larger512]
-FormatType=Full
-
-
-[BadMedia]
-FormatType=Full
-ReadPosition=11
-NumberOfBytes=2
-WritePosition=11
-WriteValue1=1
-WriteValue2=0
-CheckCode=-20
-PassRegardless=N
-CorrectVerdict=Fail
-
-
-[CorruptFatTable_4i]
-FormatType=Full
-SetFileName=FatCorrupt.txt
-Action=SetFileSize
-CheckCode=0
-
-[CorruptFatTable_4ii]
-SetFileName=FatCorrupt2.txt
-Action=SetFileSize
-CheckCode=0
-WritePosition=4018
-NumberOfBytes=1	
-WriteValue1=4
-
-[CorruptFatTable_4iii]
-CheckCode=2
-PassRegardless=N
-
-[CorruptFatTable_3i]
-FormatType=Full
-SetFileName=FatCorrupt.txt
-Action=SetFileSize
-CheckCode=0
-
-[CorruptFatTable_3ii]
-WritePosition=4010
-NumberOfBytes=8	
-WriteValue1=ff
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=0f
-WriteValue5=0
-WriteValue6=0
-WriteValue7=0
-WriteValue8=0
-CheckCode=4
-PassRegardless=N
-
-[CorruptFatTable_2i]
-FormatType=Full
-NumberOfBytes=4
-WritePosition=4048	
-WriteValue1=18
-WriteValue2=0
-WriteValue3=0
-WriteValue4=0
-CorrectVerdict=Fail
-
-[CorruptFatTable_2ii]
-NumberOfBytes=4
-WritePosition=40D0	
-WriteValue1=22
-WriteValue2=0
-WriteValue3=0
-WriteValue4=0
-
-[CorruptFatTable_2iii]
-NumberOfBytes=4
-WritePosition=4138	
-WriteValue1=2
-WriteValue2=0
-WriteValue3=0
-WriteValue4=0
-CheckCode=3
-PassRegardless=Y
-
-[CorruptFatTable_1i]
-FormatType=Full
-SetFileName=FatCorrupt.txt
-Action=SetFileSize
-CheckCode=0
-
-[CorruptFatTable_1ii]
-WritePosition=400C
-NumberOfBytes=4	
-WriteValue1=0
-WriteValue2=0
-WriteValue3=0
-WriteValue4=0
-CheckCode=1
-PassRegardless=N
-
-[BPB_FATSz32]
-FormatType=Full
-Calculation=ComputeFatSize
-
-[Bit_CInShutBitMask]
-FormatType=Quick
-ReadPosition=4000
-Mask=4000000
-MaskReturn=1
-NumberOfBytes=4
-
-[Bit_CHrdErrBitMask]
-FormatType=Quick
-ReadPosition=4004
-Mask=8000000
-MaskReturn=1
-NumberOfBytes=4
-
-[BPB_ExtFlags_1]
-FormatType=Full
-ReadPosition=29
-Mask=0
-NumberOfBytes=1
-
-
-[BPB_ExtFlags_4]
-FormatType=Quick
-ReadPosition=29
-Mask=70
-MaskReturn=0
-NumberOfBytes=1
-
-[BPB_ExtFlags_6]
-FormatType=Quick
-ReadPosition=28
-Mask=FF
-MaskReturn=0
-NumberOfBytes=1
-
-[BPB_FSVer]
-FormatType=Quick
-ReadPosition=2A
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-WritePosition=2A	
-WriteValue1=1
-WriteValue2=0
-CorrectVerdict=Fail
-
-[BPB_FSVer_3]
-FormatType=Quick
-ReadPosition=2A
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-WritePosition=2A	
-WriteValue1=0
-WriteValue2=1
-CorrectVerdict=Fail
-
-[BPB_FSVer_4]
-FormatType=Full
-NumberOfBytes=2
-WritePosition=2B	
-WriteValue1=0
-WriteValue2=0
-CorrectVerdict=Pass
-
-[BPB_RootClus_1]
-FormatType=Full
-ReadPosition=2C
-NumberOfBytes=4
-CorrectResult1=2
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-
-[BPB_RootClus_2]
-FormatType=Quick
-ReadPosition=2C
-NumberOfBytes=4
-CorrectResult1=3
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-WritePosition=4008	
-WriteValue1=f7
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=0f
-
-[BPB_FSInfo]
-FormatType=Full
-ReadPosition=30
-NumberOfBytes=2
-CorrectResult1=1
-CorrectResult2=0
-
-[BPB_BkBootSec]
-FormatType=Full
-ReadPosition=32
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-
-[BPB_BkBootSec_i]
-FormatType=Full
-ReadPosition=C03
-NumberOfBytes=5
-CorrectResult1=0
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-CorrectResult5=0
-
-[BPB_Reserved]
-FormatType=Full
-ReadPosition=34
-NumberOfBytes=C
-CorrectResult1=0
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-CorrectResult5=0
-CorrectResult6=0
-CorrectResult7=0
-CorrectResult8=0
-CorrectResult9=0
-CorrectResult10=0
-CorrectResult11=0
-CorrectResult12=0
-
-[BPB_Reserved_2]
-WritePosition=34
-NumberOfBytes=C
-WriteValue1=1
-WriteValue2=1
-WriteValue3=1
-WriteValue4=1
-WriteValue5=1
-WriteValue6=1
-WriteValue7=1
-WriteValue8=1
-WriteValue9=1
-WriteValue10=1
-WriteValue11=1
-WriteValue12=1
-CheckCode=-5
-PassRegardless=Y
-
-[BPB_RootEntCnt_2]
-FormatType=Quick
-ReadPosition=11
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-
-[BPB_RootEntCnt_3]
-ReadPosition=11
-NumberOfBytes=2
-WritePosition=11
-WriteValue1=1
-WriteValue2=0
-CheckCode=-20
-PassRegardless=N
-
-[BPB_RootEntCnt_3]
-ReadPosition=11
-NumberOfBytes=2
-WritePosition=11
-WriteValue1=1
-WriteValue2=0
-CheckCode=-5
-PassRegardless=N
-
-[FAT32Cluster_1]
-FormatType=Full
-Calculation=ClusterCount
-
-[FAT32Cluster_2a]
-FormatType=Quick
-ReadPosition=4010
-NumberOfBytes=4
-CorrectResult1=f7
-CorrectResult2=ff
-CorrectResult3=ff
-CorrectResult4=0f
-WritePosition=4010	
-WriteValue1=f7
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=0f
-Action=SetFileSize
-CheckCode=0
-Attributes=Normal
-
-[FAT32Cluster_2b]
-ReadPosition=400C
-NumberOfBytes=10
-CorrectResult1=05
-CorrectResult2=00
-CorrectResult3=00
-CorrectResult4=00
-CorrectResult5=f7
-CorrectResult6=ff
-CorrectResult7=ff
-CorrectResult8=0f
-CorrectResult9=06
-CorrectResult10=00
-CorrectResult11=00
-CorrectResult12=00
-CorrectResult13=ff
-CorrectResult14=ff
-CorrectResult15=ff
-CorrectResult16=0f
-
-
-[FSINFOSTRUC_1]
-FormatType=Full
-ReadPosition=200
-NumberOfBytes=4
-CorrectResult1=52
-CorrectResult2=52
-CorrectResult3=61
-CorrectResult4=41
-
-[FSINFOSTRUC_2]
-ReadPosition=3FC
-NumberOfBytes=4
-CorrectResult1=00
-CorrectResult2=00
-CorrectResult3=55
-CorrectResult4=AA
-
-[FSINFOSTRUC_3]
-ReadPosition=3E4
-NumberOfBytes=4
-CorrectResult1=72
-CorrectResult2=72
-CorrectResult3=41
-CorrectResult4=61
-
-[FSINFOSTRUC_4b]
-ReadPosition=3E8
-NumberOfBytes=4
-CorrectResult1=F9
-CorrectResult2=FD
-CorrectResult3=3
-CorrectResult4=0
-Action=SetFileSize
-CheckCode=0
-Attributes=Normal
-
-[FSINFOSTRUC_4c]
-FormatType=Quick
-WritePosition=3E8
-NumberOfBytes=4
-WriteValue1=FF
-WriteValue2=FF
-WriteValue3=FF
-WriteValue4=FF
-CheckCode=0
-PassRegardless=N
-
-[FSINFOSTRUC_4d]
-FormatType=Full
-Calculation=SetGreater
-CheckCode=-20
-PassRegardless=Y
-
-[FSINFOSTRUC_5a]
-FormatType=Quick
-ReadPosition=3EC
-CorrectResult1=2
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-
-[FSINFOSTRUC_5b]
-FormatType=Quick
-ReadPosition=3EC
-NumberOfBytes=4
-WritePosition=400C	
-WriteValue1=f7
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=0f
-CorrectResult1=4
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-
-[FSINFOSTRUC_5c]
-FormatType=Full
-NumberOfBytes=4
-ReadPosition=3EC
-ReadLength=4
-CorrectResult1=6
-CorrectResult2=0
-CorrectResult3=0
-CorrectResult4=0
-Action=SetFileSize
-CheckCode=0
-Attributes=Normal
-
-[DIR_Name_1]
-FormatType=Full
-Action=DeleteFile
-CheckCode=0
-Attributes=Normal
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=64
-NumberOfBytes=1
-CorrectResult1=E5
-
-[DIR_Name_2]
-ReadPosition=0
-ClusterNumber=3
-Entry=1
-PositionInEntry=64
-NumberOfBytes=1
-CorrectResult1=0
-
-[DIR_Name_3]
-FormatType=Full
-SetFileName=Tst06.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=6
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst06.txt
-ReadCheckCode=-20
-
-[DIR_Name_5_check]
-FormatType=Full
-CheckCode=-5
-PassRegardless=Y
-
-[DIR_Name_5i]
-FormatType=Full
-SetFileName=Tst22.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=22
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst22.txt
-ReadCheckCode=-20
-
-[DIR_Name_5ii]
-FormatType=Full
-SetFileName=Tst2A.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=2A
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst2A.txt
-ReadCheckCode=-20
-
-[DIR_Name_5iii]
-FormatType=Full
-SetFileName=Tst2B.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=2B
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst2B.txt
-ReadCheckCode=-20
-
-[DIR_Name_5iv]
-FormatType=Full
-SetFileName=Tst2C.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=2C
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst2C.txt
-ReadCheckCode=-20
-
-[DIR_Name_5v]
-FormatType=Full
-SetFileName=Tst2E.txt
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1	
-WriteValue1=2D
-CheckCode=0
-PassRegardless=Y
-ReadAction=OpenFile
-FileName=Tst2E.txt
-ReadCheckCode=-20
-
-
-[DIR_Attr_1]
-FormatType=Quick
-Action=Write
-OpenMode=ReadOnly
-CheckCode=-21
-Attributes=ReadOnly
-
-[DIR_Attr_2]
-FormatType=Quick
-Action=DirList
-OpenMode=ReadOnly
-CheckCode=-1
-Attributes=Hidden
-
-[DIR_Attr_3]
-FormatType=Quick
-Action=CheckAtt
-CheckCode=0
-Attributes=System
-
-[DIR_Attr_4]
-FormatType=Quick
-Action=CheckAtt
-CheckCode=-2
-Attributes=Dir
-
-[DIR_Attr_5]
-FormatType=Quick
-Action=MakeDirectory
-CheckCode=0
-Attributes=Dir
-SetFileName=DirCreate
-
-[DIR_Attr_6]
-FormatType=Quick
-Action=SetLabel
-CheckCode=0
-Attributes=Dir
-
-[DIR_Attr_7]
-FormatType=Quick
-Action=SetTwoLabels
-CheckCode=-28
-Attributes=Dir
-
-[DIRSPECIALENT_1]
-FormatType=Full
-Action=MakeTwoDirectory
-Attributes=Dir
-CheckCode=0
-
-[DIRSPECIALENT_1a]
-ReadPosition=0
-ClusterNumber=3
-Entry=1
-PositionInEntry=0
-NumberOfBytes=B
-CorrectResult1=2E
-CorrectResult2=20
-CorrectResult3=20
-CorrectResult4=20
-CorrectResult5=20
-CorrectResult6=20
-CorrectResult7=20
-CorrectResult8=20
-CorrectResult9=20
-CorrectResult10=20
-CorrectResult11=20
-
-[DIRSPECIALENT_1b]
-ReadPosition=0
-ClusterNumber=3
-Entry=1
-PositionInEntry=32
-NumberOfBytes=B
-CorrectResult1=2E
-CorrectResult2=2E
-CorrectResult3=20
-CorrectResult4=20
-CorrectResult5=20
-CorrectResult6=20
-CorrectResult7=20
-CorrectResult8=20
-CorrectResult9=20
-CorrectResult10=20
-CorrectResult11=20
-
-[DIRSPECIALENT_2a]
-FormatType=Quick
-SetFileName=.
-CheckCode=-28
-
-[DIRSPECIALENT_2b]
-FormatType=Quick
-SetFileName=..
-CheckCode=-28
-
-[DIR_Date]
-FormatType=Full
-SetFileName=DirDateTestFile.txt
-CheckCode=0
-
-[DIR_Date_1ai]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80	
-WriteValue1=21
-WriteValue2=00
-
-[DIR_Date_1aii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88	
-WriteValue1=21
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 1980
-
-[DIR_Date_1bi]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=3F
-WriteValue2=00
-
-[DIR_Date_1bii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=3F
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 31 01 1980
-
-[DIR_Date_1ci]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=20
-WriteValue2=00
-
-[DIR_Date_1cii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=20
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 0000
-
-[DIR_Date_2ai]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=21
-WriteValue2=00
-
-[DIR_Date_2aii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=21
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 1980
-
-[DIR_Date_2bi]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=81
-WriteValue2=01
-
-[DIR_Date_2bii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=81
-WriteValue2=01
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 12 1980
-
-[DIR_Date_2ci]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=01
-WriteValue2=00
-
-[DIR_Date_2cii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=01
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 0000
-
-[DIR_Date_2di]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=A1
-WriteValue2=01
-
-[DIR_Date_2dii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=A1
-WriteValue2=01
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 0000
-
-[DIR_Date_3ai]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=21
-WriteValue2=00
-
-[DIR_Date_3aii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88	
-WriteValue1=21
-WriteValue2=00
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 1980
-
-[DIR_Date_3bi]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=80		
-WriteValue1=21
-WriteValue2=FE
-
-[DIR_Date_3bii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=88		
-WriteValue1=21
-WriteValue2=FE
-FileName=DirDateTestFile.txt
-ReadAction=GetModDate
-Date= 01 01 2107
-
-[DIR_Date_checknegative]
-FileName=DirDateTestFile.txt
-ReadAction=GetModTime
-Date= 01 01 1980
-
-[DIR_Date_checkpositive]
-FileName=DirDateTestFile.txt
-ReadAction=GetModTime
-Date= 01 01 1980
-
-
-[DIR_Time]
-FormatType=Full
-SetFileName=DirTimeTestFile.txt
-CheckCode=0
-
-[DIR_Time_1ai]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=00
-
-[DIR_Time_1aii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86	
-WriteValue1=00
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_1bi]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=1D
-WriteValue2=00
-
-[DIR_Time_1bii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=1D
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000058
-
-[DIR_Time_1ci]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78
-WriteValue1=1E
-WriteValue2=00
-
-[DIR_Time_1cii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=1E
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_2ai]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=00
-
-[DIR_Time_2aii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=00
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_2bi]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=60
-WriteValue2=07
-
-[DIR_Time_2bii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=60
-WriteValue2=07
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=005900
-
-[DIR_Time_2ci]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=80
-WriteValue2=07
-
-[DIR_Time_2cii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=80
-WriteValue2=07
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_3ai]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=00
-
-[DIR_Time_3aii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=00
-WriteValue2=00
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_3bi]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=B8
-
-[DIR_Time_3bii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=00
-WriteValue2=B8
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=230000
-
-[DIR_Time_3ci]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=78	
-WriteValue1=00
-WriteValue2=C0
-
-[DIR_Time_3cii]
-NumberOfBytes=2
-WritePosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=86		
-WriteValue1=00
-WriteValue2=C0
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-Time=000000
-
-[DIR_Time_checknegative]
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-ShouldPass=-1
-
-[DIR_Time_checkpositive]
-FileName=DirTimeTestFile.txt
-ReadAction=GetModTime
-ShouldPass=0
-
-[LDIR_1]
-FormatType=Full
-SetFileName=ThisFileShouldTakeUpThreeLongEnts.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-Mask=40
-MaskReturn=1
-NumberOfBytes=1
-
-[LDIR_2a]
-FormatType=Full
-SetFileName=ThisFileIsTwoLongEnts.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1
-CorrectResult1=42
-
-[LDIR_2ai]
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=32
-NumberOfBytes=1
-CorrectResult1=1
-
-[LDIR_2b]
-FormatType=Full
-SetFileName=ThisFileIsTwoLongEnts.txt
-CheckCode=0
-Action=DeleteFile
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1
-CorrectResult1=E5
-
-[LDIR_2bi]
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=32
-NumberOfBytes=1
-CorrectResult1=E5
-
-[LDIR_3]
-FormatType=Full
-SetFileName=ThisFileShouldAndDoesTakeUpFiveLongDirectoryEntries.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1
-CorrectResult1=45
-
-[LDIR_3i]
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=128
-NumberOfBytes=1
-CorrectResult1=1
-
-[LDIR_4]
-FormatType=Full
-SetFileName=ReadTestFile.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=11
-NumberOfBytes=1
-CorrectResult1=F
-
-[LDIR_5]
-FormatType=Full
-SetFileName=ReadTestFile.txt
-CheckCode=0
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=26
-NumberOfBytes=2
-CorrectResult1=0
-CorrectResult2=0
-
-[LDIR_5i]
-ClusterNumber=2
-Entry=1
-WritePosition=0
-PositionInEntry=26
-NumberOfBytes=2
-WriteValue1=2
-WriteValue2=0
-FileName=ReadTestFile.txt
-ReadCheckCode=-20
-
-[LDIR_6i]
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=0
-NumberOfBytes=1
-CorrectResult1=E5
-
-[LDIR_6ii]
-ReadPosition=0
-ClusterNumber=2
-Entry=1
-PositionInEntry=32
-NumberOfBytes=1
-CorrectResult1=E5
-
-[HighFourRes_a]
-FormatType=Full
-NumberOfBytes=4
-WritePosition=4004	
-WriteValue1=ff
-WriteValue2=ff
-WriteValue3=ff
-WriteValue4=ff
-ReadPosition=4004	
-CorrectResult1=ff
-CorrectResult2=ff
-CorrectResult3=ff
-CorrectResult4=0f
-
-[HighFourRes_b]
-FormatType=Quick
-NumberOfBytes=4
-ReadPosition=4004	
-CorrectResult1=ff
-CorrectResult2=ff
-CorrectResult3=ff
-CorrectResult4=0f
-
-[FillDisk]
-FormatType=Full
-
-[ClusterBound_1]
-ClusterAction=WriteToFile
-
-[ClusterBound_2]
-ClusterAction=CreateFiles
-
-[RemoveMedia]
-FormatType=Full
-CheckCode=0
-PassRegardless=N
\ No newline at end of file
--- a/baseapitest/basesvs/group/basesvs.mrp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-component		basesvs
-source			\sf\os\kernelhwsrv\baseapitest\basesvs
-notes_source	\sf\os\kernelhwsrv\baseapitest\basesvs\group\release.txt
-ipr T
--- a/baseapitest/basesvs/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-#include "../testsuites/group/bld.inf"
-#include "../validation/f32/group/bld.inf"
-#include "../performance/f32/t_perf/group/bld.inf"
-#include "../FileSystemPlugins/group/bld.inf"
-#include "../prompt/group/bld.inf"
-#include "../conformance/f32/fat32/group/bld.inf"
-
-PRJ_TESTEXPORTS
-t_base.oby						/epoc32/rom/include/t_base.oby
-td_base.oby						/epoc32/rom/include/td_base.oby
-makesisfiles.bat				/epoc32/pkg/makesisfiles.bat
-
-../scripts/setup_t_base.script	z:/base/setup_t_base.script
-../scripts/t_base.script		z:/base/t_base.script
-../config/t_base.tcs			z:/base/t_base.tcs
-../config/t_base.tcs			/epoc32/pkg/t_base.tcs 
--- a/baseapitest/basesvs/group/makerom.bat	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-@rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-if "%1" == "" GOTO ERR
-buildrom -D_EABI=ARMV5 -DRVCT -DUSE_STRONG_CRYPTOGRAPHY %1 techview platsec t_base
-GOTO EXIT
-
-:ERR
-REM target parameter missing
-
-:EXIT
--- a/baseapitest/basesvs/group/makesisfiles.bat	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-@rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
-copy ..\release\armv5\urel\T_SfSrv.exe .
-copy ..\release\armv5\urel\t_prompt.exe .
-copy ..\release\armv5\urel\t_fat32server.exe .
-copy ..\release\armv5\urel\t_perf.exe .
-
-copy ..\release\armv5\urel\T_TESTFSY1.fsy
-copy ..\release\armv5\urel\T_TestFXT.fxt
-
-call makesis t_sfsrv.pkg t_sfsrv.sis
-call makesis t_perf.pkg t_perf.sis
-call makesis t_fat32.pkg t_fat32.sis
-call makesis dualdrive.pkg dualdrive.sis
-
-call signsis -s t_sfsrv.sis t_sfsrv.sis zeus.cer SymbianACS.key caforstat
-call signsis -s t_perf.sis t_perf.sis zeus.cer SymbianACS.key caforstat
-call signsis -s t_fat32.sis t_fat32.sis zeus.cer SymbianACS.key caforstat
-call signsis -s dualdrive.sis dualdrive.sis zeus.cer SymbianACS.key caforstat
\ No newline at end of file
--- a/baseapitest/basesvs/group/maketdrom.bat	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-@rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-if "%1" == "" GOTO ERR
-buildrom -D_STARTUPMODE2 -D_EABI=ARMV5 -DRVCT -DUSE_STRONG_CRYPTOGRAPHY %1 techview_statapi platsec td_base
-GOTO EXIT
-
-:ERR
-REM target parameter missing
-
-:EXIT
--- a/baseapitest/basesvs/group/readme.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-Brief description of the helper/setup files
-
-makerom.bat		Batch file to create a rom rather than doing it manually from
-			a commandline
-
-makesisfiles.bat 	Batch file copied to \epoc32\pkg\makesisfiles.bat in order to
-			make it easy to create a sis file with \epoc32\pkg as the
-			current directory
-
-testdriversetup.bat	Uses testdriversetup.pl to correctly install testdriver in the
-			system
--- a/baseapitest/basesvs/group/release.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-NOTESRC_RELEASER
-Nokia Corporation
-
-NOTESRC_RELEASE_REASON
-Base SVS
--- a/baseapitest/basesvs/group/t_base.oby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-#if (!defined __T_BASE_OBY__)
-#define __T_BASE_OBY__
-
-#include <t_sfsrv.iby>
-#include<t_base_f32_fat32.iby>
-#include <t_base_f32_perf.iby>
-
-data=EPOCROOT##epoc32\data\z\base\setup_t_base.script	base\setup_t_base.script
-data=EPOCROOT##epoc32\data\z\base\t_base.script			base\t_base.script
-data=EPOCROOT##epoc32\data\z\base\t_base.tcs			base\t_base.tcs
-
-#endif
--- a/baseapitest/basesvs/group/td_base.oby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-#if (!defined __TD_BASE_OBY__)
-#define __TD_BASE_OBY__
-
-#include <td_sfsrv.iby>
-
-#endif
--- a/baseapitest/basesvs/group/testdriversetup.bat	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-@rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-testdriversetup.pl
-
--- a/baseapitest/basesvs/group/testdriversetup.pl	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-#
-# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-use Cwd;
-
-my $theEpocRoot=$ENV{EPOCROOT};
-my $epoc32Location="$theEpocRoot.\\epoc32";
-
-my $currentDirectory=cwd;
-$currentDirectory =~ s/Group//i;
-$currentDirectory =~ s/\//\\/g;
-
-my $currentDrive = substr($currentDirectory,0,2);
-
-my	$cmd="TestDriver config";
-my	$suite="file:/$currentDrive$epoc32Location\\testdriver\\testproduct\\base.driver#base";
-$suite =~ s.\\./.g;
-$suite =~ s\/./\/\g;
-
-$cmd .= " --bldclean OFF";
-$cmd .= " --bldmake OFF";
-$cmd .= " -e $currentDrive$theEpocRoot";
-$cmd .= " -x $currentDrive$epoc32Location\\testdriver\\testproduct";
-$cmd .= " --repos $currentDrive$epoc32Location\\testdriver\\Repository";
-$cmd .= " -c $currentDrive$epoc32Location\\testdriver\\Results";
-$cmd .= " -i $currentDirectory";
-$cmd .= " -s $suite";
-$cmd .= " --source $currentDirectory";
-$cmd .= " --tp $currentDirectory";
-$cmd .= " --platsec  ON";
-$cmd .= " --testexec ON";
-$cmd .= " --commdb overwrite";
-$cmd .= " --testtimelimit 600000";
-system("$cmd");
--- a/baseapitest/basesvs/performance/f32/t_perf/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-PRJ_TESTEXPORTS
-
-// to pkg
-../pkg/t_perf.pkg						/epoc32/pkg/t_perf.pkg
-../pkg/tperf.bat						/epoc32/pkg/tperf.bat
-
-../scripts/pbase-f32-rfs-performance-small.script  		z:/base/performance/f32/pbase-f32-rfs-performance-small.script
-../scripts/pbase-f32-rfs-performance-medium.script 		z:/base/performance/f32/pbase-f32-rfs-performance-medium.script
-../scripts/pbase-f32-rfs-performance-large.script		z:/base/performance/f32/pbase-f32-rfs-performance-large.script
-../scripts/pbase-f32-rfile-performance-small.script		z:/base/performance/f32/pbase-f32-rfile-performance-small.script
-../scripts/pbase-f32-rfile-performance-medium.script		z:/base/performance/f32/pbase-f32-rfile-performance-medium.script
-../scripts/pbase-f32-rfile-performance-large.script  		z:/base/performance/f32/pbase-f32-rfile-performance-large.script
-
-../testdata/pbase-f32-rfile-performance-small.ini		z:/base/performance/f32/pbase-f32-rfile-performance-small.ini
-../testdata/pbase-f32-rfile-performance-medium.ini		z:/base/performance/f32/pbase-f32-rfile-performance-medium.ini
-../testdata/pbase-f32-rfile-performance-large.ini		z:/base/performance/f32/pbase-f32-rfile-performance-large.ini
-../testdata/pbase-f32-rfile-performance-utils.ini		z:/base/performance/f32/pbase-f32-rfile-performance-utils.ini
-../testdata/pbase-f32-rfs-performance-small.ini			z:/base/performance/f32/pbase-f32-rfs-performance-small.ini
-../testdata/pbase-f32-rfs-performance-medium.ini		z:/base/performance/f32/pbase-f32-rfs-performance-medium.ini
-../testdata/pbase-f32-rfs-performance-large.ini			z:/base/performance/f32/pbase-f32-rfs-performance-large.ini
-
-../testdata/winscw/base_perf_f32_env.ini			z:/base/performance/f32/base_perf_f32_env.ini
-../testdata/winscw/base_perf_f32_env.ini			z:/base/performance/f32/winscw/base_perf_f32_env.ini
-../testdata/armv5/base_perf_f32_env.ini				z:/base/performance/f32/armv5/base_perf_f32_env.ini
-
-//pkg
-
-../scripts/pbase-f32-rfs-performance-small.script  		/epoc32/pkg/performance/f32/pbase-f32-rfs-performance-small.script
-../scripts/pbase-f32-rfs-performance-medium.script 		/epoc32/pkg/performance/f32/pbase-f32-rfs-performance-medium.script
-../scripts/pbase-f32-rfs-performance-large.script		/epoc32/pkg/performance/f32/pbase-f32-rfs-performance-large.script
-../scripts/pbase-f32-rfile-performance-small.script		/epoc32/pkg/performance/f32/pbase-f32-rfile-performance-small.script
-../scripts/pbase-f32-rfile-performance-medium.script		/epoc32/pkg/performance/f32/pbase-f32-rfile-performance-medium.script
-../scripts/pbase-f32-rfile-performance-large.script  		/epoc32/pkg/performance/f32/pbase-f32-rfile-performance-large.script
-
-../testdata/pbase-f32-rfile-performance-small.ini		/epoc32/pkg/performance/f32/pbase-f32-rfile-performance-small.ini
-../testdata/pbase-f32-rfile-performance-medium.ini		/epoc32/pkg/performance/f32/pbase-f32-rfile-performance-medium.ini
-../testdata/pbase-f32-rfile-performance-large.ini		/epoc32/pkg/performance/f32/pbase-f32-rfile-performance-large.ini
-../testdata/pbase-f32-rfile-performance-utils.ini		/epoc32/pkg/performance/f32/pbase-f32-rfile-performance-utils.ini
-../testdata/pbase-f32-rfs-performance-small.ini			/epoc32/pkg/performance/f32/pbase-f32-rfs-performance-small.ini
-../testdata/pbase-f32-rfs-performance-medium.ini		/epoc32/pkg/performance/f32/pbase-f32-rfs-performance-medium.ini
-../testdata/pbase-f32-rfs-performance-large.ini			/epoc32/pkg/performance/f32/pbase-f32-rfs-performance-large.ini
-
-//SIS file is to run on an armv5 platform only.
-../testdata/armv5/base_perf_f32_env.ini			/epoc32/pkg/performance/f32/base_perf_f32_env.ini
-
-
-./t_base_f32_perf.iby								/epoc32/rom/include/t_base_f32_perf.iby
-
-PRJ_TESTMMPFILES
-t_perf.mmp
--- a/baseapitest/basesvs/performance/f32/t_perf/group/t_base_f32_perf.iby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-#ifndef __T_BASE_F32_PERF_IBY__
-#define __T_BASE_F32_PERF_IBY__
-
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfs-performance-small.script  	base\performance\f32\pbase-f32-rfs-performance-small.script
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfs-performance-medium.script 	base\performance\f32\pbase-f32-rfs-performance-medium.script
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfs-performance-large.script		base\performance\f32\pbase-f32-rfs-performance-large.script
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfile-performance-small.script	base\performance\f32\pbase-f32-rfile-performance-small.script
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfile-performance-medium.script	base\performance\f32\pbase-f32-rfile-performance-medium.script
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfile-performance-large.script  	base\performance\f32\pbase-f32-rfile-performance-large.script
-
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfile-performance-small.ini		base\performance\f32\pbase-f32-rfile-performance-small.ini
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfile-performance-medium.ini		base\performance\f32\pbase-f32-rfile-performance-medium.ini
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfile-performance-large.ini		base\performance\f32\pbase-f32-rfile-performance-large.ini
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfile-performance-utils.ini		base\performance\f32\pbase-f32-rfile-performance-utils.ini
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfs-performance-small.ini		base\performance\f32\pbase-f32-rfs-performance-small.ini
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfs-performance-medium.ini		base\performance\f32\pbase-f32-rfs-performance-medium.ini
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\pbase-f32-rfs-performance-large.ini		base\performance\f32\pbase-f32-rfs-performance-large.ini
-
-data=EPOCROOT##epoc32\data\Z\base\performance\f32\armv5\base_perf_f32_env.ini				base\performance\f32\base_perf_f32_env.ini
-
-#endif
--- a/baseapitest/basesvs/performance/f32/t_perf/group/t_perf.mmp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-TARGET			t_perf.exe		
-TARGETTYPE		exe
-UID				0x1000007A  0x200041C7		
-VENDORID			0x70000001          
-
-CAPABILITY  ALL -TCB
-
-SOURCEPATH		../src
-
-SOURCE			../../../../common/src/TestStepV2.cpp
-
-
-SOURCE		BaseStep.cpp
-SOURCE		EntryStep.cpp
-SOURCE		ReadFileStep.cpp
-SOURCE		SeekFileStep.cpp	
-SOURCE		F32PerformanceServer.cpp	
-SOURCE		WriteFileStep.cpp	
-SOURCE      UtilsSetupStep.cpp
-SOURCE      UtilsCleanupStep.cpp
-SOURCE   	UtilsStep.cpp
-
-
-
-USERINCLUDE		../inc
-USERINCLUDE		../group
-USERINCLUDE		../../../../common/inc
-
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY			euser.lib
-LIBRARY			efsrv.lib
-LIBRARY			bafl.lib 
-LIBRARY			testexecuteutils.lib
-LIBRARY			testexecutelogclient.lib
-LIBRARY			iniparser.lib
-LIBRARY			hal.lib
-
-SMPSAFE
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/BaseStep.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef __BASE_STEP_H__
-#define __BASE_STEP_H__
-
-// User includes
-#include "TestStepV2.h"
-
-//Epoc includes
-#include <f32file.h>
-#include <e32cmn.h>
-#include <e32std.h>
-
-class CT_F32BaseStep : public CTestStepV2
-/**
-@test
-@publishedPartner
-*/
-	{
-public:
-	~CT_F32BaseStep();
-	CT_F32BaseStep(TBool aOpenFiles);
-	TVerdict	doTestStepL();
-	TVerdict	doTestStepPreambleL();
-	TVerdict    doTestStepPostambleL();
-
-protected:
-	virtual TInt 		ThreadFuncL(RFs& aSession)=0;
-	virtual void 		ThreadPostFuncL(RFs& aSession);
-	virtual TInt 		ThreadPreFuncL(RFs& aSession);
-	virtual void 		PrintResults();
-
-private:
-	inline static TInt 	ThreadFunction(TAny* aPtr);
-
-	void				SetUpL();
-	TBool				SetOwnerType(const TDesC& aName, TOwnerType& aOwnerType);
-	TBool				SetThreadPriority(const TDesC& aName, TThreadPriority& aThreadPriority);
-	void				SetFilePathArrayL();
-	void				CreateCsvFileL();
-	TInt				AppendDataL(RFile& aFile, TDesC& aString);
-
-protected:
-	RArray<RFile>				iFileArray;
-	RArray<TFileName>			iFilePathArray;
-	TInt						iFuncCalls;
-	TInt						iNumOfFiles;
-	TInt						iDirTreeDepth;
-	TInt						iFileSize;
-	TPtrC						iDirBaseName;
-	TPtrC						iFileBaseName;
-	TPtrC						iDirSubName;
-	TInt						iBlockSize;
-	TTimeIntervalMicroSeconds	iTotalTime;
-
-private:
-	TPtrC						iCsvFileName;
-	TPtrC						iPtr;
-	TPtrC						iOperation;
-	TBool						iOpenFiles;
-};
-
-#include "BaseStep.inl"
-#endif /* __BASE_STEP_H__ */
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/BaseStep.inl	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-
-#ifndef __BASE_STEP_INL__
-#define __BASE_STEP_INL__
-
-TInt CT_F32BaseStep::ThreadFunction(TAny* aPtr)
-	{
-	CT_F32BaseStep*	mythread=static_cast<CT_F32BaseStep*>(aPtr);
-	CTrapCleanup*	cleanup=CTrapCleanup::New();
-	RFs				session;
-
-	TRAPD(result, mythread->ThreadPreFuncL(session));
-	if(result==KErrNone )
-		{
-		TRAPD(result, mythread->ThreadFuncL(session));
-		mythread->ThreadPostFuncL(session);
-		}
-		
-	delete cleanup;
-	cleanup=NULL;
-	return result;
-	}
-
-
-
-#endif /* __BASE_STEP_INL__ */
-
-
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/EntryStep.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-
-#ifndef __ENTRY_STEP_H__
-#define __ENTRY_STEP_H__
-
-//User includes
-#include "BaseStep.h"
-
-/*@{*/
-//Literals used
-_LIT(KT_EntryStep,	"EntryStep");
-/*@}*/
-
-class CT_EntryStep: public CT_F32BaseStep
-/**
-@test
-@publishedPartner
-*/
-	{
-public:
-	CT_EntryStep();
-	~CT_EntryStep();
-
-protected:
- 	TVerdict 		doTestStepPreambleL();
-	virtual TInt	ThreadFuncL(RFs& aSession);
-	};
-
-#endif /* __ENTRY_STEP_H__ */
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/F32PerformanceServer.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef __F32_PERFORMANCE_SERVER_H__
-#define __F32_PERFORMANCE_SERVER_H__
-
-
-//	Epoc includes
-#include <test/testexecuteserverbase.h>
-
-
-/*@{*/
-//Literals used
-_LIT(KT_PerformServ,	"t_perf");
-/*@}*/
-
-// Implements the  which creates the  test steps 
-class CT_F32PerformanceServer : public CTestServer 
-/**
-@test
-@publishedPartner
-*/
-	{
-public:
-	// Creates an object of type CT_F32PerformanceServer 
-	static CT_F32PerformanceServer*  NewL();
-	~CT_F32PerformanceServer();
-	
-protected:
-
-	CT_F32PerformanceServer();
-
-	//
-	// Creates the test steps based on the test step name 
-	// read from the script file
-	//
-	virtual CTestStep*	CreateTestStep(const TDesC& aStepName);
-
-	};
-
-
-
-#endif /* __F32_PERFORMANCE_SERVER_H__ */
-
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/ReadFileStep.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-
-#ifndef __READ_FILE_STEP_H__
-#define __READ_FILE_STEP_H__
-
-//User includes
-#include "SeekFileStep.h"
-
-
-/*@{*/
-//Literals used
-_LIT(KT_ReadFileStep,	"ReadFileStep");
-/*@}*/
-
-class CT_ReadFileStep:  public  CT_SeekFileStep
-/**
-@test
-@publishedPartner
-*/
-	{
-public:
-	CT_ReadFileStep();
-	~CT_ReadFileStep();
-	TVerdict		doTestStepPreambleL();
-
-protected:
-	virtual TInt	ThreadFuncL(RFs& aSession);
-
-protected:
-	TBool	iSeek;
-	};
-
-#endif /* __T_PERF_READ_FILE_STEP_H__ */
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/SeekFileStep.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef __SEEK_FILE_STEP_H__
-#define __SEEK_FILE_STEP_H__
-
-
-
-
-//User includes
-#include "BaseStep.h"
-
-/*@{*/
-//Literals used
-_LIT(KT_SeekFileStep,	"SeekFileStep");
-/*@}*/
-
-
-class CT_SeekFileStep:public CT_F32BaseStep
-/**
-@test
-@publishedPartner
-*/
-	{
-public:
-	CT_SeekFileStep();
-	~CT_SeekFileStep();
-	TVerdict	doTestStepPreambleL();
-
-protected:
-	virtual TInt	ThreadFuncL(RFs& aSession);
-
-private:
-	void			SetSeekMode(TDesC& aSeekMode);
-
-protected:
-	TSeek	iSeekMode;
-	};
-
-
-#endif /* __SEEK_FILE_STEP_H__ */
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/UtilsCleanupStep.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef  __T_PERF_UTILS_CLEANUP_STEP_H__
-#define  __T_PERF_UTILS_CLEANUP_STEP_H__
-
-
-//user includes
-#include "UtilsStep.h"
-
-/*@{*/
-// Literals Used 
-_LIT(KT_CleanupStep,	"CleanupStep");
-/*@}*/
-
-
-class  CT_CleanupStep  : public CT_UtilsStep
-/**
-@test
-@publishedPartner
-*/
-	{	
-public:
-	~CT_CleanupStep();
-	CT_CleanupStep();
-	TVerdict	doTestStepL();
-	};
-
-
-#endif /*  __T_PERF_UTILS_CLEANUP_STEP_H__ */
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/UtilsSetupStep.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef  __T_PERF_UTILS_SETUP_STEP_H__
-#define __T_PERF_UTILS_SETUP_STEP_H__
-
-
-
-//user includes
-#include "UtilsStep.h"
-
-/*@{*/
-//Literals used
-_LIT(KT_SetupStep,	"SetupStep" );
-/*@}*/
-
-
-class  CT_SetupStep  : public CT_UtilsStep
-/**
-@test
-@publishedPartner
-*/
-	{
-public:
-	~CT_SetupStep();
-	CT_SetupStep();
-	TVerdict	doTestStepL();
-	TVerdict	doTestStepPreambleL();
-
-private:
-	void	CreateDirTreeL();
-	void	CreateFileL(TDesC& aPath);
-	void	CreateFileDataL(RFile& aFile);
-
-
-private:
-	TInt	iFileSize;
-	TInt	iDirTreeDepth;
-	TInt	iNumOfFiles;
-	TPtrC	iFileBaseName;
-	TPtrC	iDirSubName;
-	TPtrC	iFileData;
-
-	};
-
-
-#endif /* __T_PERF_UTILS_SETUP_STEP_H__ */
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/UtilsStep.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef  __T_PERF_UTILS_STEP_H__
-#define __T_PERF_UTILS_STEP_H__
-
-
-//Epoc includes
-#include <f32file.h>
-#include <e32cmn.h>
-#include<e32std.h>
-
-// User includes
-#include "TestStepV2.h"
-
-
-class  CT_UtilsStep  : public CTestStepV2
-/**
-@test
-@publishedPartner
-*/
-	{
-public:
-	~CT_UtilsStep();
-	CT_UtilsStep();
-	TVerdict	doTestStepPreambleL();
-
-protected:
-	void	DoFormatDriveL();
-	TInt	RemoveDirTreeL();
-
-protected:
-	TBool	iFormatDrive;
-	TPtrC	iDirBaseName;
-	RFs		iFsSession;
-	};
-
-
-#endif /* __T_PERF_UTILS_STEP_H__ */
--- a/baseapitest/basesvs/performance/f32/t_perf/inc/WriteFileStep.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef __WRITE_FILE_STEP_H__
-#define __WRITE_FILE_STEP_H__
-
-//User includes
-#include "SeekFileStep.h"
-
-
-/*@{*/
-//Literals used
-_LIT(KT_WriteFileStep,	"WriteFileStep");
-/*@}*/
-
-class CT_WriteFileStep : public CT_SeekFileStep
-/**
-@test
-@publishedPartner
-*/
-	{
-public:
-	CT_WriteFileStep ();
-	~CT_WriteFileStep ();
-	TVerdict	doTestStepPreambleL();
-
-protected:
-	virtual TInt	ThreadFuncL(RFs& aSession);
-
-protected:
-	TBool	iSeek;
-	};
-
-#endif /* __WRITE_FILE_STEP_H__ */
--- a/baseapitest/basesvs/performance/f32/t_perf/pkg/t_perf.pkg	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-;
-; Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-; All rights reserved.
-; This component and the accompanying materials are made available
-; under the terms of "Eclipse Public License v1.0"
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-;
-; Install file for t_perf.exe
-;
-
-; Languages -
-&EN
-
-; Installation header
-; UID is the app's UID
-#{"t_perf"},(0x200041C7),1,0,0
-
-;%{"Vendor-EN"}
-;:"Symbian"
-
-; Localised Vendor name
-%{"Nokia"}
-
-; Unique Vendor name
-:"Nokia"
-
-
-"t_perf.exe"-"!:\sys\bin\t_perf.exe"
-"tperf.bat"-"!:\base\performance\f32\tperf.bat"
-"t_base.tcs"-"!:\base\t_base.tcs"
-
-"performance\f32\pbase-f32-rfile-performance-large.script"-"!:\base\performance\f32\base-f32-rfile-performance-large.script"
-"performance\f32\pbase-f32-rfile-performance-large.script"-"!:\base\performance\f32\pbase-f32-rfile-performance-medium.script"
-"performance\f32\pbase-f32-rfile-performance-large.script"-"!:\base\performance\f32\pbase-f32-rfile-performance-small.script"
-
-"performance\f32\pbase-f32-rfs-performance-large.script"-"!:\base\performance\f32\pbase-f32-rfs-performance-large.script"
-"performance\f32\pbase-f32-rfs-performance-large.script"-"!:\base\performance\f32\pbase-f32-rfs-performance-medium.script"
-"performance\f32\pbase-f32-rfs-performance-large.script"-"!:\base\performance\f32\pbase-f32-rfs-performance-small.script"
-
-"performance\f32\pbase-f32-rfile-performance-large.ini"-"!:\base\performance\f32\pbase-f32-rfile-performance-large.ini"
-"performance\f32\pbase-f32-rfile-performance-large.ini"-"!:\base\performance\f32\pbase-f32-rfile-performance-medium.ini"
-"performance\f32\pbase-f32-rfile-performance-large.ini"-"!:\base\performance\f32\pbase-f32-rfile-performance-small.ini"
-"performance\f32\pbase-f32-rfile-performance-utils.ini"-"!:\base\performance\f32\pbase-f32-rfile-performance-utils.ini"
-
-"performance\f32\pbase-f32-rfs-performance-large.ini"-"!:\base\performance\f32\pbase-f32-rfs-performance-large.ini"
-"performance\f32\pbase-f32-rfs-performance-large.ini"-"!:\base\performance\f32\pbase-f32-rfs-performance-medium.ini"
-"performance\f32\pbase-f32-rfs-performance-large.ini"-"!:\base\performance\f32\pbase-f32-rfs-performance-small.ini"
-
-"performance\f32\base_perf_f32_env.ini"-"!:\base\performance\f32\base_perf_f32_env.ini"
-
-; Required files
-; None
-
-; Component .sis files
-; None
--- a/baseapitest/basesvs/performance/f32/t_perf/pkg/tperf.bat	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-@rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
--- a/baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfile-performance-large.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-rfile-performance-large
-//! @SYMScriptDescription	The test script contains performance tests for the following API of the
-//!				RFile class:
-//!				TInt Read(TDes8 &aDes, TInt aLength) const;
-//!				TInt Read(TInt aPos, TDes8 &aDes, TInt aLength) const;
-//!				TInt Seek(TSeek aMode, TInt &aPos) const;
-//!				TInt Write(const TDesC8 &aDes, TInt aLength);
-//!				TInt Write(TInt aPos, const TDesC8 &aDes);
-//! @SYMScriptTestEnvironment	This test script requires a NAND or NOR configuration ROM image
-//!				when running this suite with test driver ensure STAT is built into the ROM
-//! @SYMScriptAutomation	Test Execute Framework and Test Driver
-//! @SYMScriptAuthor 		Rehana Anwar
-//! @SYMScriptCreationDate	10/05/2007
-
-LOAD_SUITE t_perf
-
-START_TESTCASE			pbase-f32-rfile-performance-large-0001
-//! @SYMTestCaseID		pbase-f32-rfile-performance-large-0001
-//! @SYMComponent		RFile::Read
-//! @SYMTestCaseDesc		Read test: Tests the performance of TInt Read(TDes8 &aDes, TInt aLength).
-//!				Here each teststep calculates the time taken to make 1000 calls
-//!				using a specified blockSize of bytes (specifed by that step).
-//!				Where blockSize denotes the parameter TInt aLength within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five read performance tests they are as follows: read 16b ,512b,4096b, 32768b, 65536b
-//!
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to read test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Ensure the current position is set to beginning of the file ( this offset will increment for each api call).
-//!				6. Read aLength bytes (i.e. aLength = 16) from file specified, from the position set in step5 in the file.
-//!				7. Repeat step 6, X times each ( where x=1000 and is the number of function calls specified, note that the file offset will increment).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate the time taken to achieve the current seek file position and subtract from time t
-//!				11. Calculate and print the time taken per call i.e. t/X( where x is the number of function calls),
-//!				and print time t total time for all function calls.
-//!				12. Repeat steps 4-11 for each read  test scenario.
-//!				13. Delete the directory structure created.
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	Utils
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0001-0001
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0001-0002
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0001-0003
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0001-0004
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0001-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-large-0001
-
-
-START_TESTCASE			pbase-f32-rfile-performance-large-0002
-//! @SYMTestCaseID		pbase-f32-rfile-performance-large-0002
-//! @SYMAPI			RFile::Read
-//! @SYMTestCaseDesc		Read Seek test:Tests the performance of TInt Read(TInt aPos, TDes8 &aDes, TInt aLength).
-//!				by calculating the time taken to make X calls with varying values of the position from
-//!				where the file is read from i.e. aPos and no. of bytes read i.e. aLength.
-//!				Here each teststep calculates the time taken to make 1000 calls
-//!				using a specified blockSize of bytes (specifed by that step) & varying positions within the file.
-//!				Where blockSize denotes the parameter TInt aLength and the offset denotes the parameter TInt aPos within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five read seek performance tests they are as follows: read 16b ,512b,4096b, 32768b, 65536b
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to read seek test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Read aLength bytes (i.e. aLength = 16) from file specified, from the current position of the file ( initially this position is 0, this offset will increment for each api call).
-//!				6. Repeat step 6 & 7,1000 times each ( where this is the number of function calls specified and where the position is set in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Repeat steps 4-10 for each read seek  test scenario.
-//!				12. Delete the directory structure created.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	Utils
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0002-0001
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0002-0002
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0002-0003
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0002-0004
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0002-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-large-0002
-
-
-START_TESTCASE			pbase-f32-rfile-performance-large-0003
-//! @SYMTestCaseID		pbase-f32-rfile-performance-large-0003
-//! @SYMAPI			RFile::Seek
-//! @SYMTestCaseDesc		Seek test: Tests the performance of TInt Seek(TSeek aMode, TInt &aPos)
-//!				by calculating the time taken to make 1000 calls(where this is read in from the ini file as functionCalls),
-//!				with varying values that set  positions within a file. Here aMode is set to the TSeek enumeration value ESeekStart. 
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to each seek tests tep)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Seek aPos bytes (i.e. aPos= 2) from from the file specified
-//!				6. Repeat step 4 &5,1000 times each ( where this is the number of function calls specified, & where the position is incremented in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Delete the directory structure created.
-//!				12. Repeat steps 1-11 for each seek test scenario.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0003-0001
-RUN_TEST_STEP			500	t_perf	SeekFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0003-0001
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0003-0001
-END_TESTCASE			pbase-f32-rfile-performance-large-0003
-
-
-START_TESTCASE			pbase-f32-rfile-performance-large-0004
-//! @SYMTestCaseID		pbase-f32-rfile-performance-large-0004
-//! @SYMAPI			RFile::Write
-//! @SYMTestCaseDesc		Write Test: Tests the performance of TInt write(TDes8 &aDes, TInt aLength).
-//!				Here each teststep calculates the time taken to make 1000 calls
-//!				using a specified blockSize of bytes (specifed by that step).
-//!				Where blockSize denotes the parameter TInt aLength within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five write performance tests they are as follows: Write 16b ,512b,4096b, 32768b, 65536b.
-//!
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to write test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Ensure the current position is set to beginning of the file ( this offset will increment for each api call).
-//!				6. Write aLength bytes (i.e. aLength = 16) from file specified, from the position set in step5 in the file.
-//!				7. Repeat step 6, 1000 times each ( where this is the number of function calls specified, note that the file offset will increment).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate the time taken to achieve the current seek file position and subtract from time t
-//!				11. Calculate and print the time taken per call i.e. t/X( where x is the number of function calls),
-//!				and print time t total time for all function calls.
-//!				12. Repeat steps 4-11 for each read  test scenario.
-//!				13. Delete the directory structure created.
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed.
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	Utils
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0004-0001
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0004-0002
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0004-0003
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0004-0004
-RUN_TEST_STEP			1000	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0004-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-large-0004
-
-
-START_TESTCASE			pbase-f32-rfile-performance-large-0005
-//! @SYMTestCaseID		pbase-f32-rfile-performance-large-0005
-//! @SYMAPI			RFile::Write
-//! @SYMTestCaseDesc		Write seek test:Tests the performance of TInt Write(TInt aPos, TDes8 &aDes, TInt aLength).
-//!				by calculating the time taken to make X calls with varying values of the position
-//!				from where the file is read from i.e. aPos and no. of bytes written i.e. aLength
-//!				Here each teststep calculates the time taken to make X calls
-//!				(where x is read in from the ini file as functionCalls),
-//!				using a specified blockSize of bytes (specifed by that step) &  varying positions within the file.
-//!				Where blockSize denotes the parameter TInt aLength and the offset denotes the parameter TInt aPos within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b, 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five write seek performance tests they are as follows: write 16b ,512b,4096b, 32768b, 65536b
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to write seek test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Write aLength bytes (i.e. aLength = 16) from file specified, from the current position of the file ( initially this position is 0, this offset will increment for each api call).
-//!				6. Repeat step 6 & 7, 1000 times each ( where this is the number of function calls specified and where the position is incremented in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Repeat steps 4-10 for each read seek  test scenario.
-//!				12. Delete the directory structure created.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed.
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	Utils
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0005-0001
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0005-0002
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0005-0003
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0005-0004
-RUN_TEST_STEP			1000	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	pbase-f32-rfile-performance-large-0005-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-large.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-large-0005
--- a/baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfile-performance-medium.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,217 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-rfile-performance-medium
-//! @SYMScriptDescription	The test script contains performance tests for the following API of the
-//!				RFile class:
-//!				TInt Read(TDes8 &aDes, TInt aLength) const;
-//!				TInt Read(TInt aPos, TDes8 &aDes, TInt aLength) const;
-//!				TInt Seek(TSeek aMode, TInt &aPos) const;
-//!				TInt Write(const TDesC8 &aDes, TInt aLength);
-//!				TInt Write(TInt aPos, const TDesC8 &aDes);
-//! @SYMScriptTestEnvironment	This test script requires a NAND or NOR configuration ROM image
-//!				when running this suite with test driver ensure STAT is built into the ROM
-//! @SYMScriptAutomation	Test Execute Framework and Test Driver
-//! @SYMScriptAuthor 		Rehana Anwar
-//! @SYMScriptCreationDate	10/05/2007
-
-LOAD_SUITE t_perf
-
-START_TESTCASE			pbase-f32-rfile-performance-medium-0001
-//! @SYMTestCaseID		pbase-f32-rfile-performance-medium-0001
-//! @SYMComponent		RFile::Read
-//! @SYMTestCaseDesc		Read test: Tests the performance of TInt Read(TDes8 &aDes, TInt aLength).
-//!				Here each teststep calculates the time taken to make 500 calls
-//!				using a specified blockSize of bytes (specifed by that step).
-//!				Where blockSize denotes the parameter TInt aLength within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five read performance tests they are as follows: read 16b ,512b,4096b, 32768b, 65536b
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to read test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Ensure the current position is set to beginning of the file ( this offset will increment for each api call).
-//!				6. Read aLength bytes (i.e. aLength = 16) from file specified, from the position set in step5 in the file.
-//!				7. Repeat step 6, X times each ( where x=500 and is the number of function calls specified, note that the file offset will increment).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate the time taken to achieve the current seek file position and subtract from time t
-//!				11. Calculate and print the time taken per call i.e. t/X( where x is the number of function calls),
-//!				and print time t total time for all function calls.
-//!				12. Repeat steps 4-11 for each read  test scenario.
-//!				13. Delete the directory structure created.
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	Utils
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0001-0001
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0001-0002
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0001-0003
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0001-0004
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0001-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-medium-0001
-
-
-START_TESTCASE			pbase-f32-rfile-performance-medium-0002
-//! @SYMTestCaseID		pbase-f32-rfile-performance-medium-0002
-//! @SYMAPI			RFile::Read
-//! @SYMTestCaseDesc		Read Seek test:Tests the performance of TInt Read(TInt aPos, TDes8 &aDes, TInt aLength).
-//!				by calculating the time taken to make X calls with varying values of the position from
-//!				where the file is read from i.e. aPos and no. of bytes read i.e. aLength.
-//!				Here each teststep calculates the time taken to make 500 calls
-//!				using a specified blockSize of bytes (specifed by that step) & varying positions within the file.
-//!				Where blockSize denotes the parameter TInt aLength and the offset denotes the parameter TInt aPos within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five read seek performance tests they are as follows: read 16b ,512b,4096b, 32768b, 65536b
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to read seek test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Read aLength bytes (i.e. aLength = 16) from file specified, from the current position of the file ( initially this position is 0, this offset will increment for each api call).
-//!				6. Repeat step 6 & 7,500 times each ( where this is the number of function calls specified and where the position is set in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Repeat steps 4-10 for each read seek  test scenario.
-//!				12. Delete the directory structure created.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf  SetupStep   	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	Utils
-RUN_TEST_STEP			500	t_perf  ReadFileStep   	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0002-0001
-RUN_TEST_STEP			500	t_perf  ReadFileStep   	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0002-0002
-RUN_TEST_STEP			500	t_perf  ReadFileStep   	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0002-0003
-RUN_TEST_STEP			500	t_perf  ReadFileStep   	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0002-0004
-RUN_TEST_STEP			500	t_perf  ReadFileStep   	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0002-0005
-RUN_TEST_STEP			960	t_perf  CleanupStep   	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-medium-0002
-
-
-START_TESTCASE			pbase-f32-rfile-performance-medium-0003
-//! @SYMTestCaseID		pbase-f32-rfile-performance-medium-0003
-//! @SYMAPI			RFile::Seek
-//! @SYMTestCaseDesc		Seek test: Tests the performance of TInt Seek(TSeek aMode, TInt &aPos)
-//!				by calculating the time taken to make 500 calls(where this is read in from the ini file as functionCalls),
-//!				with varying values that set  positions within a file. Here aMode is set to the TSeek enumeration value ESeekStart. 
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to each seek tests tep)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Seek aPos bytes (i.e. aPos= 2) from from the file specified
-//!				6. Repeat step 4 &5,500 times each ( where this is the number of function calls specified, & where the position is incremented in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Delete the directory structure created.
-//!				12. Repeat steps 1-11 for each seek test scenario.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0003-0001
-RUN_TEST_STEP			500	t_perf	SeekFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0003-0001
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0003-0001
-END_TESTCASE			pbase-f32-rfile-performance-medium-0003
-
-
-START_TESTCASE			pbase-f32-rfile-performance-medium-0004
-//! @SYMTestCaseID		pbase-f32-rfile-performance-medium-0004
-//! @SYMAPI			RFile::Write
-//! @SYMTestCaseDesc		Write Test: Tests the performance of TInt write(TDes8 &aDes, TInt aLength).
-//!				Here each teststep calculates the time taken to make 500 calls
-//!				using a specified blockSize of bytes (specifed by that step).
-//!				Where blockSize denotes the parameter TInt aLength within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five write performance tests they are as follows: Write 16b ,512b,4096b, 32768b, 65536b.
-//!
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to write test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Ensure the current position is set to beginning of the file ( this offset will increment for each api call).
-//!				6. Write aLength bytes (i.e. aLength = 16) from file specified, from the position set in step5 in the file.
-//!				7. Repeat step 6, 500 times each ( where this is the number of function calls specified, note that the file offset will increment).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate the time taken to achieve the current seek file position and subtract from time t
-//!				11. Calculate and print the time taken per call i.e. t/X( where x is the number of function calls),
-//!				and print time t total time for all function calls.
-//!				12. Repeat steps 4-11 for each read  test scenario.
-//!				13. Delete the directory structure created.
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed.
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	Utils
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0004-0001
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0004-0002
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0004-0003
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0004-0004
-RUN_TEST_STEP			1000	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0004-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-medium-0004
-
-
-START_TESTCASE			pbase-f32-rfile-performance-medium-0005
-//! @SYMTestCaseID		pbase-f32-rfile-performance-medium-0005
-//! @SYMAPI			RFile::Write
-//! @SYMTestCaseDesc		Write seek test:Tests the performance of TInt Write(TInt aPos, TDes8 &aDes, TInt aLength).
-//!				by calculating the time taken to make X calls with varying values of the position
-//!				from where the file is read from i.e. aPos and no. of bytes written i.e. aLength
-//!				Here each teststep calculates the time taken to make X calls
-//!				(where x is read in from the ini file as functionCalls),
-//!				using a specified blockSize of bytes (specifed by that step) &  varying positions within the file.
-//!				Where blockSize denotes the parameter TInt aLength and the offset denotes the parameter TInt aPos within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b, 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five write seek performance tests they are as follows: write 16b ,512b,4096b, 32768b, 65536b
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to write seek test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Write aLength bytes (i.e. aLength = 16) from file specified, from the current position of the file ( initially this position is 0, this offset will increment for each api call).
-//!				6. Repeat step 6 & 7, 500 times each ( where this is the number of function calls specified and where the position is incremented in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Repeat steps 4-10 for each read seek  test scenario.
-//!				12. Delete the directory structure created.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed.
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	Utils
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0005-0001
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0005-0002
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0005-0003
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0005-0004
-RUN_TEST_STEP			1000	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	pbase-f32-rfile-performance-medium-0005-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-medium.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-medium-0005
--- a/baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfile-performance-small.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-rfile-performance-small
-//! @SYMScriptDescription	The test script contains performance tests for the following API of the
-//!				RFile class:
-//!				TInt Read(TDes8 &aDes, TInt aLength) const;
-//!				TInt Read(TInt aPos, TDes8 &aDes, TInt aLength) const;
-//!				TInt Seek(TSeek aMode, TInt &aPos) const;
-//!				TInt Write(const TDesC8 &aDes, TInt aLength);
-//!				TInt Write(TInt aPos, const TDesC8 &aDes);
-//! @SYMScriptTestEnvironment	This test script requires a NAND or NOR configuration ROM image
-//!				when running this suite with test driver ensure STAT is built into the ROM
-//! @SYMScriptAutomation	Test Execute Framework and Test Driver
-//! @SYMScriptAuthor 		Rehana Anwar
-//! @SYMScriptCreationDate	10/05/2007
-
-LOAD_SUITE t_perf
-
-START_TESTCASE			pbase-f32-rfile-performance-small-0001
-//! @SYMTestCaseID		pbase-f32-rfile-performance-small-0001
-//! @SYMComponent		RFile::Read
-//! @SYMTestCaseDesc		Read test: Tests the performance of TInt Read(TDes8 &aDes, TInt aLength).
-//!				Here each teststep calculates the time taken to make 100 calls
-//!				using a specified blockSize of bytes (specifed by that step).
-//!				Where blockSize denotes the parameter TInt aLength within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five read performance tests they are as follows: read 16b ,512b,4096b, 32768b, 65536b
-//!
-//! @SYMTestActions	1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to read test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Ensure the current position is set to beginning of the file ( this offset will increment for each api call).
-//!				6. Read aLength bytes (i.e. aLength = 16) from file specified, from the position set in step5 in the file.
-//!				7. Repeat step 6, X times each ( where x =100 and is the number of function calls specified, note that the file offset will increment).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate the time taken to achieve the current seek file position and subtract from time t
-//!				11. Calculate and print the time taken per call i.e. t/X( where x is the number of function calls),
-//!				and print time t total time for all function calls.
-//!				12. Repeat steps 4-11 for each read  test scenario.
-//!				13. Delete the directory structure created.
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	Utils
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0001-0001
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0001-0002
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0001-0003
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0001-0004
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0001-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	Utils
-END_TESTCASE	pbase-f32-rfile-performance-small-0001
-
-
-START_TESTCASE			pbase-f32-rfile-performance-small-0002
-//! @SYMTestCaseID		pbase-f32-rfile-performance-small-0002
-//! @SYMAPI			RFile::Read
-//! @SYMTestCaseDesc		Read Seek test:Tests the performance of TInt Read(TInt aPos, TDes8 &aDes, TInt aLength).
-//!				by calculating the time taken to make X calls with varying values of the position from
-//!				where the file is read from i.e. aPos and no. of bytes read i.e. aLength.
-//!				Here each teststep calculates the time taken to make 100 calls
-//!				using a specified blockSize of bytes (specifed by that step) & varying positions within the file.
-//!				Where blockSize denotes the parameter TInt aLength and the offset denotes the parameter TInt aPos within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five read seek performance tests they are as follows: read 16b ,512b,4096b, 32768b, 65536b
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to read seek test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Read aLength bytes (i.e. aLength = 16) from file specified, from the current position of the file ( initially this position is 0, this offset will increment for each api call).
-//!				6. Repeat step 6 & 7,100 times each ( where this is the number of function calls specified and where the position is set in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Repeat steps 4-10 for each read seek  test scenario.
-//!				12. Delete the directory structure created.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	Utils
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0002-0001
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0002-0002
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0002-0003
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0002-0004
-RUN_TEST_STEP			500	t_perf	ReadFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0002-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-small-0002
-
-
-START_TESTCASE			pbase-f32-rfile-performance-small-0003
-//! @SYMTestCaseID		pbase-f32-rfile-performance-small-0003
-//! @SYMAPI			RFile::Seek
-//! @SYMTestCaseDesc		Seek test: Tests the performance of TInt Seek(TSeek aMode, TInt &aPos)
-//!				by calculating the time taken to make 100 calls(where this is read in from the ini file as functionCalls),
-//!				with varying values that set  positions within a file. Here aMode is set to the TSeek enumeration value ESeekStart. 
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to each seek tests tep)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Seek aPos bytes (i.e. aPos= 2) from from the file specified
-//!				6. Repeat step 4 &5,100 times each ( where this is the number of function calls specified, & where the position is incremented in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Delete the directory structure created.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0003-0001
-RUN_TEST_STEP			500	t_perf	SeekFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0003-0001
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0003-0001
-END_TESTCASE			pbase-f32-rfile-performance-small-0003
-
-
-START_TESTCASE			pbase-f32-rfile-performance-small-0004
-//! @SYMTestCaseID		pbase-f32-rfile-performance-small-0004
-//! @SYMAPI			RFile::Write
-//! @SYMTestCaseDesc		Write Test: Tests the performance of TInt write(TDes8 &aDes, TInt aLength).
-//!				Here each teststep calculates the time taken to make 100 calls
-//!				using a specified blockSize of bytes (specifed by that step).
-//!				Where blockSize denotes the parameter TInt aLength within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b , 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five write performance tests they are as follows: Write 16b ,512b,4096b, 32768b, 65536b.
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to write test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Ensure the current position is set to beginning of the file ( this offset will increment for each api call).
-//!				6. Write aLength bytes (i.e. aLength = 16) from file specified, from the position set in step5 in the file.
-//!				7. Repeat step 6, 100 times each ( where this is the number of function calls specified, note that the file offset will increment).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate the time taken to achieve the current seek file position and subtract from time t
-//!				11. Calculate and print the time taken per call i.e. t/X( where x is the number of function calls),
-//!				and print time t total time for all function calls.
-//!				12. Repeat steps 4-11 for each read  test scenario.
-//!				13. Delete the directory structure created.
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed.
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	Utils
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0004-0001
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0004-0002
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0004-0003
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0004-0004
-RUN_TEST_STEP			1000	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0004-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-small-0004
-
-
-START_TESTCASE			pbase-f32-rfile-performance-small-0005
-//! @SYMTestCaseID		pbase-f32-rfile-performance-small-0005
-//! @SYMAPI			RFile::Write
-//! @SYMTestCaseDesc		Write seek test:Tests the performance of TInt Write(TInt aPos, TDes8 &aDes, TInt aLength).
-//!				by calculating the time taken to make X calls with varying values of the position
-//!				from where the file is read from i.e. aPos and no. of bytes written i.e. aLength
-//!				Here each teststep calculates the time taken to make X calls
-//!				(where x is read in from the ini file as functionCalls),
-//!				using a specified blockSize of bytes (specifed by that step) &  varying positions within the file.
-//!				Where blockSize denotes the parameter TInt aLength and the offset denotes the parameter TInt aPos within the above API.
-//!				Here the blocksize increment for each teststep is as follows:  16b, 512b, 4096b, 32768b, 65536b. 
-//!				These byte values map to the respective parameter names within the configuration ini file: XSBytes,SBytes,MBytes,LBytes,XLBytes 
-//!				The values within these parameter names are therefore configurable values.
-//!				This test case contains five write seek performance tests they are as follows: write 16b ,512b,4096b, 32768b, 65536b
-//!
-//! @SYMTestActions		1. Create  X number of files and directory structure<drive>:\<baseDirName>\<subDirName>.........X files
-//!				2. Create number of files requested and set the file size (file size varies according to write seek test)
-//!				3. Fill in each file with file data.
-//!				4. Start the clock
-//!				5. Write aLength bytes (i.e. aLength = 16) from file specified, from the current position of the file ( initially this position is 0, this offset will increment for each api call).
-//!				6. Repeat step 6 & 7, 100 times each ( where this is the number of function calls specified and where the position is incremented in step5 in the file.).
-//!				7. Stop the clock
-//!				8. Record the elapsed time t
-//!				9. Calculate the time taken to calculate the current file position and subtract from time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Repeat steps 4-10 for each read seek  test scenario.
-//!				12. Delete the directory structure created.
-//!
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed.
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	Utils
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0005-0001
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0005-0002
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0005-0003
-RUN_TEST_STEP			500	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0005-0004
-RUN_TEST_STEP			1000	t_perf	WriteFileStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	pbase-f32-rfile-performance-small-0005-0005
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfile-performance-small.ini	Utils
-END_TESTCASE			pbase-f32-rfile-performance-small-0005
--- a/baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfs-performance-large.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-rfs-performance-Large
-//! @SYMScriptDescription	The test script contains performance tests for the following API of the
-//!				RFs class:
-//!				TInt Entry(const TDesC &aName, TEntry &anEntry) const;
-//! @SYMScriptTestEnvironment	This test script requires a NAND or NOR configuration ROM image
-//!				when running this suite with test driver ensure STAT is built into the ROM
-//! @SYMScriptAutomation	Test Execute Framework and Test Driver
-//! @SYMScriptAuthor 		Rehana Anwar
-//! @SYMScriptCreationDate	10/05/2007
-
-LOAD_SUITE t_perf
-
-
-START_TESTCASE			pbase-f32-rfs-performance-large-entry-0001
-//! @SYMTestCaseID		pbase-f32-rfs-performance-large-entry-0001
-//! @SYMAPI			RFs::Entry
-//! @SYMTestCaseDesc		Entry  test:Tests the performance of TInt Entry(const TDesC &aName, TEntry &anEntry)
-//!				by calculating the time taken to make 1000 calls to get the entry details of all sub directories
-//!				from directory x to directory y.
-//! @SYMTestActions		1. Create a directory tree N directories deep on the chosen test drive. Where N is read in as dirTreeDepth
-//!				2. Create number of files requested and set the file size
-//!				3. Fill in each file with file data.
-//!				5. Start the clock
-//!				6. Retrieve entry details of a directory for a file ( this entry alternates for each api call).
-//!				7. Repeat step 6, X times each ( where x is the number of function calls specified, an the entry requested alternates).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Delete the directory structure created.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfs-performance-large.ini	pbase-f32-rfs-performance-large-entry-0001-0001
-RUN_TEST_STEP			500	t_perf	EntryStep	\base\performance\f32\pbase-f32-rfs-performance-large.ini	pbase-f32-rfs-performance-large-entry-0001-0001
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfs-performance-large.ini	pbase-f32-rfs-performance-large-entry-0001-0001
-END_TESTCASE			pbase-f32-rfs-performance-large-entry-0001
--- a/baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfs-performance-medium.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-rfs-performance-medium
-//! @SYMScriptDescription	The test script contains performance tests for the following API of the
-//!				RFs class:
-//!				TInt Entry(const TDesC &aName, TEntry &anEntry) const;
-//! @SYMScriptTestEnvironment	This test script requires a NAND or NOR configuration ROM image
-//!				when running this suite with test driver ensure STAT is built into the ROM
-//! @SYMScriptAutomation	Test Execute Framework and Test Driver
-//! @SYMScriptAuthor 		Rehana Anwar
-//! @SYMScriptCreationDate	10/05/2007
-
-LOAD_SUITE t_perf
-
-
-START_TESTCASE			pbase-f32-rfs-performance-medium-entry-0001
-//! @SYMTestCaseID		pbase-f32-rfs-performance-medium-entry-0001
-//! @SYMAPI			RFs::Entry
-//! @SYMTestCaseDesc		Entry  test:Tests the performance of TInt Entry(const TDesC &aName, TEntry &anEntry)
-//!				by calculating the time taken to make 500 calls to get the entry details of all sub directories
-//!				from directory x to directory y.
-//! @SYMTestActions		1. Create a directory tree N directories deep on the chosen test drive. Where N is read in as dirTreeDepth
-//!				2. Create number of files requested and set the file size
-//!				3. Fill in each file with file data.
-//!				5. Start the clock
-//!				6. Retrieve entry details of a directory for a file ( this entry alternates for each api call).
-//!				7. Repeat step 6, X times each ( where x is the number of function calls specified, an the entry requested alternates).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Delete the directory structure created.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf	SetupStep	\base\performance\f32\pbase-f32-rfs-performance-medium.ini	pbase-f32-rfs-performance-medium-entry-0001
-RUN_TEST_STEP			500	t_perf	EntryStep	\base\performance\f32\pbase-f32-rfs-performance-medium.ini	pbase-f32-rfs-performance-medium-entry-0001
-RUN_TEST_STEP			960	t_perf	CleanupStep	\base\performance\f32\pbase-f32-rfs-performance-medium.ini	pbase-f32-rfs-performance-medium-entry-0001
-END_TESTCASE			pbase-f32-rfs-performance-medium-entry-0001
--- a/baseapitest/basesvs/performance/f32/t_perf/scripts/pbase-f32-rfs-performance-small.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-rfs-performance-small
-//! @SYMScriptDescription	The test script contains performance tests for the following API of the
-//!				RFs class:
-//!					TInt Entry(const TDesC &aName, TEntry &anEntry) const;
-//! @SYMScriptTestEnvironment	This test script requires a NAND or NOR configuration ROM image
-//!				when running this suite with test driver ensure STAT is built into the ROM
-//! @SYMScriptAutomation	Test Execute Framework and Test Driver
-//! @SYMScriptAuthor 		Rehana Anwar
-//! @SYMScriptCreationDate	10/05/2007
-
-LOAD_SUITE t_perf
-
-
-START_TESTCASE			pbase-f32-rfs-performance-small-entry-0001
-//! @SYMTestCaseID		pbase-f32-rfs-performance-small-entry-0001
-//! @SYMAPI			RFs::Entry
-//! @SYMTestCaseDesc		Entry  test:Tests the performance of TInt Entry(const TDesC &aName, TEntry &anEntry)
-//!				by calculating the time taken to make 100 calls to get the entry details of all sub directories
-//!				from directory x to directory y.
-//! @SYMTestActions		1. Create a directory tree N directories deep on the chosen test drive. Where N is read in as dirTreeDepth
-//!				2. Create number of files requested and set the file size
-//!				3. Fill in each file with file data.
-//!				5. Start the clock
-//!				6. Retrieve entry details of a directory for a file ( this entry alternates for each api call).
-//!				7. Repeat step 6, X times each ( where x is the number of function calls specified, an the entry requested alternates).
-//!				8. Stop the clock
-//!				9. Record the elapsed time t
-//!				10. Calculate and print the time taken per call i.e. t/X ( where x is the number of function calls),
-//!				and print time t total time for all function calls
-//!				11. Delete the directory structure created.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	The average time taken per call and the total time taken for all calls is displayed
-RUN_TEST_STEP			960	t_perf  SetupStep	\base\performance\f32\pbase-f32-rfs-performance-small.ini	pbase-f32-rfs-performance-small-entry-0001-0001
-RUN_TEST_STEP			500	t_perf  EntryStep	\base\performance\f32\pbase-f32-rfs-performance-small.ini	pbase-f32-rfs-performance-small-entry-0001-0001
-RUN_TEST_STEP			960	t_perf  CleanupStep	\base\performance\f32\pbase-f32-rfs-performance-small.ini	pbase-f32-rfs-performance-small-entry-0001-0001
-END_TESTCASE			pbase-f32-rfs-performance-small-entry-0001
--- a/baseapitest/basesvs/performance/f32/t_perf/src/BaseStep.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,454 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "BaseStep.h"
-
-const TInt	KMaxString=1000;
-const TInt	KOneMB=1048576;
-const TReal	KMicroSecondsPerSecond=1000000.0;
-
-/*@{*/
-// Literals Used
-_LIT(KT_NumOfFunctionCall,				"functionCalls");
-_LIT(KT_ThreadName,						"threadname");
-_LIT(KT_StackSize,						"stacksize");
-_LIT(KT_MinHeapSize,					"minheapsize");
-_LIT(KT_MaxHeapSize,					"maxheapsize");
-_LIT(KT_OwnerType,						"ownertype");
-_LIT(KT_ThreadPriority,					"threadpriority");
-_LIT(KT_ThreadDefaultName,				"thread");
-_LIT(KT_EOwnerProcess,					"EOwnerProcess");
-_LIT(KT_EOwnerThread,					"EOwnerThread");
-_LIT(KT_EPriorityLess,					"EPriorityLess");
-_LIT(KT_EPriorityNormal,				"EPriorityNormal");
-_LIT(KT_EPriorityMore,					"EPriorityMore");
-_LIT(KT_EPriorityRealTime,				"EPriorityRealTime");
-_LIT(KT_EPriorityAbsoluteForeground,	"EPriorityAbsoluteForeground");
-_LIT(KT_EPriorityAbsoluteBackground,	"EPriorityAbsoluteBackground");
-_LIT(KT_ResultTitle,					"-------------RESULTS-------------");
-_LIT(KT_BufResultFuncCalls,				"Number of function calls is:             (%d)");
-_LIT(KT_BufResultBlockSize,				"Block size:                              (%d) bytes");
-_LIT(KT_BufResultBytesProcessed,		"Bytes processed:                         (%d)");
-_LIT(KT_BufResultTotalTime,				"Time taken for all function calls:       (%Ld) microseconds");
-_LIT(KT_BufResultAverageTime,			"Approximate Average Time Taken per call: (%Ld) microseconds");
-_LIT(KT_BufResultThroughput,			"Throughput:                              (%f) MB/sec");
-_LIT(KT_ResultEnd,						"-----------END-RESULTS-----------");
-_LIT(KT_NumOfFiles,						"numOfFiles");
-_LIT(KT_BaseFileName,					"fileBaseName");
-_LIT(KT_SubDirName,						"subDirName");
-_LIT(KT_DirTreeDepth,					"dirTreeDepth");
-_LIT(KT_DotSeparator,					".");
-_LIT(KT_DirSpearator,					"\\");
-_LIT(KT_BaseDirName,					"baseDirName");
-_LIT(KT_FileSize,						"fileSize");
-_LIT(KT_BlockSize,						"blockSize");
-_LIT(KT_CsvName,						"csvFileName");
-_LIT(KT_CsvDefaultName,					"\\f32-perf.csv");
-_LIT(KT_CsvTitle,						"Operation,Calls,Time taken, Average time \n");
-_LIT(KT_NewLine,						"\n");
-_LIT(KT_Comma,							",");
-_LIT(KT_Operation,						"operation");
-/*@}*/
-
-
-
-// Function : CT_F32BaseStep()
-// Description :CT_F32BaseStep class constructor
-CT_F32BaseStep::CT_F32BaseStep(TBool aOpenFiles)
-:	CTestStepV2()
-,	iFuncCalls(0)
-,	iNumOfFiles(0)
-,	iDirTreeDepth(0)
-,	iFileSize(0)
-,	iBlockSize(0)
-,	iTotalTime(0)
-,	iOpenFiles(aOpenFiles)
-	{
-	}
-
-
-// Function : ~CT_F32BaseStep()
-// Description :CT_F32BaseStep class destructor
-CT_F32BaseStep:: ~CT_F32BaseStep()
-	{
-	iFilePathArray.Reset();
-	iFilePathArray.Close();
-	iFileArray.Reset();
-	iFileArray.Close();
-	}
-
-
-//Function: doTestStepPreambleL
-//Description :
-//@return TVerdict pass / fail
-TVerdict CT_F32BaseStep::doTestStepPreambleL()
-	{
-	INFO_PRINTF1(_L("Test Step : PerfBaseStep Preamble setup"));
-	TVerdict  result=CTestStepV2::doTestStepPreambleL();
-
-	if (!GetStringFromConfig(ConfigSection(),KT_CsvName,iCsvFileName))
-		{
-		iCsvFileName.Set(KT_CsvDefaultName);
-		WARN_PRINTF1(_L(".csv file name not set reverting to default"));
-		}
-	if (!GetIntFromConfig(ConfigSection(),	KT_NumOfFunctionCall,iFuncCalls))
-		{
-		ERR_PRINTF2( _L("Unable to read number of function calls, it is set to: (%d) "),iFuncCalls );
-		SetTestStepResult(EFail);
-		}
-	if (!GetIntFromConfig(ConfigSection(),	KT_NumOfFiles,iNumOfFiles))
-		{
-		ERR_PRINTF2( _L("Unable to read number of files created (%d)"), iNumOfFiles);
-		SetTestStepResult(EFail);
-		}
-	if(!GetStringFromConfig(ConfigSection(),KT_BaseFileName,iFileBaseName))
-		{
-		ERR_PRINTF1( _L("Unable to read base file name ") );
-		SetTestStepResult(EFail);
-		}
-	if (!GetStringFromConfig(ConfigSection(),KT_SubDirName,iDirSubName))
-		{
-		ERR_PRINTF1( _L("Unable to read in sub directory name.") );
-		SetTestStepResult(EFail);
-		}
-	if (!GetIntFromConfig(ConfigSection(),KT_DirTreeDepth,iDirTreeDepth))
-		{
-		ERR_PRINTF2( _L("Invalid directory tree depth given, it is set to:...(%d)"),iDirTreeDepth);
-		SetTestStepResult(EFail);
-		}
-	if (!GetStringFromConfig(ConfigSection(),KT_BaseDirName,iDirBaseName))
-		{
-		ERR_PRINTF1( _L("Unable to read in parent directory name to use within test, Will not be able to create a directory structure! ") );
-		SetTestStepResult(EFail);
-		}
-	if (!GetIntFromConfig(ConfigSection(),KT_FileSize,iFileSize))
-		{
-		ERR_PRINTF2( _L("Invalid fileSize given, file size set to: (%d)"), iFileSize );
-		SetTestStepResult(EFail);
-		};
-	if (!GetStringFromConfig(ConfigSection(),KT_Operation,iOperation))
-		{
-		ERR_PRINTF1( _L("Unable to read in operation name! ") );
-		SetTestStepResult(EFail);
-		}
-	if(iOpenFiles)//if we are not an entry test
-		{
-		if (!GetIntFromConfig(ConfigSection(),KT_BlockSize,iBlockSize))
-			{
-			WARN_PRINTF2( _L("Invalid Integer blocksize given, it is set to:...(%d)"), iBlockSize);
-			}
-		}
-	SetFilePathArrayL();	//fill iFilePathArray
-	RFile	file;	//	fill in RFileArray
-	for(TInt i=0; i<iDirTreeDepth*iNumOfFiles;i++)
-		{
-		iFileArray.AppendL(file);
-		}
-
-	return result;
-	}
-
-
-//Function: doTestStepPostambleL
-//Description :
-//@return TVerdict pass / fail
-TVerdict CT_F32BaseStep::doTestStepPostambleL()
-	{
-	PrintResults();	//print out results
-	CreateCsvFileL();
-	return TestStepResult();
-	}
-
-
-//Function: doTestStepL
-//Description :
-//@return TVerdict pass / fail
-TVerdict CT_F32BaseStep::doTestStepL()
-	{
-	//read in params from ini file
-	TPtrC	threadname(KT_ThreadDefaultName);
- 	GetStringFromConfig(ConfigSection(),KT_ThreadName,threadname);
-
-	TInt	stackSize=KDefaultStackSize;
-	GetHexFromConfig(ConfigSection(),KT_StackSize,stackSize);
-
-	TInt	minHeapSize=KMinHeapSize;
-	GetHexFromConfig(ConfigSection(),KT_MinHeapSize,minHeapSize);
-
-	TInt	maxHeapSize=KMinHeapSize;
-	GetHexFromConfig(ConfigSection(),KT_MaxHeapSize,maxHeapSize);
-
-	TPtrC	owner(KT_EOwnerProcess);
-	GetStringFromConfig(ConfigSection(),KT_OwnerType,owner);
-	TOwnerType	ownerType;
-	if ( !SetOwnerType(owner, ownerType) )
-		{
- 		ERR_PRINTF2(_L("TOwnerType invalid (%S)"), &owner);
- 		SetTestStepResult(EFail);
-		}
-
-	TPtrC	priority(KT_EPriorityLess);
-	GetStringFromConfig(ConfigSection(),KT_ThreadPriority,priority);
-	TThreadPriority	threadPriority;
-	if ( !SetThreadPriority(priority, threadPriority) )
-		{
- 		ERR_PRINTF2(_L("TThreadPriority invalid (%S)"), &priority);
- 		SetTestStepResult(EFail);
-		}
-
-	TRequestStatus	status;
-	RThread			thread;
-	TRAPD(err, thread.Create(threadname,ThreadFunction,stackSize,minHeapSize,maxHeapSize, static_cast<CT_F32BaseStep*>(this), ownerType));
-
-	if (err==KErrNone)
-		{
-		CleanupClosePushL(thread);
-		thread.SetPriority(threadPriority);
-		thread.Logon(status);
-		thread.Resume();
-		User::WaitForRequest(status);
-		thread.Close();
-		CleanupStack::PopAndDestroy(1,&thread);
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Cannot create thread. Error %d"), err);
-		SetTestStepResult(EFail);
-		}
-
-	return TestStepResult();
-	}
-
-
-
-//Function:SetOwnerType
-//Description:used in doTestStepL
-// @return :TOwnerType
-// @param:const TDesC& aName
-TBool CT_F32BaseStep::SetOwnerType(const TDesC& aName, TOwnerType& aOwnerType)
-	{
-	TBool	ret=ETrue;
-
-	if (aName==KT_EOwnerProcess)
- 		{
- 		aOwnerType=EOwnerProcess;
- 		}
- 	else if (aName==KT_EOwnerThread)
- 		{
- 		aOwnerType=EOwnerThread;
- 		}
- 	else
- 		{
-		ret=EFalse;
- 		}
-
- 	return ret;
-	}
-
-//Function:SetThreadPriority
-//Description : used in doTestStepL
-// @return :TThreadPriority
-// @param:const TDesC& aName
-TBool CT_F32BaseStep::SetThreadPriority(const TDesC& aName, TThreadPriority& aThreadPriority)
-	{
-	TBool	ret=ETrue;
-	if(aName==KT_EPriorityLess)
- 		{
- 		aThreadPriority=EPriorityLess;
- 		}
- 	else if(aName==KT_EPriorityNormal)
- 		{
- 		aThreadPriority=EPriorityNormal;
- 		}
- 	else if(aName==KT_EPriorityMore)
- 		{
- 		aThreadPriority=EPriorityMore;
- 		}
-	else if(aName==KT_EPriorityRealTime)
- 		{
- 		aThreadPriority=EPriorityRealTime;
- 		}
- 	else if(aName==KT_EPriorityAbsoluteForeground)
- 		{
- 		aThreadPriority=EPriorityAbsoluteForeground;
- 		}
- 	else if(aName==KT_EPriorityAbsoluteBackground)
- 		{
- 		aThreadPriority=EPriorityAbsoluteBackground;
- 		}
- 	else
- 		{
-		ret=EFalse;
- 		}
-
- 	return ret;
-	}
-
-
-//Function:ThreadPostFuncL
-//Description : post thread operation
-void CT_F32BaseStep::ThreadPostFuncL(RFs& aSession)
-	{
-	//open rfile objects
-	for(TInt i=0; i<iFileArray.Count();i++)
-		{
-		iFileArray[i].Close();
-		}
-
-	aSession.Close();
-	}
-
-
-//Function:ThreadPreFuncL
-//Description :pre thread operation
-//@return TInt KErrNone/error value
-TInt CT_F32BaseStep::ThreadPreFuncL(RFs& aSession)
-	{
-	TInt	result=aSession.Connect();
-
-	if(iOpenFiles)
-		{
-		//open rfile objects
-		for(TInt i=0; (i<iFileArray.Count()) && (result==KErrNone);i++)
-			{
-			result=iFileArray[i].Open(aSession,iFilePathArray[i],EFileWrite);
-			}
-		}
-
-	return result;
-	}
-
-
-//Function:PrintResults
-//Description : Print results to TEF log  file
-void CT_F32BaseStep::PrintResults()
-	{
-	const TInt64	averageTime=((iTotalTime.Int64())/ (TInt64)iFuncCalls);
-
-	INFO_PRINTF1(KT_ResultTitle);
-	INFO_PRINTF2(KT_BufResultFuncCalls,			iFuncCalls);
-	INFO_PRINTF2(KT_BufResultTotalTime,			iTotalTime.Int64());
-	INFO_PRINTF2(KT_BufResultAverageTime,		averageTime);
-	if(iOpenFiles)//if we are not an entry test
-		{
-		INFO_PRINTF2(KT_BufResultBlockSize,			iBlockSize);
-		INFO_PRINTF2(KT_BufResultBytesProcessed,	iFuncCalls*iBlockSize);
-		INFO_PRINTF2(KT_BufResultThroughput,		KMicroSecondsPerSecond*iFuncCalls*iBlockSize/iTotalTime.Int64()/KOneMB);
-		}
-	
-	INFO_PRINTF1(KT_ResultEnd);
-	}
-
-
-//Function:SetFilePathArrayL
-//Description : Adds all file paths to array
-void CT_F32BaseStep::SetFilePathArrayL()
-	{
-	//place all filepaths into an array
-	TFileName 	extNum=_L("");//placeholder
-	TFileName 	filename=iFileBaseName;
-	TFileName 	pathDepth=iDirBaseName;//parent base directory name
-
-  	for( TInt i=0; i<iDirTreeDepth; i++)
-		{
-		pathDepth+=iDirSubName;
- 		pathDepth+=KT_DirSpearator;
- 		for (TInt j=0; j<iNumOfFiles;j++)
- 			{
- 			extNum.Zero();
- 			extNum.AppendNum(j+1);
-			filename.Insert((filename.Find(KT_DotSeparator)),extNum);
-			filename.Insert(0,pathDepth);
-			iFilePathArray.AppendL(filename);
-			filename.Delete(0,((pathDepth.Length())));
-			filename.Delete((filename.Find(KT_DotSeparator)-1),extNum.Length());
-			}
-
-		}
-	}
-
-
-
-// Function CreateCsvFileL
-// Description
-// @return :void
-// @param:
-void CT_F32BaseStep::CreateCsvFileL()
-	{
-	RFs		session;
-	User::LeaveIfError(session.Connect());
-	CleanupClosePushL(session);
-
- 	RFile 	file;
-	if ( file.Open(session, iCsvFileName, EFileShareAny | EFileWrite)!=KErrNone )
-		{
-		User::LeaveIfError(file.Create(session, iCsvFileName, EFileShareAny | EFileWrite));
-		User::LeaveIfError(file.Open(session, iCsvFileName, EFileShareAny | EFileWrite));
-		INFO_PRINTF1(_L("Csv file successfully created "));
-		iPtr.Set(KT_CsvTitle);
-		AppendDataL(file, iPtr);
-		}
-	else
-		{
-		INFO_PRINTF1( _L("CSV File not created as already found!"));
-		}
-	CleanupClosePushL(file);
-
-	TInt 	pos=0;
-	User::LeaveIfError(file.Seek(ESeekEnd, pos));
-
-	//add results
-	TBuf<KMaxString>	buffer=_L("");
-	buffer.Append(iOperation);//name of operation
-	buffer.Append(KT_Comma);
-
-	buffer.AppendNum(iFuncCalls);//the number of calls
-	buffer.Append(KT_Comma);
-
-	buffer.AppendNum(iTotalTime.Int64());//the time taken
-	buffer.Append(KT_Comma);
-
-	buffer.AppendNum((iTotalTime.Int64()/ (TInt64)iFuncCalls));//the average time
-	buffer.Append(KT_NewLine);
-
-	iPtr.Set(buffer);
-	TInt 	appendData=AppendDataL(file,iPtr);
-	if (appendData!=KErrNone)
-		{
-		ERR_PRINTF2( _L("Adding Data to .Csv file failed errorcode (%d) "), appendData );
-		SetTestStepResult(EFail);
-		}
-
-	CleanupStack::PopAndDestroy(2, &session);
-	}
-
-// Function AppendDataL
-// Description
-// @return :TInt
-// @param:RFile& aFile,TDesC& aString
-TInt CT_F32BaseStep::AppendDataL( RFile& aFile,TDesC& aString)
-	{
-	TInt 	err=KErrNone;
-	HBufC8* tempbuf=HBufC8::NewLC(aString.Length());
-  	TPtr8 	data(tempbuf->Des());
-
-  	data.Copy(aString);
-  	err=aFile.Write(data);
-  	CleanupStack::PopAndDestroy(1,tempbuf);
-	return err;
-	}
--- a/baseapitest/basesvs/performance/f32/t_perf/src/EntryStep.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "EntryStep.h"
-
-
-/*@{*/
-// Literals Used
-_LIT(KT_DirSpearator,	"\\");
-/*@}*/
-
-
-// Function : CT_EntryStep()
-// Description :CT_EntryStep class constructor
-CT_EntryStep::CT_EntryStep()
-:	CT_F32BaseStep(EFalse)
-	{
-	SetTestStepName(KT_EntryStep);
-	}
-
-
-// Function : ~CT_EntryStep()
-// Description :CT_EntryStep class destructor
-CT_EntryStep::~CT_EntryStep()
-	{
-	iFilePathArray.Reset();
-	iFilePathArray.Close();
-	}
-
-
-// Function : doTestStepPreambleL()
-// Description :
-// @return :TVerdict EPass/EFail
-TVerdict CT_EntryStep::doTestStepPreambleL()
-	{
-	//call base class doTestStepPreambleL
-	TVerdict	result=CT_F32BaseStep::doTestStepPreambleL();	
-	//fill fulldir array with all paths
-	TFileName	pathDepth=iDirBaseName;//parent base directory name
-	TInt 		index=0;
-  	for(TInt i=0;i<iDirTreeDepth; i++)
-  		{
-  		pathDepth+=iDirSubName;
- 		pathDepth+=KT_DirSpearator;
-		iFilePathArray.InsertL(pathDepth,index);//dir add me
-  		for(TInt j=0; j<iNumOfFiles; j++)
-			{
-			index++;
-			}
-		index++;
-  		}
-	return result;
-	}
-
-
-// Function : ThreadFuncL()
-// @return :TInt
-// Description:Thread for performance entry test
-TInt CT_EntryStep::ThreadFuncL(RFs& aSession)
-	{
-	//Preparation
-	TInt 	result=KErrNone;
-	TInt 	contents=iNumOfFiles*iDirTreeDepth+iDirTreeDepth;
-	TEntry 	entry;
-	// Start timer
-	TTime 	startTime;
-	TTime 	endTime;
-	startTime.UniversalTime();
-	for(TInt i=0; (i<iFuncCalls) && (result==KErrNone); i++)
-		{
-		result=(aSession.Entry((iFilePathArray[i%contents]),entry));
-		}
-	endTime.UniversalTime();
-	iTotalTime=endTime.MicroSecondsFrom(startTime);	//Store time-taken
-	return result;
-	}
--- a/baseapitest/basesvs/performance/f32/t_perf/src/F32PerformanceServer.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "F32PerformanceServer.h"
-#include "EntryStep.h"
-#include "ReadFileStep.h"
-#include "SeekFileStep.h"
-#include "WriteFileStep.h"
-#include "UtilsCleanupStep.h"
-#include "UtilsSetupStep.h"
-
-
-
-// Function : CT_F32PerformanceServer
-// Description :CT_F32PerformanceServer class constructor			 
-// @return :CT_F32PerformanceServer		
-CT_F32PerformanceServer::CT_F32PerformanceServer()
-:CTestServer ()
-	{
-	
-	}
-
-
-// Function : NewL
-// @return	:An instance of test server 
-// Description: Same code for Secure and non-secure variants
-// Called inside the MainL() function to create and start the
-// CTestServer derived server.
-
-CT_F32PerformanceServer* 	CT_F32PerformanceServer::NewL()
-	{
-	CT_F32PerformanceServer* performServer=new(ELeave) 	CT_F32PerformanceServer();
-	CleanupStack::PushL(performServer);
-	performServer->ConstructL(KT_PerformServ);
-	CleanupStack::Pop(performServer);
-	return performServer;
-	}
-
-// Function : ~CT_F32PerformanceServer
-// Description :CT_F32PerformanceServer class destructor	
-CT_F32PerformanceServer::~CT_F32PerformanceServer()
-	{
-	
-	}
-
-
-// Function : MainL
-// Description:	Secure variant
-// 				Much simpler, uses the new Rendezvous() 
-//				call to sync with the client	
-LOCAL_C void MainL()
-	{
-	// Leave the hooks in for platform security
-	#if (defined __DATA_CAGING__)
-		RProcess().DataCaging(RProcess::EDataCagingOn);
-		RProcess().SecureApi(RProcess::ESecureApiOn);
-	#endif
-
-	CActiveScheduler*		performScheduler=NULL;
-	performScheduler=new(ELeave) CActiveScheduler;
-	//Install me as current ActiveScheduler
-	CActiveScheduler::Install(performScheduler);
-	CT_F32PerformanceServer*	server = NULL;
-	
-	// Create CT_ F32PerformanceServer(the CTestServer derived server)
-	TRAPD(err,server = CT_F32PerformanceServer::NewL());
-	if(!err)
-		{
-		// Sync with the client and enter this active scheduler
-		RProcess::Rendezvous(KErrNone);
-		performScheduler->Start();
-		}
-		
-	delete server;
-	delete 	performScheduler;
-	
-	}
-//End MainL
-	
-
-// Function : E32Main
-// @return  Standard Epoc error code on exit
-GLDEF_C TInt E32Main()
-	{
-	CTrapCleanup* cleanup = CTrapCleanup::New();
-	if(cleanup == NULL)
-		{
-		return KErrNoMemory;
-		}
-		
-	#if (defined TRAP_IGNORE)
-		TRAP_IGNORE(MainL());
-	#else
-		TRAPD(err,MainL());
-	#endif
-	
-	delete cleanup;
-	return KErrNone;
-	
-    }
-	
-
-// @return - A CTestStep derived instance
-// Description : Implementation of CTestServer pure virtual
-//  (i.e Creates the test steps) 
-//  @param :	aStepName	The name of the test step to be created
-CTestStep* CT_F32PerformanceServer::CreateTestStep(const TDesC& aStepName)
-	{
-	CTestStep*	testStep = NULL;
-	if (aStepName == KT_EntryStep)
-		{
-		testStep = new CT_EntryStep();
-		}
-	else if (aStepName ==KT_ReadFileStep)
-		{
-		testStep = new CT_ReadFileStep ();
-		}	
-	else if (aStepName==KT_SeekFileStep)
-		{
-		testStep= new  CT_SeekFileStep ();
-		}			
-	else if (aStepName==KT_WriteFileStep)
-		{
-		testStep= new CT_WriteFileStep ();
-		}
-	else if(aStepName==KT_CleanupStep)
-		{
-		testStep=new CT_CleanupStep();
-		}
-	else if (aStepName==KT_SetupStep)
-		{
-		testStep=new CT_SetupStep();
-		}	
-	return testStep;	
-	}
-
--- a/baseapitest/basesvs/performance/f32/t_perf/src/ReadFileStep.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "ReadFileStep.h"
-
-
-/*@{*/
-// Literals Used
-_LIT(KT_ReadSeek,	"readSeek");
-/*@}*/
-
-
-// Function : CT_ReadFileStep()
-// Description :CT_ReadFileStep() class constructor
-CT_ReadFileStep::CT_ReadFileStep()
-:	CT_SeekFileStep()
-,	iSeek(EFalse)
-	{
-	SetTestStepName(KT_ReadFileStep);
-	}
-
-
-// Function : ~CT_ReadFileStep()
-// Description :CT_ReadFileStep() class destructor
-CT_ReadFileStep::~CT_ReadFileStep()
-	{
-	}
-
-
-// Function : doTestStepPreambleL()
-// Description :
-// @return :TVerdict EPass/EFail
-TVerdict CT_ReadFileStep::doTestStepPreambleL()
-	{
-	//call Seek base class doTestStepPreambleL
-	TVerdict	ret=CT_SeekFileStep::doTestStepPreambleL();
-
-	//Set up seekread
-	if (!GetBoolFromConfig(ConfigSection(),KT_ReadSeek,iSeek))
-		{
-		//defaulting to constructor value
-		WARN_PRINTF2(_L("Using default seek value: (%d)"), iSeek);
-		}
-
-	return ret;
-	}
-
-
-
-
-// Function : ThreadFuncL()
-// Description:Thread for performance read test(s)
-// @return :TInt
-TInt CT_ReadFileStep::ThreadFuncL(RFs& /*aSession*/)
-	{
- 	RFile	file;	//	File that all operations are acted upon
-	//set up for either testcase
-	TInt	result=KErrNone;
-	HBufC8*	data=HBufC8::NewLC(iBlockSize);
-	TPtr8	buf(data->Des());
-	buf.SetLength(iBlockSize);
-	//test scenarios
-	if (iSeek)//perform seek read operation
-		{
-		TTime	startTime;
-		TTime	endTime;
-		TInt	pos=0;
-		TInt	i=0;
-		TInt	sizebuf=iFileSize-iBlockSize;
-		//start timer
-		startTime.UniversalTime();
-		for(i=0; (i<iFuncCalls) && (result==KErrNone); i++)
-			{
-			pos=i%2?sizebuf-i/2:i/2;
-			file=iFileArray[i%iNumOfFiles];
-			result=file.Read(pos,buf,iBlockSize);
-			}
-		//end timer
-		endTime.UniversalTime();
-
-		//calculate extra time taken for pos calc (file offset calc)
-		TInt	calls=i;
-		TInt	res=KErrNone;
-		TTime 	startPos;	// Start pos timer
-		TTime	endPos;	//End Pos timer
-		startPos.UniversalTime();
-		for(TInt j=0; (j<calls) && (res==KErrNone); j++)
-			{
-			pos=j%2?sizebuf-j/2:j/2;
-			file=iFileArray[j%iNumOfFiles];
-			}
-		endPos.UniversalTime();
-		endTime=endTime-(endPos.MicroSecondsFrom(startPos));
-		iTotalTime=endTime.MicroSecondsFrom(startTime);//Store time-taken
-		}
-	else //perform read operation only
-		{
-		TInt	i=0;
-		TInt	pos=0;
-		TInt	sizebuf=iFileSize-iBlockSize;
-		TTime	startTime;
-		TTime	endTime;	//End timer
-		startTime.UniversalTime();	// Start timer
-		for(i=0; (i<iFuncCalls) && (result==KErrNone); i++)
-			{
-			pos=i%2?sizebuf-i/2:i/2;
-			file=iFileArray[i%iNumOfFiles];
-			User::LeaveIfError(file.Seek(iSeekMode,pos));
-			result=(file.Read(buf,iBlockSize));
-			}
-		endTime.UniversalTime();
-
-		//calculate extra time taken during seek file and remove
-		TInt	calls=i;
-		TInt	res=KErrNone;
-		TTime	startSeek;	// Start seek timer
-		TTime 	endSeek;	//End Seek timer
-		startSeek.UniversalTime();
-		for(TInt j=0; (j<calls) && (res==KErrNone); j++)
-			{
-			pos=j%2?sizebuf-j/2:j/2;
-			file=iFileArray[j%iNumOfFiles];
-			User::LeaveIfError(file.Seek(iSeekMode,pos));
-			}
-		endSeek.UniversalTime();
-		endTime=endTime-(endSeek.MicroSecondsFrom(startSeek));
-		iTotalTime=endTime.MicroSecondsFrom(startTime);	//Store time-taken
-		}
-	//End Test Scenarios
-	CleanupStack::PopAndDestroy(1, data);// data
-	return result;
- 	}
--- a/baseapitest/basesvs/performance/f32/t_perf/src/SeekFileStep.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "SeekFileStep.h"
-
-/*@{*/
-// Literals Used
-_LIT(KT_SeekMode,						"seekMode");
-_LIT(KT_SeekStart,						"ESeekStart");
-_LIT(KT_SeekCurrent,					"ESeekCurrent");
-_LIT(KT_SeekEnd,						"ESeekEnd ");
-/*@}*/
-
-
-
-
-// Function : CT_SeekFileStep
-// Description :CT_SeekFileStep class constructor
-CT_SeekFileStep ::CT_SeekFileStep ()
-:	CT_F32BaseStep(ETrue)
-,	iSeekMode(ESeekStart)//default
-	{
-	SetTestStepName(KT_SeekFileStep);
-	}
-
-
-
-
-// Function : ~CT_SeekFileStep
-// Description :CT_SeekFileStep class destructor
-CT_SeekFileStep ::~CT_SeekFileStep ()
-	{
-	}
-
-
-// Function : doTestStepPreambleL()
-// Description :
-// @return :TVerdict EPass/EFail
-TVerdict CT_SeekFileStep ::doTestStepPreambleL()
-	{
-	//call base class doTestStepPreambleL
-	TVerdict 	result=CT_F32BaseStep::doTestStepPreambleL();
-
-	TPtrC 	seekmode;
-	if (!GetStringFromConfig(ConfigSection(),KT_SeekMode,seekmode))
-		{
-		SetSeekMode(seekmode);	//set data:seekmode
-		WARN_PRINTF1( _L("Corrupt seekmode will revert to default:ESeekStart"));
-		}	
-	return result;
-	}
-
-
-
-// Function : SetSeekMode
-// Description :
-//@param :TDesC& aSeekmode
-void CT_SeekFileStep::SetSeekMode(TDesC& aSeekmode)
-	{
-	if (aSeekmode==KT_SeekStart)
-		{
-		iSeekMode=ESeekStart;
-		}
-	else if (aSeekmode==KT_SeekCurrent)
-		{
-		iSeekMode=ESeekCurrent;
-		}
-	else if (aSeekmode==KT_SeekEnd)
-		{
-		iSeekMode=ESeekCurrent;
-		}
-	else
-		{
-		iSeekMode=ESeekStart;//default
-		}
-	}
-
-
-// Function : ThreadFunc
-// Description :Thread call back that seeks positions in files
-// @return :TInt
-TInt CT_SeekFileStep::ThreadFuncL(RFs& /*aSession*/)
-	{
- 	RFile	file;	//	File that all operations are acted upon
- 	//set up
-	TInt	result=KErrNone;
-	HBufC8*	data=HBufC8::NewLC(iBlockSize);
-  	TPtr8	buf(data->Des());
-  	buf.SetLength(iBlockSize);
-
-  	TInt 	i=0;
-	TInt 	pos=0;
-	TInt 	sizebuf=iFileSize-iBlockSize;
-	TTime 	startTime;
-	TTime 	endTime;	//End timer
-	startTime.UniversalTime();		// Start timer
-	for(i=0; (i<iFuncCalls) && (result==KErrNone);i++)
-		{
-		pos=i%2?sizebuf-i/2:i/2;
-		file=iFileArray[i%iNumOfFiles];
-		result=(file.Seek(iSeekMode,pos));
-		}
-	endTime.UniversalTime();
-
-	//calculate extra time taken for pos calc (file offset calc)
-	TInt	calls=i;
-	TInt	res=KErrNone;
-	TTime 	startPos;	// Start pos timer
-	TTime 	endPos;	//End Pos timer
-	startPos.UniversalTime();
-	for(TInt j=0; (j<calls) && (res==KErrNone); j++)
-		{
-		pos=j%2?sizebuf-j/2:j/2;
-		file=iFileArray[j%iNumOfFiles];
-		}
-	endPos.UniversalTime();
-	endTime=endTime-(endPos.MicroSecondsFrom(startPos));
-	iTotalTime=endTime.MicroSecondsFrom(startTime);	//Store time-taken
-
-	CleanupStack::PopAndDestroy(1, data);// data
-	return result;
- 	}
--- a/baseapitest/basesvs/performance/f32/t_perf/src/UtilsCleanupStep.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "UtilsCleanupStep.h"
-
-
-
-// Function : CT_CleanupStep
-// Description :CT_CleanupStep:: class constructor
-CT_CleanupStep::CT_CleanupStep()
-:	CT_UtilsStep()
-	{
-	}
-
-
-// Function : ~CT_CleanupStep
-// Description :CT_CleanupStep class destructor
-CT_CleanupStep:: ~CT_CleanupStep()
-	{
-	}
-
-//Function:doTestStepL
-//Description :
-//@return TVerdict pass / fail
-TVerdict CT_CleanupStep::doTestStepL()
-	{
-	//clean up dir
-	INFO_PRINTF1( _L("Removing directory: connecting to session"));
-	if (RemoveDirTreeL()==KErrNone)
-		{
-		DoFormatDriveL();
-		}
-
-	return TestStepResult();
-	}
--- a/baseapitest/basesvs/performance/f32/t_perf/src/UtilsSetupStep.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "UtilsSetupStep.h"
-
-/*@{*/
-// Literals Used
-_LIT(KT_FileSize,		"fileSize");
-_LIT(KT_NumOfFiles,		"numOfFiles");
-_LIT(KT_DirTreeDepth,	"dirTreeDepth");
-_LIT(KT_BaseFileName,	"fileBaseName");
-_LIT(KT_SubDirName,		"subDirName");
-_LIT(KT_FileData,		"fileData");
-_LIT(KT_DotSeparator,	".");
-_LIT(KT_DirSpearator,	"\\");
-/*@}*/
-
-// Function : CT_SetupStep
-// Description :CT_SetupStep:: class constructor
-CT_SetupStep::CT_SetupStep()
-:	CT_UtilsStep()
-,	iFileSize(0)
-,	iDirTreeDepth(0)
-,	iNumOfFiles(0)
-	{
-	}
-
-// Function : ~CT_SetupStep
-// Description :CT_SetupStep class destructor
-CT_SetupStep:: ~CT_SetupStep()
-	{
-	}
-
-//Function:doTestStepL
-//Description :
-//@return TVerdict pass / fail
-TVerdict CT_SetupStep::doTestStepL()
-	{
-	INFO_PRINTF1(_L("Starting CT_SetupStepdoTestStepL"));
-	//create directory structure and contents
-    CreateDirTreeL();
-	INFO_PRINTF1(_L("CT_SetupStep Completed doTestStepL"));
-	return TestStepResult();
-	}
-
-//Function:doTestStepPreambleL
-//Description :
-//@return TVerdict pass / fail
-TVerdict CT_SetupStep::doTestStepPreambleL()
-	{
-	INFO_PRINTF1(_L("Test Step :Perf SetupStep Preamble setup"));
-	INFO_PRINTF1(_L("Initiating: :Perf Utils step Preamble  setup"));
-	//call Utils base class doTestStepPreambleL
-	TVerdict 	result= CT_UtilsStep::doTestStepPreambleL();
-	CT_UtilsStep::DoFormatDriveL();	//format drive if requested
-
-	if (!GetIntFromConfig(ConfigSection(),KT_FileSize,iFileSize))
-		{
-		ERR_PRINTF2( _L("Invalid fileSize given, file size set to: (%d)"), iFileSize );
-		SetTestStepResult(EFail);
-		}
-	if (!GetIntFromConfig(ConfigSection(),KT_DirTreeDepth,iDirTreeDepth))
-		{
-		ERR_PRINTF2( _L("Invalid directory tree depth given, it is set to:...(%d)"),iDirTreeDepth);
-		SetTestStepResult(EFail);
-		}
-	if (!GetIntFromConfig(ConfigSection(),KT_NumOfFiles,iNumOfFiles))
-		{
-		ERR_PRINTF2( _L("Invalid number of files to create, it is set to: (%d) "), iNumOfFiles );
-		SetTestStepResult(EFail);
-		}
-	if(!GetStringFromConfig(ConfigSection(),KT_BaseFileName,iFileBaseName))
-		{
-		ERR_PRINTF1( _L("Unable to read file name to create, Will not be able to create file structure:!! ") );
-		SetTestStepResult(EFail);
-		}
-	if (!GetStringFromConfig(ConfigSection(),KT_SubDirName,iDirSubName))
-		{
-		ERR_PRINTF1( _L("Unable to read in sub directory name to use within test, Will not be able to create a directory structure! ") );
-		SetTestStepResult(EFail);
-		}
-	if (!GetStringFromConfig(ConfigSection(),KT_FileData,iFileData))
-		{
-		ERR_PRINTF1( _L("Unable to read file Data to use within test, Will not be able to create files with any data!") );
-		SetTestStepResult(EFail);
-		}
-
-	return 	result;
-	}
-
-
-
-
-// Function CreateDirTreeL
-// Description
-// @return :void
-void CT_SetupStep::CreateDirTreeL()
-	{
-    RDir dir;
-    TFileName 	pathDepth=iDirBaseName;
-    TInt err=dir.Open(iFsSession, pathDepth, KEntryAttNormal);
-
-    if (err!=KErrNone)
-		{
- 		RemoveDirTreeL();
-		}
-	else
-		{
-	    dir.Close();//close dir
-		}
-
-	//	Create directory tree
-	for (TInt i=0;i<iDirTreeDepth ;i++)//offset due to parent dir
-		{
-		pathDepth+=iDirSubName;
-		pathDepth+=KT_DirSpearator;
-		}
-	User::LeaveIfError(iFsSession.MkDirAll(pathDepth));
-
-	//	Create files in each directory
-	pathDepth=iDirBaseName;
-	for (TInt j=0;j<iDirTreeDepth ;j++)//offset due to parent dir
-		{
-		pathDepth+=iDirSubName;
-		pathDepth+=KT_DirSpearator;
-		CreateFileL(pathDepth);
-		}
-	}
-
-
-// Function CreateFileL
-// Description
-// @return :void
-// @param:TDesC& aPath
-void CT_SetupStep::	CreateFileL(TDesC& aPath)
-	{
-	RFile 		file;
-	//	File names are of the type filename1.ext, filename2.ext, etc, so create first file with "1" attached to it
- 	TFileName 	extNum=_L("");//placeholder
-	extNum.AppendNum(1);
-	TFileName 	firstFilename=aPath;
-	firstFilename.Append(iFileBaseName);
-	firstFilename.Insert((firstFilename.Find(KT_DotSeparator)), extNum);
-	TInt 	opened=file.Open(iFsSession, firstFilename, EFileStream);
-	if ( opened!=KErrNone )
-		{
-		opened=file.Create(iFsSession, firstFilename, EFileStream);
-		}
-
-	if ( opened==KErrNone )
-		{
-		CleanupClosePushL(file);//make handle leave safe
-		CreateFileDataL(file);
-		CleanupStack::PopAndDestroy(&file);
-
-		//	Copy first file to subsequent files
-		CFileMan*	fileMan=CFileMan::NewL(iFsSession);
-		CleanupStack::PushL(fileMan);
-		for (TInt i=1;i<iNumOfFiles; i++)
-			{
-			extNum.Zero();
-			extNum.AppendNum(i+1);
-			TFileName 	newFilename=aPath;
-			newFilename.Append(iFileBaseName);
-			newFilename.Insert((newFilename.Find(KT_DotSeparator)), extNum);
-			fileMan->Copy(firstFilename, newFilename);
-			}
-		CleanupStack::PopAndDestroy(fileMan);
-		}
-	else
-		{
-		ERR_PRINTF2( _L("File  not created failed with error (%d)"), opened);
-		SetTestStepResult(EFail);
-		}
-	}
-
-
-// Function : CreateFileDataL
-// Description
-// @return :void
-// @param:RFile& aFile
-void    CT_SetupStep::CreateFileDataL(RFile& aFile)
-	{
-	HBufC8* tempbuf=HBufC8::NewLC(iFileData.Length());
-  	TPtr8 	data(tempbuf->Des());
-  	data.Copy(iFileData);
-
-  	TInt 	filelength=iFileSize/iFileData.Length();
-  	for (TInt i=0;i<filelength;i++)
-		{
-		TInt 	err= aFile.Write(data);//Write(const TDesC8 &aDes);
-		if(err!=KErrNone)
-			{
-			ERR_PRINTF2( _L("File data not successful failed with error: (%d)"),err);
-			SetTestStepResult(EFail);
-			}
-		}
-
-	CleanupStack::PopAndDestroy(1,tempbuf);
-	}
--- a/baseapitest/basesvs/performance/f32/t_perf/src/UtilsStep.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "UtilsStep.h"
-
-/*@{*/
-// Literals Used
-_LIT(KT_FormatDrive,	"formatDrive");
-_LIT(KT_BaseDirName,	"baseDirName");
-/*@}*/
-
-// Function : CT_UtilsStep
-// Description :CT_UtilsStep:: class constructor
-CT_UtilsStep::CT_UtilsStep()
-:	CTestStepV2()
-,	iFormatDrive(EFalse)
-	{
-	}
-
-
-// Function : ~CT_UtilsStep
-// Description :CT_UtilsStep class destructor
-CT_UtilsStep::~CT_UtilsStep()
-	{
-	iFsSession.Close();
-	}
-
-
-
-//Function:doTestStepPreambleL
-//Description :
-//@return TVerdict pass / fail
-TVerdict CT_UtilsStep::doTestStepPreambleL()
-	{
-	INFO_PRINTF1(_L("Test Step :Perf Utils step Preamble setup"));
-	TVerdict	ret=CTestStepV2::doTestStepPreambleL();
-
-	if (!GetBoolFromConfig(ConfigSection(),KT_FormatDrive,iFormatDrive))
-		{
-		WARN_PRINTF1(_L("Warning: No Boolean given to indicate a format of drive! \n Using default and not formatting drive "));
-		}
-	if (!GetStringFromConfig(ConfigSection(), KT_BaseDirName, iDirBaseName))
-		{
-		ERR_PRINTF1( _L("Unable to read in parent directory name to use within test, Will not be able to create a directory structure! ") );
-		ret=EFail;
-		SetTestStepResult(EFail);
-		}
-
-	User::LeaveIfError(iFsSession.Connect());
-
-	return TestStepResult();
-	}
-
-// Function DoFormatDriveL
-// Description
-void CT_UtilsStep::DoFormatDriveL()
-	{
-	if ( iFormatDrive )
-		{
-		TPtrC	driveName=iDirBaseName.Left(2);	// X:
-		RFormat	format;
-		TInt	tracksRemaining = 0;
-		TInt	errformat=format.Open(iFsSession, driveName, EHighDensity, tracksRemaining);
-		CleanupClosePushL(format);
-		while ( tracksRemaining && (errformat==KErrNone) )
-   			{
-   			errformat=format.Next(tracksRemaining);
-   			}
-		if (errformat!=KErrNone)
-			{
-			ERR_PRINTF2( _L("Format not successfully failed with error::...(%d)"), errformat);
-			SetTestStepResult(EFail);
-			}
-		CleanupStack::PopAndDestroy(&format);
-		}
-	}
-
-//Function:RemoveDirTreeL
-//Description :
-//@param TDesC& aDir
-//@return TVerdict
-TInt CT_UtilsStep::RemoveDirTreeL()
-	{
-	CFileMan*	fileMan=CFileMan::NewL(iFsSession);
-	CleanupStack::PushL(fileMan);
-
-	TInt		err=fileMan->RmDir(iDirBaseName);
-	CleanupStack::PopAndDestroy(fileMan);
-
-	return	err;
-	}
--- a/baseapitest/basesvs/performance/f32/t_perf/src/WriteFileStep.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "WriteFileStep.h"
-
-
-/*@{*/
-// Literals Used
-_LIT(KT_WriteSeek,	"writeSeek");
-/*@}*/
-
-
-// Function : CT_WriteFileStep
-// Description :CT_WriteFileStep class constructor
-CT_WriteFileStep ::CT_WriteFileStep ()
-:	CT_SeekFileStep()
-,	iSeek(EFalse)
-	{
-	SetTestStepName(KT_WriteFileStep);
-	}
-
-
-// Function : ~CT_WriteFileStep
-// Description :CT_WriteFileStep class destructor
-CT_WriteFileStep ::~CT_WriteFileStep ()
-	{
-	}
-
-
-// Function : doTestStepPreambleL()
-// Description :
-// @return :TVerdict EPass/EFail
-TVerdict CT_WriteFileStep ::doTestStepPreambleL()
-	{
-	//call Seek base class doTestStepPreambleL
-	TVerdict	ret=CT_SeekFileStep::doTestStepPreambleL();
-
-	//Set up seekwrite
-	if (!GetBoolFromConfig(ConfigSection(),KT_WriteSeek,iSeek))
-		{
-		//defaulting to constructor value
-		WARN_PRINTF2(_L("Using default seek value: (%d)"), iSeek);
-		}
-
-	return ret;
-	}
-
-
-
-
-// Function : ThreadFuncL()
-// Description : Thread for performance write test(s)
-// @return :TInt
-TInt CT_WriteFileStep::ThreadFuncL(RFs& /*aSession*/)
-	{
- 	RFile	file;	//	File that all operations are acted upon
-	//set up for either testcase
-	TInt	result=KErrNone;
-	HBufC8*	data=HBufC8::NewLC(iBlockSize);
-	TPtr8	buf(data->Des());
-	buf.SetLength(iBlockSize);
-	//test scenarios
-	if (iSeek)//perform seek read operation
-		{
-		TTime	startTime;
-		TTime	endTime;
-		TInt	pos=0;
-		TInt	i=0;
-		TInt	sizebuf=iFileSize-iBlockSize;
-		//start timer
-		startTime.UniversalTime();
-		for(i=0; (i<iFuncCalls) && (result==KErrNone); i++)
-			{
-			pos=i%2?sizebuf-i/2:i/2;
-			file=iFileArray[i%iNumOfFiles];
-			result=file.Write(pos,buf,iBlockSize);
-			}
-		//end timer
-		endTime.UniversalTime();
-
-		//calculate extra time taken for pos calc (file offset calc)
-		TInt	calls=i;
-		TInt	res=KErrNone;
-		TTime 	startPos;	// Start pos timer
-		TTime	endPos;	//End Pos timer
-		startPos.UniversalTime();
-		for(TInt j=0; (j<calls) && (res==KErrNone); j++)
-			{
-			pos=j%2?sizebuf-j/2:j/2;
-			file=iFileArray[j%iNumOfFiles];
-			}
-		endPos.UniversalTime();
-		endTime=endTime-(endPos.MicroSecondsFrom(startPos));
-		iTotalTime=endTime.MicroSecondsFrom(startTime);//Store time-taken
-		}
-	else //perform read operation only
-		{
-		TInt	i=0;
-		TInt	pos=0;
-		TInt	sizebuf=iFileSize-iBlockSize;
-		TTime	startTime;
-		TTime	endTime;	//End timer
-		startTime.UniversalTime();	// Start timer
-		for(i=0; (i<iFuncCalls) && (result==KErrNone); i++)
-			{
-			pos=i%2?sizebuf-i/2:i/2;
-			file=iFileArray[i%iNumOfFiles];
-			User::LeaveIfError(file.Seek(iSeekMode,pos));
-			result=(file.Write(buf,iBlockSize));
-			}
-		endTime.UniversalTime();
-
-		//calculate extra time taken during seek file and remove
-		TInt	calls=i;
-		TInt	res=KErrNone;
-		TTime	startSeek;	// Start seek timer
-		TTime 	endSeek;	//End Seek timer
-		startSeek.UniversalTime();
-		for(TInt j=0; (j<calls) && (res==KErrNone); j++)
-			{
-			pos=j%2?sizebuf-j/2:j/2;
-			file=iFileArray[j%iNumOfFiles];
-			User::LeaveIfError(file.Seek(iSeekMode,pos));
-			}
-		endSeek.UniversalTime();
-		endTime=endTime-(endSeek.MicroSecondsFrom(startSeek));
-		iTotalTime=endTime.MicroSecondsFrom(startTime);	//Store time-taken
-		}
-	//End Test Scenarios
-	CleanupStack::PopAndDestroy(1, data);// data
-	return result;
- 	}
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/armv5/base_perf_f32_env.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-##########################################################
-#This section defines the default configuration for the base performance f32 test suite
-##########################################################
-[Default]
-
-#Default name of the .CSV file that will hold readable results
-csvFileName	=\f32-perfResults.csv
-
-#Defines the default name of the thread handle to be created.
-threadname	=thread
-
-#Defines a default integer that specifies the stack size allocated to the thread handle Set to 0x2000
-stacksize	=2000
-
-#Defines a default integer that specifies the  minimum heap size allocated to the thread handle. Currently set to 256 KB OR 0x100
-minheapsize	=100
-
-#Defines a default that specifies the maximum heap size allocated to the thread handle. Currently set to 1MB or 0x100
-maxheapsize	=100000
-
-#Defines a default  TOwnerType enumeration value which defines the ownership of this thread handle. Currently set to EOwnerProcess.
-ownertype	=EOwnerProcess
-
-#Defines a default TThreadPriority enumeration value which defines the priority of the thread handle. Currently set to EPriorityLess.
-#Please note that enumeration values supported are EPriorityLess ,EPriorityNormal,EPriorityMore,EPriorityRealTime,EPriorityAbsoluteForeground
-#EPriorityAbsoluteBackground
-threadpriority	=EPriorityLess
-
-
-# Default writable drive. This drive is used for creating temporary test files on it.
-# This must be the character of the drive, the default value is 'E'.
-driveName	=E:
-
-# Defines a boolean value that indicates whether a drive is to be formatted during a test.
-# This must be a boolean value.
-formatDrive	=EFalse
-
-#Defines  the name of the parent test directory that will be used to store the test directory.
-baseDirName	={Default, driveName}\F32-PfTst\
-
-#Defines  the name of the actual test directory that will  be used for keeping test files.
-#Please note that the name give to this directory should not contain a dot '.'
-
-subDirName	=F
-
-#Defines the name of the test file that will be use within the each test.
-#Each file will be appended with an incrementing number.
-#Please note that a file name should contain a dot within it (even if a  file extension is not specified)
-#i.e: <filename>.<file-extension>  or <filename>.
-fileBaseName	=File.txt
-
-#Defines the content of the file(s)
-fileData	=This is some file data to be used for performance only testsThis is some file data to be used for performance only testsThis is some file data to be used for performance only testsThis is some file data to be used for performance only tests
-
-#Defines an integer number that represents the default number of directories to create in the base directory
-dirTreeDepth	=31
-
-#Defines an integer number that represents the default number of files to create in each directory
-numOfFiles	=5
-
-#Defines an integer number that represents the default file size  in bytes of each file to create. This is set to 128 kb or 1024 x128 bytes by default
-fileSize	=131072
-
-#Defines an integer number that represents the number of times the api will be tested
-small		=100
-
-#Defines an integer number that represents the number of times the api will be tested
-medium		=500
-
-#Defines an integer number that represents the number of times the api will be tested
-large		=1000
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#XSBytes represents an extra small number of bytes by default this value is 16 bytes
-XSBytes		=16
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#SBytes represents an small number of bytes by default this value is 512 bytes
-SBytes		=512
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#MBytes represents an medium number of bytes by default this value is 512 bytes
-MBytes		=4096
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#LBytes represents an large number of bytes by default this value is 32768 bytes
-LBytes		=32768
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#XLBytes represents an extra large number of bytes by default this value is 65536 bytes
-XLBytes		=65536
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfile-performance-large.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,485 +0,0 @@
-[include]
-file1		=\base\performance\f32\base_perf_f32_env.ini
-file2		=\base\performance\f32\pbase-f32-rfile-performance-utils.ini
-
-[pbase-f32-rfile-performance-large-0001-0001]
-operation	=ReadXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0001-0002]
-operation	=ReadSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0001-0003]
-operation	=ReadMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0001-0004]
-operation	=ReadLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0001-0005]
-operation	=ReadExtraLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0002-0001]
-operation	=ReadSeekXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0002-0002]
-operation	=ReadSeekSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0002-0003]
-operation	=ReadSeekMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0002-0004]
-operation	=ReadSeekLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0002-0005]
-operation	=ReadSeekXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0003-0001]
-operation	=Seek
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	=0
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0004-0001]
-operation	=WriteXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0004-0002]
-operation	=WriteSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0004-0003]
-operation	=WriteMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0004-0004]
-operation	=WriteLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0004-0005]
-operation	=WriteXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0005-0001]
-operation	=WriteSeekXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0005-0002]
-operation	=WriteSeekSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0005-0003]
-operation	=WriteSeekMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0005-0004]
-operation	=WriteSeekLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-large-0005-0005]
-operation	=WriteSeekXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfile-performance-medium.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,487 +0,0 @@
-[include]
-file1		=\base\performance\f32\base_perf_f32_env.ini
-file2		=\base\performance\f32\pbase-f32-rfile-performance-utils.ini
-
-[pbase-f32-rfile-performance-medium-0001-0001]
-operation	=ReadXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0001-0002]
-operation	=ReadSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0001-0003]
-operation	=ReadMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0001-0004]
-operation	=ReadLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0001-0005]
-operation	=ReadExtraLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0002-0001]
-operation	=ReadSeekXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0002-0002]
-operation	=ReadSeekSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0002-0003]
-operation	=ReadSeekMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0002-0004]
-operation	=ReadSeekLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0002-0005]
-operation	=ReadSeekXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0003-0001]
-operation	=Seek
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	=0
-seekMode	=ESeekStart
-
-
-
-[pbase-f32-rfile-performance-medium-0004-0001]
-operation	=WriteXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0004-0002]
-operation	=WriteSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0004-0003]
-operation	=WriteMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0004-0004]
-operation	=WriteLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0004-0005]
-operation	=WriteXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0005-0001]
-operation	=WriteSeekXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0005-0002]
-operation	=WriteSeekSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0005-0003]
-operation	=WriteSeekMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0005-0004]
-operation	=WriteSeekLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-medium-0005-0005]
-operation	=WriteSeekXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfile-performance-small.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,486 +0,0 @@
-[include]
-file1		=\base\performance\f32\base_perf_f32_env.ini
-file2		=\base\performance\f32\pbase-f32-rfile-performance-utils.ini
-
-[pbase-f32-rfile-performance-small-0001-0001]
-operation	=ReadXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0001-0002]
-operation	=ReadSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0001-0003]
-operation	=ReadMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0001-0004]
-operation	=ReadLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0001-0005]
-operation	=ReadExtraLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-readSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0002-0001]
-operation	=ReadSeekXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0002-0002]
-operation	=ReadSeekSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0002-0003]
-operation	=ReadSeekMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0002-0004]
-operation	=ReadSeekLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0002-0005]
-operation	=ReadSeekXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-readSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0003-0001]
-operation	=Seek
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	=0
-seekMode	=ESeekStart
-
-
-[pbase-f32-rfile-performance-small-0004-0001]
-operation	=WriteXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0004-0002]
-operation	=WriteSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0004-0003]
-operation	=WriteMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0004-0004]
-operation	=WriteLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0004-0005]
-operation	=WriteXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-writeSeek	=FALSE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0005-0001]
-operation	=WriteSeekXSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XSBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0005-0002]
-operation	=WriteSeekSmallBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,SBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0005-0003]
-operation	=WriteSeekMediumBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,MBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0005-0004]
-operation	=WriteSeekLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,LBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
-
-[pbase-f32-rfile-performance-small-0005-0005]
-operation	=WriteSeekXLargeBytes
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
-blockSize	={Default,XLBytes}
-writeSeek	=TRUE
-seekMode	=ESeekStart
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfile-performance-utils.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-[Utils]
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfs-performance-large.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-[include]
-file1		=\base\performance\f32\base_perf_f32_env.ini
-
-[pbase-f32-rfs-performance-large-entry-0001-0001]
-operation	=entry
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,large}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfs-performance-medium.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-[include]
-file1		=\base\performance\f32\base_perf_f32_env.ini
-
-[pbase-f32-rfs-performance-medium-entry-0001]
-operation	=entry
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,medium}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/pbase-f32-rfs-performance-small.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-[include]
-file1		=\base\performance\f32\base_perf_f32_env.ini
-
-[pbase-f32-rfs-performance-small-entry-0001-0001]
-operation	=entry
-formatDrive	={Default,formatDrive}
-driveName	={Default,driveName}
-fileData	={Default,fileData}
-fileBaseName	={Default,fileBaseName}
-baseDirName	={Default,baseDirName}
-subDirName	={Default,subDirName}
-threadname	={Default,threadname}
-stacksize	={Default,stacksize}
-minheapsize	={Default,minheapsize}
-maxheapsize	={Default,maxheapsize}
-ownertype	={Default,ownertype}
-threadpriority	={Default,threadpriority}
-csvFileName	={Default,csvFileName}
-functionCalls	={Default,small}
-dirTreeDepth	={Default,dirTreeDepth}
-numOfFiles	={Default,numOfFiles}
-fileSize	={Default,fileSize}
--- a/baseapitest/basesvs/performance/f32/t_perf/testdata/winscw/base_perf_f32_env.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-##########################################################
-#This section defines the default configuration for the base performance f32 test suite
-##########################################################
-[Default]
-
-#Default name of the .CSV file that will hold readable results
-csvFileName	=\f32-perfResults.csv
-
-#Defines the default name of the thread handle to be created.
-threadname	=thread
-
-#Defines a default integer that specifies the stack size allocated to the thread handle Set to 0x2000
-stacksize	=2000
-
-#Defines a default integer that specifies the  minimum heap size allocated to the thread handle. Currently set to 256 KB OR 0x100
-minheapsize	=100
-
-#Defines a default that specifies the maximum heap size allocated to the thread handle. Currently set to 1MB or 0x100
-maxheapsize	=100000
-
-#Defines a default  TOwnerType enumeration value which defines the ownership of this thread handle. Currently set to EOwnerProcess.
-ownertype	=EOwnerProcess
-
-#Defines a default TThreadPriority enumeration value which defines the priority of the thread handle. Currently set to EPriorityLess.
-#Please note that enumeration values supported are EPriorityLess ,EPriorityNormal,EPriorityMore,EPriorityRealTime,EPriorityAbsoluteForeground
-#EPriorityAbsoluteBackground
-threadpriority	=EPriorityLess
-
-# Default writable drive. This drive is used for creating temporary test files on it.
-# This must be the character of the drive, the default value is 'C'.
-driveName	=C:
-
-# Defines a boolean value that indicates whether a drive is to be formatted during a test.
-# This must be a boolean value.
-formatDrive	=EFalse
-
-#Defines  the name of the parent test directory that will be used to store the test directory.
-baseDirName	={Default, driveName}\F32-PfTst\
-
-#Defines  the name of the actual test directory that will  be used for keeping test files.
-#Please note that the name give to this directory should not contain a dot '.'
-
-subDirName	=F
-
-#Defines the name of the test file that will be use within the each test.
-#Each file will be appeneded with an incrementing number.
-#Please note that a file name should contain a dot within it (even if a  file extension is not specified)
-#i.e: <filename>.<file-extension>  or <filename>.
-fileBaseName	=File.txt
-
-#Defines the content of the file(s)
-fileData	=This is some file data to be used for performance only testsThis is some file data to be used for performance only testsThis is some file data to be used for performance only testsThis is some file data to be used for performance only tests
-
-#Defines an integer number that represents the default number of directories to create in the base directory
-dirTreeDepth	=31
-
-#Defines an integer number that represents the default number of files to create in each directory
-numOfFiles	=5
-
-#Defines an integer number that represents the default file size  in bytes of each file to create. This is set to 128 kb or 1024 x128bytes by default
-fileSize	=131072
-
-#Defines an integer number that represents the number of times the api will be tested
-small		=100
-
-#Defines an integer number that represents the number of times the api will be tested
-medium		=500
-
-#Defines an integer number that represents the number of times the api will be tested
-large		=1000
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#XSBytes represents an extra small number of bytes by default this value is 16 bytes
-XSBytes		=16
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#SBytes represents an small number of bytes by default this value is 512 bytes
-SBytes		=512
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#MBytes represents an medium number of bytes by default this value is 512 bytes
-MBytes		=4096
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#LBytes represents an large number of bytes by default this value is 32768 bytes
-LBytes		=32768
-
-#Defines  an integer number that represents a blocksize in bytes that can either be read into a file or written to a file
-#XLBytes represents an extra large number of bytes by default this value is 65536 bytes
-XLBytes		=65536
--- a/baseapitest/basesvs/prompt/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-PRJ_PLATFORMS
-
-PRJ_TESTMMPFILES
-t_prompt.mmp
--- a/baseapitest/basesvs/prompt/group/t_prompt.mmp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-TARGET			t_prompt.exe
-TARGETTYPE		exe
-UID				0x1000007A 0x200041C9
-VENDORID 		0x70000001
-
-CAPABILITY 		None
-
-SOURCEPATH		../src
-SOURCE			t_prompt.cpp
-
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY			euser.lib
-LIBRARY			efile.lib
-SMPSAFE
--- a/baseapitest/basesvs/prompt/src/t_prompt.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include <e32base.h>
-#include <e32cons.h>
-#include <e32std.h>
-
-/*@{*/
-const TInt KDefaultInterval			= 5000000;
-_LIT(KPromptPressAnyKey,			"And press any key to continue...");
-_LIT(KPromptConsole,				"TEF");
-_LIT(KPromptMMCMessage,				"After hitting a key to continue, eject and insert the MMC card (press F5 and release on the emulator).\n");
-/*@}*/
-
-
-LOCAL_C void MainL()
-/**
- * Secure variant, contain the prompt console
- */
-	{
-	CConsoleBase 	*console = Console::NewL(KPromptConsole, 
-		TSize(KConsFullScreen,KConsFullScreen));
-	CleanupStack::PushL(console);
-
-    console->Printf(KPromptMMCMessage);
-	console->Printf(KPromptPressAnyKey);
-
-	TRequestStatus	timerStatus;
-	RTimer			timer;
-	CleanupClosePushL(timer);
-	timer.CreateLocal();
-	timer.After(timerStatus, TTimeIntervalMicroSeconds32(KDefaultInterval));
-
-	TRequestStatus	readStatus;
-	console->Read(readStatus);
-
-	User::WaitForRequest(timerStatus, readStatus);
-	if ( timerStatus!=KErrNone )
-		{
-		timer.Cancel();
-		User::WaitForRequest(timerStatus);
-		}
-	if ( readStatus==KRequestPending )
-		{
-		console->ReadCancel();
-		User::WaitForRequest(readStatus);
-		}
-
-	CleanupStack::PopAndDestroy(2, console);
-	}
-
-
-GLDEF_C TInt E32Main()
-/**
- * @return - Standard Epoc error code on process exit
- * Secure variant only
- * Process entry point. Called by client using RProcess API
- */
-	{
-	CTrapCleanup* cleanup = CTrapCleanup::New();
-	if(cleanup == NULL)
-		{
-		RProcess::Rendezvous(KErrNoMemory);
-		return KErrNoMemory;
-		}
-#if (defined TRAP_IGNORE)
-	TRAP_IGNORE(MainL());
-	RProcess::Rendezvous(KErrNone);
-#else
-	TRAPD(err,MainL());
-	RProcess::Rendezvous(err);
-#endif
-
-	delete cleanup;
-	return KErrNone;
-    }
--- a/baseapitest/basesvs/scripts/setup_t_base.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-
-RUN_UTILS MkDir		${SYSDRIVE}\base\
-
-RUN_UTILS CopyFile	z:\base\t_base.script			${SYSDRIVE}\base\t_base.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_base.script
-
-RUN_SCRIPT	z:\base\setup-PBASE-F32-Sfsrv-PublicApi.script
--- a/baseapitest/basesvs/scripts/t_base.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi.script
--- a/baseapitest/basesvs/testsuites/base/base.driver	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,336 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<driver:driver xmlns:driver="http://www.symbian.com/TestDriver">
-	<task name="base" timeout="0">
-		<task name="validation">
-			<task name="f32">
-				<executeOnPC>
-					<build testBuild="true" URI="${sourceroot}\group\">
-						<componentName>t_sfsrv</componentName>
-						<componentName>t_prompt</componentName>
-					</build>
-				</executeOnPC>
-				<transferToSymbian>
-					<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\${platform}\base_f32_env.ini" SymbianPath="$:\base\base_f32_env.ini"/>
-					<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\USBLOAD.ZIP" SymbianPath="$:\base\t_sfsrv\USBLOAD.ZIP"/>
-				</transferToSymbian>
-				<task name="f32-manual">
-					<task name="ram-manual">
-						<task name="pbase-f32-sfsrv-publicapi-rem-manual-suite" timeout="1000">
-							<transferToSymbian>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini" SymbianPath="$:\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini"/>
-							</transferToSymbian>
-							<executeOnSymbian>
-								<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-drives-publicapi-rem-manual.script" SymbianPath="$:\base\pbase-f32-rfs-drives-publicapi-rem-manual.script">
-									<testCasesList operator="exclude">
-										<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-									</testCasesList>
-								</testExecuteScript>
-							</executeOnSymbian>
-						</task>
-					</task>
-				</task>
-				<task name="f32-dualdrive">
-					<task name="dual-drive">
-						<task name="pbase-f32-sfsrv-Publicapi-ram-DualDrive-suite" timeout="1000">
-							<transferToSymbian>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\${platform}\dual_drive_env.ini" SymbianPath="$:\base\dual_drive_env.ini"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\USBLOAD.ZIP" SymbianPath="$:\base\t_sfsrv\USBLOAD.ZIP"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\test.txt" SymbianPath="$:\base\t_sfsrv\test.txt"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\Test1.txt" SymbianPath="$:\base\t_sfsrv\Test1.txt"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\Test2.txt" SymbianPath="$:\base\t_sfsrv\Test2.txt"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\Test3.txt" SymbianPath="$:\base\t_sfsrv\Test3.txt"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\1mb" SymbianPath="$:\base\t_sfsrv\1mb"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\big.txt" SymbianPath="$:\base\t_sfsrv\big.txt"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-dual-drive-publicapi-ram.ini" SymbianPath="$:\base\pbase-f32-dual-drive-publicapi-ram.ini"/>
-							</transferToSymbian>
-							<executeOnSymbian>
-								<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-dual-drive-publicapi-ram.script" SymbianPath="$:\base\pbase-f32-dual-drive-publicapi-ram.script">
-									<testCasesList operator="exclude">
-										<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-									</testCasesList>
-								</testExecuteScript>
-							</executeOnSymbian>
-						</task>
-					</task>
-				</task>
-				<task name="f32-automated">
-					<transferToSymbian>
-						<transfer move="false" PCPath="${epocroot}\epoc32\release\${platform}\${build}\t_testfxt.fxt" SymbianPath="$:\sys\bin\t_testfxt.fxt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\test.txt" SymbianPath="$:\base\t_sfsrv\test.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\Test1.txt" SymbianPath="$:\base\t_sfsrv\Test1.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\Test2.txt" SymbianPath="$:\base\t_sfsrv\Test2.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\Test3.txt" SymbianPath="$:\base\t_sfsrv\Test3.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\1mb" SymbianPath="$:\base\t_sfsrv\1mb"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\any.txt" SymbianPath="$:\base\t_sfsrv\any.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\big_line.txt" SymbianPath="$:\base\t_sfsrv\big_line.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\filetext_eof.txt" SymbianPath="$:\base\t_sfsrv\filetext_eof.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\filetext_read.txt" SymbianPath="$:\base\t_sfsrv\filetext_read.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\multiline.txt" SymbianPath="$:\base\t_sfsrv\multiline.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\new_file.txt" SymbianPath="$:\base\t_sfsrv\new_file.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\t_sfsrv\oneliner.txt" SymbianPath="$:\base\t_sfsrv\oneliner.txt"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Dir-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-Dir-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-DirScan-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-DirScan-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-DriveUnit-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-DriveUnit-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Entry-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-Entry-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-EntryArray-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-EntryArray-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-File-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-File-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FileMan-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-FileMan-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FileNamesIdentical-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-FileNamesIdentical-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FileText-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-FileText-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FindFile-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-FindFile-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Format-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-Format-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-OpenFileScan-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-OpenFileScan-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Parse-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-Parse-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-ParsePtr-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-ParsePtr-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-ParsePtrC-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-ParsePtrC-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RawDisk-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-RawDisk-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RDir-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-RDir-PublicApi.ini"/>
-						<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-VolumeInfo-PublicApi.ini" SymbianPath="$:\base\PBASE-F32-VolumeInfo-PublicApi.ini"/>
-					</transferToSymbian>
-					<task name="pbase-f32-sfsrv-publicapi-any-suite" timeout="1000">
-						<transferToSymbian>
-							<transfer move="false" PCPath="${epocroot}\epoc32\release\${platform}\${build}\t_testfsy1.fsy" SymbianPath="$:\sys\bin\t_testfsy1.fsy"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini" SymbianPath="$:\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-mounts-publicapi-any.script" SymbianPath="$:\base\pbase-f32-rfs-mounts-publicapi-any.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini" SymbianPath="$:\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-drives-publicapi-any.script" SymbianPath="$:\base\pbase-f32-rfs-drives-publicapi-any.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini" SymbianPath="$:\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-files-publicapi-any.script" SymbianPath="$:\base\pbase-f32-rfs-files-publicapi-any.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini" SymbianPath="$:\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-misc-publicapi-any.script" SymbianPath="$:\base\pbase-f32-rfs-misc-publicapi-any.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-DriveUnit-PublicApi-ANY.script" SymbianPath="$:\base\PBASE-F32-DriveUnit-PublicApi-ANY.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script" SymbianPath="$:\base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Parse-PublicApi-ANY.script" SymbianPath="$:\base\PBASE-F32-Parse-PublicApi-ANY.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script" SymbianPath="$:\base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-ParsePtr-PublicApi-ANY.script" SymbianPath="$:\base\PBASE-F32-ParsePtr-PublicApi-ANY.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script" SymbianPath="$:\base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-ParsePtrC-PublicApi-ANY.script" SymbianPath="$:\base\PBASE-F32-ParsePtrC-PublicApi-ANY.script"/>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-VolumeInfo-PublicApi-ANY.script" SymbianPath="$:\base\PBASE-F32-VolumeInfo-PublicApi-ANY.script"/>
-						</transferToSymbian>
-						<executeOnSymbian>
-							<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-sfsrv-publicapi-any.script" SymbianPath="$:\base\pbase-f32-sfsrv-publicapi-any.script">
-								<testCasesList operator="exclude">
-									<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-								</testCasesList>
-							</testExecuteScript>
-						</executeOnSymbian>
-					</task>
-					<task name="nand">
-						<task name="pbase-f32-sfsrv-publicapi-nand-suite" timeout="1000">
-							<transferToSymbian>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-File-PublicApi-NAND.script" SymbianPath="$:\base\PBASE-F32-File-PublicApi-NAND.script"/>
-							</transferToSymbian>
-							<executeOnSymbian>
-								<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-sfsrv-publicapi-nand.script" SymbianPath="$:\base\pbase-f32-sfsrv-publicapi-nand.script">
-									<testCasesList operator="exclude">
-										<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-									</testCasesList>
-								</testExecuteScript>
-							</executeOnSymbian>
-						</task>
-					</task>
-					<task name="os">
-						<task name="pbase-f32-sfsrv-publicapi-os-suite" timeout="1000">
-							<transferToSymbian>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-PublicApi-OS.ini" SymbianPath="$:\base\PBASE-F32-RFS-PublicApi-OS.ini"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-publicapi-os.script" SymbianPath="$:\base\pbase-f32-rfs-publicapi-os.script"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Fileman-PublicApi-OS.script" SymbianPath="$:\base\PBASE-F32-Fileman-PublicApi-OS.script"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FindFile-PublicApi-OS.script" SymbianPath="$:\base\PBASE-F32-FindFile-PublicApi-OS.script"/>
-							</transferToSymbian>
-							<executeOnSymbian>
-								<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-sfsrv-publicapi-os.script" SymbianPath="$:\base\pbase-f32-sfsrv-publicapi-os.script">
-									<testCasesList operator="exclude">
-										<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-									</testCasesList>
-								</testExecuteScript>
-							</executeOnSymbian>
-						</task>
-					</task>
-					<task name="rom">
-						<task name="pbase-f32-sfsrv-publicapi-rom-suite" timeout="1000">
-							<transferToSymbian>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-PublicApi-ROM.ini" SymbianPath="$:\base\PBASE-F32-RFS-PublicApi-ROM.ini"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-publicapi-rom.script" SymbianPath="$:\base\pbase-f32-rfs-publicapi-rom.script"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Format-PublicApi-ROM.script" SymbianPath="$:\base\PBASE-F32-Format-PublicApi-ROM.script"/>
-							</transferToSymbian>
-							<executeOnSymbian>
-								<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-sfsrv-publicapi-rom.script" SymbianPath="$:\base\pbase-f32-sfsrv-publicapi-rom.script">
-									<testCasesList operator="exclude">
-										<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-									</testCasesList>
-								</testExecuteScript>
-							</executeOnSymbian>
-						</task>
-					</task>
-					<task name="ram">
-						<task name="fixed">
-							<task name="pbase-f32-publicapi-sfsrv-ram-suite" timeout="1000">
-								<transferToSymbian>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Dir-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-Dir-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-DirScan-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-DirScan-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Entry-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-Entry-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-EntryArray-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-EntryArray-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-File-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-File-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FileMan-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-FileMan-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FileText-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-FileText-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Format-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-Format-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-OpenFileScan-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-OpenFileScan-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RawDisk-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-RawDisk-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RDir-PublicApi-RAM.script" SymbianPath="$:\base\PBASE-F32-RDir-PublicApi-RAM.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini" SymbianPath="$:\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-drives-publicapi-ram.script" SymbianPath="$:\base\pbase-f32-rfs-drives-publicapi-ram.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini" SymbianPath="$:\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-files-publicapi-ram.script" SymbianPath="$:\base\pbase-f32-rfs-files-publicapi-ram.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini" SymbianPath="$:\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-misc-publicapi-ram.script" SymbianPath="$:\base\pbase-f32-rfs-misc-publicapi-ram.script"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini" SymbianPath="$:\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini"/>
-									<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-mounts-publicapi-ram.script" SymbianPath="$:\base\pbase-f32-rfs-mounts-publicapi-ram.script"/>
-								</transferToSymbian>
-								<executeOnSymbian>
-									<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-sfsrv-publicapi-ram.script" SymbianPath="$:\base\pbase-f32-sfsrv-publicapi-ram.script">
-										<testCasesList operator="exclude">
-											<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-										</testCasesList>
-									</testExecuteScript>
-								</executeOnSymbian>
-							</task>
-						</task>
-						<task name="pbase-f32-publicapi-sfsrv-rem-suite" timeout="1000">
-							<transferToSymbian>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-Format-PublicApi-REM.script" SymbianPath="$:\base\PBASE-F32-Format-PublicApi-REM.script"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RawDisk-PublicApi-REM.script" SymbianPath="$:\base\PBASE-F32-RawDisk-PublicApi-REM.script"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-FindFile-PublicApi-REM.script" SymbianPath="$:\base\PBASE-F32-FindFile-PublicApi-REM.script"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini" SymbianPath="$:\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini"/>
-								<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-rfs-drives-publicapi-rem.script" SymbianPath="$:\base\pbase-f32-rfs-drives-publicapi-rem.script"/>
-							</transferToSymbian>
-							<executeOnSymbian>
-								<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\pbase-f32-sfsrv-publicapi-rem.script" SymbianPath="$:\base\pbase-f32-sfsrv-publicapi-rem.script">
-									<testCasesList operator="exclude">
-										<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-									</testCasesList>
-								</testExecuteScript>
-							</executeOnSymbian>
-						</task>
-					</task>
-				</task>
-			</task>
-		</task>
-		<task name="performance">
-			<task name="f32">
-				<executeOnPC>
-					<build testBuild="true" URI="${sourceroot}\group\">
-						<componentName>t_perf</componentName>
-					</build>
-				</executeOnPC>
-				<transferToSymbian>
-					<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\performance\f32\${platform}\base_perf_f32_env.ini" SymbianPath="$:\base\performance\f32\base_perf_f32_env.ini"/>
-					<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfile-performance-utils.ini" SymbianPath="$:\base\performance\f32\pbase-f32-rfile-performance-utils.ini"/>
-				</transferToSymbian>
-				<task name="small">
-					<task name="pbase-f32-rfile-performance-small" timeout="1300">
-						<transferToSymbian>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfile-performance-small.ini" SymbianPath="$:\base\performance\f32\pbase-f32-rfile-performance-small.ini"/>
-						</transferToSymbian>
-						<executeOnSymbian>
-							<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfile-performance-small.script" SymbianPath="$:\base\performance\f32\pbase-f32-rfile-performance-small.script">
-								<testCasesList operator="exclude">
-									<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-								</testCasesList>
-							</testExecuteScript>
-						</executeOnSymbian>
-					</task>
-					<task name="pbase-f32-rfs-performance-small" timeout="1300">
-						<transferToSymbian>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfs-performance-small.ini" SymbianPath="$:\base\performance\f32\pbase-f32-rfs-performance-small.ini"/>
-						</transferToSymbian>
-						<executeOnSymbian>
-							<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfs-performance-small.script" SymbianPath="$:\base\performance\f32\pbase-f32-rfs-performance-small.script">
-								<testCasesList operator="exclude">
-									<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-								</testCasesList>
-							</testExecuteScript>
-						</executeOnSymbian>
-					</task>
-				</task>
-				<task name="medium">
-					<task name="pbase-f32-rfile-performance-medium" timeout="1300">
-						<transferToSymbian>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfile-performance-medium.ini" SymbianPath="$:\base\performance\f32\pbase-f32-rfile-performance-medium.ini"/>
-						</transferToSymbian>
-						<executeOnSymbian>
-							<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfile-performance-medium.script" SymbianPath="$:\base\performance\f32\pbase-f32-rfile-performance-medium.script">
-								<testCasesList operator="exclude">
-									<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-								</testCasesList>
-							</testExecuteScript>
-						</executeOnSymbian>
-					</task>
-					<task name="pbase-f32-rfs-performance-medium" timeout="1300">
-						<transferToSymbian>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfs-performance-medium.ini" SymbianPath="$:\base\performance\f32\pbase-f32-rfs-performance-medium.ini"/>
-						</transferToSymbian>
-						<executeOnSymbian>
-							<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfs-performance-medium.script" SymbianPath="$:\base\performance\f32\pbase-f32-rfs-performance-medium.script">
-								<testCasesList operator="exclude">
-									<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-								</testCasesList>
-							</testExecuteScript>
-						</executeOnSymbian>
-					</task>
-				</task>
-				<task name="large">
-					<task name="pbase-f32-rfile-performance-large" timeout="15000">
-						<transferToSymbian>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfile-performance-large.ini" SymbianPath="$:\base\performance\f32\pbase-f32-rfile-performance-large.ini"/>
-						</transferToSymbian>
-						<executeOnSymbian>
-							<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfile-performance-large.script" SymbianPath="$:\base\performance\f32\pbase-f32-rfile-performance-large.script">
-								<testCasesList operator="exclude">
-									<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-								</testCasesList>
-							</testExecuteScript>
-						</executeOnSymbian>
-					</task>
-					<task name="pbase-f32-rfs-performance-large" timeout="1300">
-						<transferToSymbian>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfs-performance-large.ini" SymbianPath="$:\base\performance\f32\pbase-f32-rfs-performance-large.ini"/>
-						</transferToSymbian>
-						<executeOnSymbian>
-							<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\performance\f32\pbase-f32-rfs-performance-large.script" SymbianPath="$:\base\performance\f32\pbase-f32-rfs-performance-large.script">
-								<testCasesList operator="exclude">
-									<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-								</testCasesList>
-							</testExecuteScript>
-						</executeOnSymbian>
-					</task>
-				</task>
-				<retrieveFromSymbian>
-					<transfer move="false" PCPath="${resultroot}\f32-perfResults.csv" SymbianPath="$:\f32-perfResults.csv"/>
-				</retrieveFromSymbian>
-			</task>
-		</task>
-		<task name="conformance" timeout="0">
-			<task name="f32" timeout="0">
-				<task name="fat32" timeout="0">
-					<executeOnPC>
-						<build testBuild="true" URI="${sourceroot}\group\">
-							<componentName>t_fat32</componentName>
-						</build>
-					</executeOnPC>
-					<transferToSymbian>
-							<transfer move="false" PCPath="${epocroot}\epoc32\data\z\base\conformance\f32\fat32\f32-fat32-conformance.ini" SymbianPath="$:\base\conformance\f32\fat32\f32-fat32-conformance.ini"/>
-					</transferToSymbian>
-					<executeOnSymbian>
-							<testExecuteScript PCPath="${epocroot}\epoc32\data\z\base\conformance\f32\fat32\f32-fat32-conformance.script" SymbianPath="$:\base\conformance\f32\fat32\f32-fat32-conformance.script">
-								<testCasesList operator="exclude">
-									<testCase target="${epocroot}\epoc32\data\z\base\t_base.tcs"/>
-								</testCasesList>
-							</testExecuteScript>
-					</executeOnSymbian>
-				</task>
-			</task>
-		</task>
-	</task>
-</driver:driver>
--- a/baseapitest/basesvs/testsuites/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-PRJ_TESTEXPORTS
-../base/base.driver		/epoc32/testdriver/testproduct/base.driver
--- a/baseapitest/basesvs/validation/f32/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-#include "../sfsrv/group/bld.inf"
-
-PRJ_TESTEXPORTS
-
-// to pkg
-
-../testdata/armv5/base_f32_env.ini								/epoc32/pkg/base_f32_env.ini
-
-// to z-drive
-
-../testdata/winscw/base_f32_env.ini								z:/base/base_f32_env.ini
-../testdata/winscw/base_f32_env.ini								z:/base/winscw/base_f32_env.ini
-../testdata/gcce/base_f32_env.ini								z:/base/gcce/base_f32_env.ini
-../testdata/armv5/base_f32_env.ini								z:/base/armv5/base_f32_env.ini 
-
-
-
-// to pkg
-
-../testdata/armv5/dual_drive_env.ini								/epoc32/pkg/dual_drive_env.ini
-
-// to z-drive
-
-../testdata/winscw/dual_drive_env.ini								z:/base/dual_drive_env.ini
-../testdata/winscw/dual_drive_env.ini								z:/base/winscw/dual_drive_env.ini
-../testdata/gcce/dual_drive_env.ini								z:/base/gcce/dual_drive_env.ini
-../testdata/armv5/dual_drive_env.ini								z:/base/armv5/dual_drive_env.ini 
--- a/baseapitest/basesvs/validation/f32/sfsrv/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,260 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-PRJ_TESTEXPORTS
-td_sfsrv.iby													/epoc32/rom/include/td_sfsrv.iby
-t_sfsrv.iby														/epoc32/rom/include/t_sfsrv.iby
-t_sfsrv_binaries.iby											/epoc32/rom/include/t_sfsrv_binaries.iby
-t_sfsrv_testdata.iby											/epoc32/rom/include/t_sfsrv_testdata.iby
-t_dual_drive.iby												/epoc32/rom/include/t_dual_drive.iby
-t_dualdrive_testdata.iby										/epoc32/rom/include/t_dualdrive_testdata.iby
-
-
-// to pkg
-../pkg/t_sfsrv.pkg												/epoc32/pkg/t_sfsrv.pkg
-../pkg/dualdrive.pkg											/epoc32/pkg/dualdrive.pkg
-../pkg/tsfsrv.bat												/epoc32/pkg/tsfsrv.bat
-
-//Scripts
-../scripts/PBASE-F32-Sfsrv-PublicApi.script						/epoc32/pkg/PBASE-F32-Sfsrv-PublicApi.script
-
-../scripts/PBASE-F32-Sfsrv-PublicApi-RAM.script					/epoc32/pkg/PBASE-F32-Sfsrv-PublicApi-RAM.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-ROM.script					/epoc32/pkg/PBASE-F32-Sfsrv-PublicApi-ROM.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-REM.script					/epoc32/pkg/PBASE-F32-Sfsrv-PublicApi-REM.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-ANY.script					/epoc32/pkg/PBASE-F32-Sfsrv-PublicApi-ANY.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-OS.script					/epoc32/pkg/PBASE-F32-Sfsrv-PublicApi-OS.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-NAND.script				/epoc32/pkg/PBASE-F32-Sfsrv-PublicApi-NAND.script
-
-../scripts/PBASE-F32-DriveUnit-PublicApi-ANY.script				/epoc32/pkg/PBASE-F32-DriveUnit-PublicApi-ANY.script
-../scripts/PBASE-F32-Format-PublicApi-RAM.script				/epoc32/pkg/PBASE-F32-Format-PublicApi-RAM.script
-../scripts/PBASE-F32-Format-PublicApi-REM.script				/epoc32/pkg/PBASE-F32-Format-PublicApi-REM.script
-../scripts/PBASE-F32-Format-PublicApi-ROM.script				/epoc32/pkg/PBASE-F32-Format-PublicApi-ROM.script
-../scripts/PBASE-F32-RawDisk-PublicApi-RAM.script				/epoc32/pkg/PBASE-F32-RawDisk-PublicApi-RAM.script
-../scripts/PBASE-F32-RawDisk-PublicApi-REM.script				/epoc32/pkg/PBASE-F32-RawDisk-PublicApi-REM.script
-../scripts/PBASE-F32-Dir-PublicApi-RAM.script					/epoc32/pkg/PBASE-F32-Dir-PublicApi-RAM.script
-../scripts/PBASE-F32-DirScan-PublicApi-RAM.script				/epoc32/pkg/PBASE-F32-DirScan-PublicApi-RAM.script
-../scripts/PBASE-F32-File-PublicApi-RAM.script					/epoc32/pkg/PBASE-F32-File-PublicApi-RAM.script
-../scripts/PBASE-F32-File-PublicApi-NAND.script					/epoc32/pkg/PBASE-F32-File-PublicApi-NAND.script
-../scripts/PBASE-F32-FileMan-PublicApi-RAM.script				/epoc32/pkg/PBASE-F32-FileMan-PublicApi-RAM.script
-../scripts/PBASE-F32-FileMan-PublicApi-OS.script				/epoc32/pkg/PBASE-F32-FileMan-PublicApi-OS.script
-../scripts/PBASE-F32-FileNamesIdentical-PublicApi-RAM.script	/epoc32/pkg/PBASE-F32-FileNamesIdentical-PublicApi-RAM.script
-../scripts/PBASE-F32-RDir-PublicApi-RAM.script					/epoc32/pkg/PBASE-F32-RDir-PublicApi-RAM.script
-../scripts/PBASE-F32-Entry-PublicApi-RAM.script					/epoc32/pkg/PBASE-F32-Entry-PublicApi-RAM.script
-../scripts/PBASE-F32-FileText-PublicApi-RAM.script				/epoc32/pkg/PBASE-F32-FileText-PublicApi-RAM.script
-../scripts/PBASE-F32-VolumeInfo-PublicApi-ANY.script			/epoc32/pkg/PBASE-F32-VolumeInfo-PublicApi-ANY.script
-../scripts/PBASE-F32-Parse-PublicApi-ANY.script					/epoc32/pkg/PBASE-F32-Parse-PublicApi-ANY.script
-../scripts/PBASE-F32-ParsePtr-PublicApi-ANY.script				/epoc32/pkg/PBASE-F32-ParsePtr-PublicApi-ANY.script
-../scripts/PBASE-F32-ParsePtrC-PublicApi-ANY.script				/epoc32/pkg/PBASE-F32-ParsePtrC-PublicApi-ANY.script
-../scripts/PBASE-F32-Parse-Inherited-PublicApi-ANY.script		/epoc32/pkg/PBASE-F32-Parse-Inherited-PublicApi-ANY.script
-../scripts/PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script	/epoc32/pkg/PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script
-../scripts/PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script	/epoc32/pkg/PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script
-../scripts/PBASE-F32-EntryArray-PublicApi-RAM.script			/epoc32/pkg/PBASE-F32-EntryArray-PublicApi-RAM.script
-../scripts/PBASE-F32-FindFile-PublicApi-OS.script				/epoc32/pkg/PBASE-F32-FindFile-PublicApi-OS.script
-../scripts/PBASE-F32-FindFile-PublicApi-REM.script				/epoc32/pkg/PBASE-F32-FindFile-PublicApi-REM.script
-../scripts/PBASE-F32-OpenFileScan-PublicApi-RAM.script			/epoc32/pkg/PBASE-F32-OpenFileScan-PublicApi-RAM.script
-
-../scripts/PBASE-F32-RFS-Drives-PublicApi-ANY.script			/epoc32/pkg/PBASE-F32-RFS-Drives-PublicApi-ANY.script
-../scripts/PBASE-F32-RFS-Files-PublicApi-ANY.script				/epoc32/pkg/PBASE-F32-RFS-Files-PublicApi-ANY.script
-../scripts/PBASE-F32-RFS-Misc-PublicApi-ANY.script				/epoc32/pkg/PBASE-F32-RFS-Misc-PublicApi-ANY.script
-../scripts/PBASE-F32-RFS-Mounts-PublicApi-ANY.script			/epoc32/pkg/PBASE-F32-RFS-Mounts-PublicApi-ANY.script
-../scripts/PBASE-F32-RFS-PublicApi-OS.script					/epoc32/pkg/PBASE-F32-RFS-PublicApi-OS.script
-../scripts/PBASE-F32-RFS-Drives-PublicApi-RAM.script			/epoc32/pkg/PBASE-F32-RFS-Drives-PublicApi-RAM.script
-../scripts/PBASE-F32-RFS-Files-PublicApi-RAM.script				/epoc32/pkg/PBASE-F32-RFS-Files-PublicApi-RAM.script
-../scripts/PBASE-F32-RFS-Misc-PublicApi-RAM.script				/epoc32/pkg/PBASE-F32-RFS-Misc-PublicApi-RAM.script
-../scripts/PBASE-F32-RFS-Mounts-PublicApi-RAM.script			/epoc32/pkg/PBASE-F32-RFS-Mounts-PublicApi-RAM.script
-../scripts/PBASE-F32-RFS-PublicApi-ROM.script					/epoc32/pkg/PBASE-F32-RFS-PublicApi-ROM.script
-../scripts/PBASE-F32-RFS-Drives-PublicApi-REM-manual.script		/epoc32/pkg/PBASE-F32-RFS-Drives-PublicApi-REM-manual.script
-../scripts/PBASE-F32-RFS-Drives-PublicApi-REM.script			/epoc32/pkg/PBASE-F32-RFS-Drives-PublicApi-REM.script
-../scripts/PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script			/epoc32/pkg/pbase-f32-dual-drive-publicapi-ram.script
-../scripts/setup-PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script		/epoc32/pkg/setup-pbase-f32-dual-drive-publicapi-ram.script
-
-
-//ini
-../testdata/PBASE-F32-DriveUnit-PublicApi.ini					/epoc32/pkg/PBASE-F32-DriveUnit-PublicApi.ini
-../testdata/PBASE-F32-Format-PublicApi.ini						/epoc32/pkg/PBASE-F32-Format-PublicApi.ini
-../testdata/PBASE-F32-RawDisk-PublicApi.ini						/epoc32/pkg/PBASE-F32-RawDisk-PublicApi.ini
-../testdata/PBASE-F32-Dir-PublicApi.ini							/epoc32/pkg/PBASE-F32-Dir-PublicApi.ini
-../testdata/PBASE-F32-DirScan-PublicApi.ini						/epoc32/pkg/PBASE-F32-DirScan-PublicApi.ini
-../testdata/PBASE-F32-File-PublicApi.ini						/epoc32/pkg/PBASE-F32-File-PublicApi.ini
-../testdata/PBASE-F32-FileMan-PublicApi.ini						/epoc32/pkg/PBASE-F32-FileMan-PublicApi.ini
-../testdata/PBASE-F32-FileNamesIdentical-PublicApi.ini			/epoc32/pkg/PBASE-F32-FileNamesIdentical-PublicApi.ini
-../testdata/PBASE-F32-RDir-PublicApi.ini						/epoc32/pkg/PBASE-F32-RDir-PublicApi.ini
-../testdata/PBASE-F32-Entry-PublicApi.ini						/epoc32/pkg/PBASE-F32-Entry-PublicApi.ini
-../testdata/PBASE-F32-FileText-PublicApi.ini					/epoc32/pkg/PBASE-F32-FileText-PublicApi.ini
-../testdata/PBASE-F32-VolumeInfo-PublicApi.ini					/epoc32/pkg/PBASE-F32-VolumeInfo-PublicApi.ini
-../testdata/PBASE-F32-Parse-PublicApi.ini						/epoc32/pkg/PBASE-F32-Parse-PublicApi.ini
-../testdata/PBASE-F32-ParsePtr-PublicApi.ini					/epoc32/pkg/PBASE-F32-ParsePtr-PublicApi.ini
-../testdata/PBASE-F32-ParsePtrC-PublicApi.ini					/epoc32/pkg/PBASE-F32-ParsePtrC-PublicApi.ini
-../testdata/PBASE-F32-ParseBase-Inherited-PublicApi.ini			/epoc32/pkg/PBASE-F32-ParseBase-Inherited-PublicApi.ini
-../testdata/PBASE-F32-EntryArray-PublicApi.ini					/epoc32/pkg/PBASE-F32-EntryArray-PublicApi.ini
-../testdata/PBASE-F32-FindFile-PublicApi.ini					/epoc32/pkg/PBASE-F32-FindFile-PublicApi.ini
-../testdata/PBASE-F32-OpenFileScan-PublicApi.ini				/epoc32/pkg/PBASE-F32-OpenFileScan-PublicApi.ini
-
-../testdata/PBASE-F32-RFS-Drives-PublicApi-ANY.ini				/epoc32/pkg/PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-../testdata/PBASE-F32-RFS-Files-PublicApi-ANY.ini				/epoc32/pkg/PBASE-F32-RFS-Files-PublicApi-ANY.ini
-../testdata/PBASE-F32-RFS-Misc-PublicApi-ANY.ini				/epoc32/pkg/PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-../testdata/PBASE-F32-RFS-Mounts-PublicApi-ANY.ini				/epoc32/pkg/PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-
-../testdata/PBASE-F32-RFS-PublicApi-OS.ini						/epoc32/pkg/PBASE-F32-RFS-PublicApi-OS.ini
-
-../testdata/PBASE-F32-RFS-Drives-PublicApi-RAM.ini				/epoc32/pkg/PBASE-F32-RFS-Drives-PublicApi-RAM.ini
-../testdata/PBASE-F32-RFS-Files-PublicApi-RAM.ini				/epoc32/pkg/PBASE-F32-RFS-Files-PublicApi-RAM.ini
-../testdata/PBASE-F32-RFS-Misc-PublicApi-RAM.ini				/epoc32/pkg/PBASE-F32-RFS-Misc-PublicApi-RAM.ini
-../testdata/PBASE-F32-RFS-Mounts-PublicApi-RAM.ini				/epoc32/pkg/PBASE-F32-RFS-Mounts-PublicApi-RAM.ini
-
-../testdata/PBASE-F32-RFS-PublicApi-ROM.ini						/epoc32/pkg/PBASE-F32-RFS-PublicApi-ROM.ini
-
-../testdata/PBASE-F32-RFS-Drives-PublicApi-REM.ini				/epoc32/pkg/PBASE-F32-RFS-Drives-PublicApi-REM.ini
-../testdata/PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini		/epoc32/pkg/PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-
-../testdata/PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini				/epoc32/pkg/pbase-f32-dual-drive-publicapi-ram.ini
-
-../testdata/test.txt											/epoc32/pkg/t_sfsrv/test.txt
-../testdata/USBLOAD.ZIP											/epoc32/pkg/t_sfsrv/USBLOAD.ZIP
-
-../testdata/test_rom.txt										/epoc32/pkg/t_sfsrv/test_rom.txt
-../testdata/Test1.txt											/epoc32/pkg/t_sfsrv/Test1.txt
-../testdata/Test2.txt											/epoc32/pkg/t_sfsrv/Test2.txt
-../testdata/Test3.txt											/epoc32/pkg/t_sfsrv/Test3.txt
-../testdata/1mb													/epoc32/pkg/t_sfsrv/1mb
-../testdata/any.txt												/epoc32/pkg/t_sfsrv/any.txt
-../testdata/big_line.txt										/epoc32/pkg/t_sfsrv/big_line.txt
-../testdata/filetext_eof.txt									/epoc32/pkg/t_sfsrv/filetext_eof.txt
-../testdata/filetext_read.txt									/epoc32/pkg/t_sfsrv/filetext_read.txt
-../testdata/multiline.txt										/epoc32/pkg/t_sfsrv/multiline.txt
-../testdata/new_file.txt										/epoc32/pkg/t_sfsrv/new_file.txt
-../testdata/oneliner.txt										/epoc32/pkg/t_sfsrv/oneliner.txt
-../testdata/big.txt												/epoc32/pkg/t_sfsrv/big.txt
-
-
-
-//to pkg
-
-//Scripts
-../scripts/setup-PBASE-F32-Sfsrv-PublicApi.script				z:/base/setup-PBASE-F32-Sfsrv-PublicApi.script
-
-../scripts/PBASE-F32-Sfsrv-PublicApi.script						z:/base/PBASE-F32-Sfsrv-PublicApi.script
-
-../scripts/PBASE-F32-Sfsrv-PublicApi-RAM.script					z:/base/PBASE-F32-Sfsrv-PublicApi-RAM.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-ROM.script					z:/base/PBASE-F32-Sfsrv-PublicApi-ROM.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-REM.script					z:/base/PBASE-F32-Sfsrv-PublicApi-REM.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-ANY.script					z:/base/PBASE-F32-Sfsrv-PublicApi-ANY.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-OS.script					z:/base/PBASE-F32-Sfsrv-PublicApi-OS.script
-../scripts/PBASE-F32-Sfsrv-PublicApi-NAND.script				z:/base/PBASE-F32-Sfsrv-PublicApi-NAND.script
-
-../scripts/PBASE-F32-DriveUnit-PublicApi-ANY.script				z:/base/PBASE-F32-DriveUnit-PublicApi-ANY.script
-../scripts/PBASE-F32-Format-PublicApi-RAM.script				z:/base/PBASE-F32-Format-PublicApi-RAM.script
-../scripts/PBASE-F32-Format-PublicApi-REM.script				z:/base/PBASE-F32-Format-PublicApi-REM.script
-../scripts/PBASE-F32-Format-PublicApi-ROM.script				z:/base/PBASE-F32-Format-PublicApi-ROM.script
-../scripts/PBASE-F32-RawDisk-PublicApi-RAM.script				z:/base/PBASE-F32-RawDisk-PublicApi-RAM.script
-../scripts/PBASE-F32-RawDisk-PublicApi-REM.script				z:/base/PBASE-F32-RawDisk-PublicApi-REM.script
-../scripts/PBASE-F32-Dir-PublicApi-RAM.script					z:/base/PBASE-F32-Dir-PublicApi-RAM.script
-../scripts/PBASE-F32-DirScan-PublicApi-RAM.script				z:/base/PBASE-F32-DirScan-PublicApi-RAM.script
-../scripts/PBASE-F32-File-PublicApi-NAND.script					z:/base/PBASE-F32-File-PublicApi-NAND.script
-../scripts/PBASE-F32-File-PublicApi-RAM.script					z:/base/PBASE-F32-File-PublicApi-RAM.script
-../scripts/PBASE-F32-FileMan-PublicApi-RAM.script				z:/base/PBASE-F32-FileMan-PublicApi-RAM.script
-../scripts/PBASE-F32-FileMan-PublicApi-OS.script				z:/base/PBASE-F32-FileMan-PublicApi-OS.script
-../scripts/PBASE-F32-FileNamesIdentical-PublicApi-RAM.script	z:/base/PBASE-F32-FileNamesIdentical-PublicApi-RAM.script
-../scripts/PBASE-F32-RDir-PublicApi-RAM.script					z:/base/PBASE-F32-RDir-PublicApi-RAM.script
-../scripts/PBASE-F32-Entry-PublicApi-RAM.script					z:/base/PBASE-F32-Entry-PublicApi-RAM.script
-../scripts/PBASE-F32-FileText-PublicApi-RAM.script				z:/base/PBASE-F32-FileText-PublicApi-RAM.script
-../scripts/PBASE-F32-VolumeInfo-PublicApi-ANY.script			z:/base/PBASE-F32-VolumeInfo-PublicApi-ANY.script
-../scripts/PBASE-F32-Parse-PublicApi-ANY.script					z:/base/PBASE-F32-Parse-PublicApi-ANY.script
-../scripts/PBASE-F32-ParsePtr-PublicApi-ANY.script				z:/base/PBASE-F32-ParsePtr-PublicApi-ANY.script
-../scripts/PBASE-F32-ParsePtrC-PublicApi-ANY.script				z:/base/PBASE-F32-ParsePtrC-PublicApi-ANY.script
-../scripts/PBASE-F32-Parse-Inherited-PublicApi-ANY.script		z:/base/PBASE-F32-Parse-Inherited-PublicApi-ANY.script
-../scripts/PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script	z:/base/PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script
-../scripts/PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script	z:/base/PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script
-../scripts/PBASE-F32-EntryArray-PublicApi-RAM.script			z:/base/PBASE-F32-EntryArray-PublicApi-RAM.script
-../scripts/PBASE-F32-FindFile-PublicApi-OS.script				z:/base/PBASE-F32-FindFile-PublicApi-OS.script
-../scripts/PBASE-F32-FindFile-PublicApi-REM.script				z:/base/PBASE-F32-FindFile-PublicApi-REM.script
-../scripts/PBASE-F32-OpenFileScan-PublicApi-RAM.script			z:/base/PBASE-F32-OpenFileScan-PublicApi-RAM.script
-
-
-../scripts/PBASE-F32-RFS-Drives-PublicApi-ANY.script			z:/base/PBASE-F32-RFS-Drives-PublicApi-ANY.script
-../scripts/PBASE-F32-RFS-Files-PublicApi-ANY.script				z:/base/PBASE-F32-RFS-Files-PublicApi-ANY.script
-../scripts/PBASE-F32-RFS-Misc-PublicApi-ANY.script				z:/base/PBASE-F32-RFS-Misc-PublicApi-ANY.script
-../scripts/PBASE-F32-RFS-Mounts-PublicApi-ANY.script			z:/base/PBASE-F32-RFS-Mounts-PublicApi-ANY.script
-../scripts/PBASE-F32-RFS-PublicApi-OS.script					z:/base/PBASE-F32-RFS-PublicApi-OS.script
-../scripts/PBASE-F32-RFS-Drives-PublicApi-RAM.script			z:/base/PBASE-F32-RFS-Drives-PublicApi-RAM.script
-../scripts/PBASE-F32-RFS-Files-PublicApi-RAM.script				z:/base/PBASE-F32-RFS-Files-PublicApi-RAM.script
-../scripts/PBASE-F32-RFS-Misc-PublicApi-RAM.script				z:/base/PBASE-F32-RFS-Misc-PublicApi-RAM.script
-../scripts/PBASE-F32-RFS-Mounts-PublicApi-RAM.script			z:/base/PBASE-F32-RFS-Mounts-PublicApi-RAM.script
-../scripts/PBASE-F32-RFS-PublicApi-ROM.script					z:/base/PBASE-F32-RFS-PublicApi-ROM.script
-../scripts/PBASE-F32-RFS-Drives-PublicApi-REM-manual.script		z:/base/PBASE-F32-RFS-Drives-PublicApi-REM-manual.script
-../scripts/PBASE-F32-RFS-Drives-PublicApi-REM.script			z:/base/PBASE-F32-RFS-Drives-PublicApi-REM.script
-../scripts/PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script			z:/base/pbase-f32-dual-drive-publicapi-ram.script
-../scripts/setup-PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script		z:/base/setup-pbase-f32-dual-drive-publicapi-ram.script
-
-//ini
-../testdata/PBASE-F32-DriveUnit-PublicApi.ini					z:/base/PBASE-F32-DriveUnit-PublicApi.ini
-../testdata/PBASE-F32-Format-PublicApi.ini						z:/base/PBASE-F32-Format-PublicApi.ini
-../testdata/PBASE-F32-RawDisk-PublicApi.ini						z:/base/PBASE-F32-RawDisk-PublicApi.ini
-../testdata/PBASE-F32-Dir-PublicApi.ini							z:/base/PBASE-F32-Dir-PublicApi.ini
-../testdata/PBASE-F32-DirScan-PublicApi.ini						z:/base/PBASE-F32-DirScan-PublicApi.ini
-../testdata/PBASE-F32-File-PublicApi.ini						z:/base/PBASE-F32-File-PublicApi.ini
-../testdata/PBASE-F32-FileMan-PublicApi.ini						z:/base/PBASE-F32-FileMan-PublicApi.ini
-../testdata/PBASE-F32-FileNamesIdentical-PublicApi.ini			z:/base/PBASE-F32-FileNamesIdentical-PublicApi.ini
-../testdata/PBASE-F32-RDir-PublicApi.ini						z:/base/PBASE-F32-RDir-PublicApi.ini
-../testdata/PBASE-F32-Entry-PublicApi.ini						z:/base/PBASE-F32-Entry-PublicApi.ini
-../testdata/PBASE-F32-FileText-PublicApi.ini					z:/base/PBASE-F32-FileText-PublicApi.ini
-../testdata/PBASE-F32-VolumeInfo-PublicApi.ini					z:/base/PBASE-F32-VolumeInfo-PublicApi.ini
-../testdata/PBASE-F32-Parse-PublicApi.ini						z:/base/PBASE-F32-Parse-PublicApi.ini
-../testdata/PBASE-F32-ParsePtr-PublicApi.ini					z:/base/PBASE-F32-ParsePtr-PublicApi.ini
-../testdata/PBASE-F32-ParsePtrC-PublicApi.ini					z:/base/PBASE-F32-ParsePtrC-PublicApi.ini
-../testdata/PBASE-F32-ParseBase-Inherited-PublicApi.ini			z:/base/PBASE-F32-ParseBase-Inherited-PublicApi.ini
-../testdata/PBASE-F32-EntryArray-PublicApi.ini					z:/base/PBASE-F32-EntryArray-PublicApi.ini
-../testdata/PBASE-F32-FindFile-PublicApi.ini					z:/base/PBASE-F32-FindFile-PublicApi.ini
-../testdata/PBASE-F32-OpenFileScan-PublicApi.ini				z:/base/PBASE-F32-OpenFileScan-PublicApi.ini
-
-../testdata/PBASE-F32-RFS-Drives-PublicApi-ANY.ini				z:/base/PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-../testdata/PBASE-F32-RFS-Files-PublicApi-ANY.ini				z:/base/PBASE-F32-RFS-Files-PublicApi-ANY.ini
-../testdata/PBASE-F32-RFS-Misc-PublicApi-ANY.ini				z:/base/PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-../testdata/PBASE-F32-RFS-Mounts-PublicApi-ANY.ini				z:/base/PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-
-../testdata/PBASE-F32-RFS-PublicApi-OS.ini						z:/base/PBASE-F32-RFS-PublicApi-OS.ini
-
-../testdata/PBASE-F32-RFS-Drives-PublicApi-RAM.ini				z:/base/PBASE-F32-RFS-Drives-PublicApi-RAM.ini
-../testdata/PBASE-F32-RFS-Files-PublicApi-RAM.ini				z:/base/PBASE-F32-RFS-Files-PublicApi-RAM.ini
-../testdata/PBASE-F32-RFS-Misc-PublicApi-RAM.ini				z:/base/PBASE-F32-RFS-Misc-PublicApi-RAM.ini
-../testdata/PBASE-F32-RFS-Mounts-PublicApi-RAM.ini				z:/base/PBASE-F32-RFS-Mounts-PublicApi-RAM.ini
-
-../testdata/PBASE-F32-RFS-PublicApi-ROM.ini						z:/base/PBASE-F32-RFS-PublicApi-ROM.ini
-
-../testdata/PBASE-F32-RFS-Drives-PublicApi-REM.ini				z:/base/PBASE-F32-RFS-Drives-PublicApi-REM.ini
-../testdata/PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini		z:/base/PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-
-../testdata/PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini				z:/base/pbase-f32-dual-drive-publicapi-ram.ini
-
-../testdata/test.txt											z:/base/t_sfsrv/test.txt
-../testdata/USBLOAD.ZIP											z:/base/t_sfsrv/USBLOAD.ZIP
-../testdata/test_rom.txt										z:/base/t_sfsrv/test_rom.txt
-../testdata/Test1.txt											z:/base/t_sfsrv/Test1.txt
-../testdata/Test2.txt											z:/base/t_sfsrv/Test2.txt
-../testdata/Test3.txt											z:/base/t_sfsrv/Test3.txt
-../testdata/1mb													z:/base/t_sfsrv/1mb
-../testdata/any.txt												z:/base/t_sfsrv/any.txt
-../testdata/big_line.txt										z:/base/t_sfsrv/big_line.txt
-../testdata/filetext_eof.txt									z:/base/t_sfsrv/filetext_eof.txt
-../testdata/filetext_read.txt									z:/base/t_sfsrv/filetext_read.txt
-../testdata/multiline.txt										z:/base/t_sfsrv/multiline.txt
-../testdata/new_file.txt										z:/base/t_sfsrv/new_file.txt
-../testdata/oneliner.txt										z:/base/t_sfsrv/oneliner.txt
-../testdata/big.txt												z:/base/t_sfsrv/big.txt
-
-PRJ_TESTMMPFILES
-t_sfsrv.mmp
--- a/baseapitest/basesvs/validation/f32/sfsrv/group/t_dual_drive.iby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-
-#if (!defined __T_DUAL_DRIVE_IBY__)
-#define __T_DUAL_DRIVE_IBY__
-
-//Test Includes
-#include <t_sfsrv_binaries.iby>
-#include <t_dualdrive_testdata.iby>
-
-
-#endif
--- a/baseapitest/basesvs/validation/f32/sfsrv/group/t_dualdrive_testdata.iby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-
-#if (!defined __T_DUALDRIVE_TESTDATA_IBY__)
-#define __T_DUALDRIVE_TESTDATA_IBY__
-
-data=EPOCROOT##epoc32\data\z\base\pbase-f32-dual-drive-publicapi-ram.script			base\pbase-f32-dual-drive-publicapi-ram.script
-data=EPOCROOT##epoc32\data\z\base\setup-pbase-f32-dual-drive-publicapi-ram.script	base\setup-pbase-f32-dual-drive-publicapi-ram.script
-data=EPOCROOT##epoc32\data\z\base\pbase-f32-dual-drive-publicapi-ram.ini			base\pbase-f32-dual-drive-publicapi-ram.ini
-data=EPOCROOT##epoc32\data\z\base\armv5\dual_drive_env.ini							base\dual_drive_env.ini
-
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\test.txt									base\t_sfsrv\test.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\Test1.txt									base\t_sfsrv\Test1.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\Test2.txt									base\t_sfsrv\Test2.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\Test3.txt									base\t_sfsrv\Test3.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\USBLOAD.ZIP								base\t_sfsrv\USBLOAD.ZIP
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\big.txt									base\t_sfsrv\big.txt
-
-#endif
--- a/baseapitest/basesvs/validation/f32/sfsrv/group/t_sfsrv.iby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-
-#if (!defined __T_SFSRV_IBY__)
-#define __T_SFSRV_IBY__
-
-#include <t_sfsrv_binaries.iby>
-#include <t_sfsrv_testdata.iby>
-
-#endif
--- a/baseapitest/basesvs/validation/f32/sfsrv/group/t_sfsrv.mmp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-
-TARGET			t_sfsrv.exe
-TARGETTYPE		exe
-UID				0x1000007A 0x200041C1
-VENDORID		0x70000001
-
-CAPABILITY		WriteUserData ReadUserData WriteDeviceData UserEnvironment DiskAdmin SwEvent TCB
-
-SOURCEPATH		../src
-
-SOURCE			../../../../common/src/DataWrapperBase.cpp
-SOURCE			../../../../common/src/FileserverUtil.cpp
-
-SOURCE			T_SfSrvServer.cpp
-SOURCE			T_ActiveNotifyChange.cpp
-SOURCE			T_FsData.cpp
-SOURCE			T_FsDataDrives.cpp
-SOURCE			T_FsDataMounts.cpp
-SOURCE			T_FsDataFiles.cpp
-SOURCE			T_FormatData.cpp
-SOURCE			T_FileData.cpp
-SOURCE			T_FileManData.cpp
-SOURCE			T_DriveUnitData.cpp
-SOURCE			T_DirData.cpp
-SOURCE			T_DirScanData.cpp
-SOURCE			T_FileNamesIdenticalData.cpp
-SOURCE			T_RDirData.cpp
-SOURCE			T_RawDiskData.cpp
-SOURCE			T_FileTextData.cpp
-SOURCE			T_EntryData.cpp
-SOURCE			T_EntryArrayData.cpp
-SOURCE			T_FindFileData.cpp
-SOURCE			T_ParseBaseData.cpp
-SOURCE			T_ParseData.cpp
-SOURCE			T_ParsePtrCData.cpp
-SOURCE			T_ParsePtrData.cpp
-SOURCE			T_OpenFileScanData.cpp
-SOURCE			T_VolumeInfoData.cpp
-SOURCE			T_FileActiveCallback.cpp
-
-
-USERINCLUDE		../inc
-USERINCLUDE		../../../../common/inc
-USERINCLUDE		../../../../group
-
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY			euser.lib
-LIBRARY			efsrv.lib
-LIBRARY			testexecuteutils.lib
-LIBRARY			testexecutelogclient.lib
-LIBRARY			iniparser.lib
-
-SMPSAFE
--- a/baseapitest/basesvs/validation/f32/sfsrv/group/t_sfsrv_binaries.iby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-
-#if (!defined __T_SFSRV_BINARIES_IBY__)
-#define __T_SFSRV_BINARIES_IBY__
-
-#include <testexecute.iby>
-
-#if (!defined EKA2)
-file=ABI_DIR\BUILD_DIR\t_sfsrv.exe	system\libs\t_sfsrv.exe
-file=ABI_DIR\BUILD_DIR\t_prompt.exe	system\libs\t_prompt.exe
-file=ABI_DIR\BUILD_DIR\T_TESTFSY1.fsy system\libs\T_TESTFSY1.fsy
-file=ABI_DIR\BUILD_DIR\T_TestFXT.fxt system\libs\T_TestFXT.fxt
-#else
-file=ABI_DIR\BUILD_DIR\t_sfsrv.exe system\bin\t_sfsrv.exe
-file=ABI_DIR\BUILD_DIR\t_prompt.exe system\bin\t_prompt.exe
-file=ABI_DIR\BUILD_DIR\T_TESTFSY1.fsy system\bin\T_TESTFSY1.fsy
-file=ABI_DIR\BUILD_DIR\T_TestFXT.fxt system\bin\T_TestFXT.fxt
-#endif
-
-#endif
--- a/baseapitest/basesvs/validation/f32/sfsrv/group/t_sfsrv_testdata.iby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-
-#if (!defined __T_SFSRV_TESTDATA_IBY__)
-#define __T_SFSRV_TESTDATA_IBY__
-
-data=EPOCROOT##epoc32\data\z\base\setup-PBASE-F32-Sfsrv-PublicApi.script			base\setup-PBASE-F32-Sfsrv-PublicApi.script
-
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Sfsrv-PublicApi-RAM.script				base\PBASE-F32-Sfsrv-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Sfsrv-PublicApi-ROM.script				base\PBASE-F32-Sfsrv-PublicApi-ROM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Sfsrv-PublicApi-REM.script				base\PBASE-F32-Sfsrv-PublicApi-REM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Sfsrv-PublicApi-ANY.script				base\PBASE-F32-Sfsrv-PublicApi-ANY.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Sfsrv-PublicApi-OS.script				base\PBASE-F32-Sfsrv-PublicApi-OS.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Sfsrv-PublicApi-NAND.script				base\PBASE-F32-Sfsrv-PublicApi-NAND.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Sfsrv-PublicApi.script					base\PBASE-F32-Sfsrv-PublicApi.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-DriveUnit-PublicApi-ANY.script			base\PBASE-F32-DriveUnit-PublicApi-ANY.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Format-PublicApi-RAM.script				base\PBASE-F32-Format-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Format-PublicApi-REM.script				base\PBASE-F32-Format-PublicApi-REM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Format-PublicApi-ROM.script				base\PBASE-F32-Format-PublicApi-ROM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RawDisk-PublicApi-RAM.script			base\PBASE-F32-RawDisk-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RawDisk-PublicApi-REM.script			base\PBASE-F32-RawDisk-PublicApi-REM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Dir-PublicApi-RAM.script				base\PBASE-F32-Dir-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-DirScan-PublicApi-RAM.script			base\PBASE-F32-DirScan-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-File-PublicApi-RAM.script				base\PBASE-F32-File-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-File-PublicApi-NAND.script				base\PBASE-F32-File-PublicApi-NAND.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FileMan-PublicApi-RAM.script			base\PBASE-F32-FileMan-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FileMan-PublicApi-OS.script				base\PBASE-F32-FileMan-PublicApi-OS.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script	base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RDir-PublicApi-RAM.script				base\PBASE-F32-RDir-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Entry-PublicApi-RAM.script				base\PBASE-F32-Entry-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-EntryArray-PublicApi-RAM.script			base\PBASE-F32-EntryArray-PublicApi-RAM.script
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-Parse-PublicApi-ANY.script				base\PBASE-F32-Parse-PublicApi-ANY.script
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-ParsePtr-PublicApi-ANY.script			base\PBASE-F32-ParsePtr-PublicApi-ANY.script
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-ParsePtrC-PublicApi-ANY.script			base\PBASE-F32-ParsePtrC-PublicApi-ANY.script
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script	base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script	base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script	base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FileText-PublicApi-RAM.script			base\PBASE-F32-FileText-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-VolumeInfo-PublicApi-ANY.script			base\PBASE-F32-VolumeInfo-PublicApi-ANY.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FindFile-PublicApi-REM.script			base\PBASE-F32-FindFile-PublicApi-REM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FindFile-PublicApi-OS.script			base\PBASE-F32-FindFile-PublicApi-OS.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-OpenFileScan-PublicApi-RAM.script		base\PBASE-F32-OpenFileScan-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-ANY.script			base\PBASE-F32-RFS-Drives-PublicApi-ANY.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.script			base\PBASE-F32-RFS-Mounts-PublicApi-ANY.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Files-PublicApi-ANY.script			base\PBASE-F32-RFS-Files-PublicApi-ANY.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Misc-PublicApi-ANY.script			base\PBASE-F32-RFS-Misc-PublicApi-ANY.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-PublicApi-OS.script					base\PBASE-F32-RFS-PublicApi-OS.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-RAM.script			base\PBASE-F32-RFS-Drives-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Files-PublicApi-RAM.script			base\PBASE-F32-RFS-Files-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Misc-PublicApi-RAM.script			base\PBASE-F32-RFS-Misc-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.script			base\PBASE-F32-RFS-Mounts-PublicApi-RAM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-PublicApi-ROM.script				base\PBASE-F32-RFS-PublicApi-ROM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-REM.script			base\PBASE-F32-RFS-Drives-PublicApi-REM.script
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.script	base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.script
-
-
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-DriveUnit-PublicApi.ini					base\PBASE-F32-DriveUnit-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Format-PublicApi.ini					base\PBASE-F32-Format-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RawDisk-PublicApi.ini					base\PBASE-F32-RawDisk-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Dir-PublicApi.ini						base\PBASE-F32-Dir-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-DirScan-PublicApi.ini					base\PBASE-F32-DirScan-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-File-PublicApi.ini						base\PBASE-F32-File-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FileMan-PublicApi.ini					base\PBASE-F32-FileMan-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FileNamesIdentical-PublicApi.ini		base\PBASE-F32-FileNamesIdentical-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RDir-PublicApi.ini						base\PBASE-F32-RDir-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-Entry-PublicApi.ini						base\PBASE-F32-Entry-PublicApi.ini
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini		base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-Parse-PublicApi.ini						base\PBASE-F32-Parse-PublicApi.ini
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-ParsePtr-PublicApi.ini					base\PBASE-F32-ParsePtr-PublicApi.ini
-data=EPOCROOT##Epoc32\data\z\base\PBASE-F32-ParsePtrC-PublicApi.ini					base\PBASE-F32-ParsePtrC-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FileText-PublicApi.ini					base\PBASE-F32-FileText-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-VolumeInfo-PublicApi.ini				base\PBASE-F32-VolumeInfo-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-EntryArray-PublicApi.ini				base\PBASE-F32-EntryArray-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-FindFile-PublicApi.ini					base\PBASE-F32-FindFile-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-OpenFileScan-PublicApi.ini				base\PBASE-F32-OpenFileScan-PublicApi.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini			base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini			base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini				base\PBASE-F32-RFS-Files-PublicApi-ANY.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini				base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-PublicApi-OS.ini					base\PBASE-F32-RFS-PublicApi-OS.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini			base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini				base\PBASE-F32-RFS-Files-PublicApi-RAM.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini				base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini			base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-PublicApi-ROM.ini					base\PBASE-F32-RFS-PublicApi-ROM.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini			base\PBASE-F32-RFS-Drives-PublicApi-REM.ini
-data=EPOCROOT##epoc32\data\z\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini		base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-
-data=EPOCROOT##epoc32\data\z\base\armv5\base_f32_env.ini							base\base_f32_env.ini
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\test.txt									base\t_sfsrv\test.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\Test1.txt									base\t_sfsrv\Test1.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\Test2.txt									base\t_sfsrv\Test2.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\Test3.txt									base\t_sfsrv\Test3.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\test_rom.txt								base\t_sfsrv\test_rom.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\USBLOAD.ZIP								base\t_sfsrv\USBLOAD.ZIP
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\1mb										base\t_sfsrv\1mb
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\any.txt									base\t_sfsrv\any.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\big_line.txt								base\t_sfsrv\big_line.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\filetext_eof.txt							base\t_sfsrv\filetext_eof.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\filetext_read.txt							base\t_sfsrv\filetext_read.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\multiline.txt								base\t_sfsrv\multiline.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\new_file.txt								base\t_sfsrv\new_file.txt
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\oneliner.txt								base\t_sfsrv\oneliner.txt
-
-#endif
--- a/baseapitest/basesvs/validation/f32/sfsrv/group/td_sfsrv.iby	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//
-
-
-#if (!defined __TD_SFSRV_IBY__)
-#define __TD_SFSRV_IBY__
-
-data=EPOCROOT##epoc32\data\z\base\t_sfsrv\test_rom.txt	base\t_sfsrv\test_rom.txt
-
-#endif
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_ActiveNotifyChange.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_ActiveNotifyChange
-*/
-
-#if (!defined __T_ACRIVE_NOTIFY_CHANGE_H__)
-#define __T_ACRIVE_NOTIFY_CHANGE_H__
-
-#include <test/activecallback.h>
-
-class CT_ActiveNotifyChange : public CActiveCallback
-	{
-public:
-	static CT_ActiveNotifyChange*	NewL(TInt aCount, TInt aAsyncErrorIndex, MActiveCallback& aCallback, TInt aPriority=EPriorityStandard);
-	static CT_ActiveNotifyChange*	NewLC(TInt aCount, TInt aAsyncErrorIndex, MActiveCallback& aCallback, TInt aPriority=EPriorityStandard);
-
-	TInt	DecCount();
-	void	Activate();
-
-protected:
-	CT_ActiveNotifyChange(TInt aCount, TInt aAsyncErrorIndex, MActiveCallback& aCallback, TInt aPriority);
-
-private:
-	TInt	iCount;
-	TInt	iAsyncErrorIndex;
-	};
-
-#endif /* __T_ACRIVE_NOTIFY_CHANGE_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_DirData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_DirData
-*/
-
-#if (!defined __T_DIR_DATA_H__)
-#define __T_DIR_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-
-//	EPOC includes
-#include <f32file.h>
-
-class CT_DirData: public CDataWrapperBase
-	{
-public:
-	static CT_DirData*	NewL();
-	~CT_DirData();
-
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TAny*	GetObject();
-	virtual void	SetObjectL(TAny* aAny);
-	virtual void	DisownObjectL();	
-	inline virtual 	TCleanupOperation CleanupOperation();
-	
-protected:
-	CT_DirData();
-	void ConstructL();
-	
-private:
-	void	DoCleanup();
-	void	DoCmdCount(const TDesC& aSection);
-	void	DoCmdOperatorBracketsL(const TDesC& aSection);
-	void	DoCmdSort(const TDesC& aSection);
-	
-//Helper function
-	static void CleanupOperation(TAny* aAny);
-	TBool ConvertSortKeys(TDesC &aConstantName, TUint& aSortKey);
-private:
-	//** Directory entry list */
-	CDir*				iDir;
-	};
-		
-#endif /* __T_DIR_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_DirScanData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_DirScanData
-*/
-
-#if (!defined __T_DIRSCAN_DATA_H__)
-#define __T_DIRSCAN_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-
-//	EPOC includes
-#include <f32file.h>
-
-class CT_DirScanData: public CDataWrapperBase
-	{
-public:
-	static CT_DirScanData*	NewL();
-	~CT_DirScanData();
-
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TAny*	GetObject();
-	
-protected:
-	CT_DirScanData();
-	void ConstructL();
-	
-private:
-	inline void	DoCmdNewL(const TDesC& aSection);
-	inline void	DoCmdNewLC(const TDesC& aSection);
-	inline void	DoCleanup();
-	inline void	DoCmdSetScanDataL(const TDesC& aSection);
-	inline void	DoCmdNextL(const TDesC& aSection);
-	inline void	DoCmdAbbreviatedPath(const TDesC& aSection);	
-	inline void	DoCmdFullPath(const TDesC& aSection);
-
-//Helpers
-	TBool		ConvertToSortKey(const TDesC& aSortKeyStr, TUint& aSortKey);
-	TBool 		ConvertToScanDirection(const TDesC& aScanDirectionStr, CDirScan::TScanDirection& aScanDirection);
-
-private:
-	//** CDirScan class instance that is tested */
-	CDirScan*				iDirScan;
-
-	};
-	
-#endif /* __T_DIRSCAN_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_DriveUnitData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_DriveUnitData
-*/
-
-#if (!defined __T_DRIVEUNIT_DATA_H__)
-#define __T_DRIVEUNIT_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-//	EPOC includes
-#include <f32file.h>
-
-
-class CT_DriveUnitData : public CDataWrapperBase
-	{
-public:
-	static CT_DriveUnitData*	NewL();
-	~CT_DriveUnitData();
-
-	virtual TAny*	GetObject();
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-
-protected:
-	CT_DriveUnitData();
-	void	ConstructL();
-
-private:
-	//	Commands
-	void	DoCmdNewL(const TDesC& aSection);
-	void	DoCmdDestructor();
-	void 	DoCmdAssign(const TDesC& aSection);
-	void 	DoCmdConvertToInt(const TDesC& aSection);
-	void 	DoCmdName(const TDesC& aSection);
-
-	//	Helpers
-	void	DoCleanup();
-
-private:
-
-	/** Instance for handling to resource file */
-	TDriveUnit*		iDriveUnit;
-
-	};
-
-#endif /* __T_DRIVEUNIT_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_EntryArrayData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_ENTRY_ARRAY_DATA_H__
-#define __T_ENTRY_ARRAY_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-
-class CT_EntryArrayData: public CDataWrapperBase
-	{
-public:
-	static CT_EntryArrayData* NewL( );
-	~CT_EntryArrayData();
-
-	virtual TBool DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex );
-	virtual TAny* GetObject();
-	virtual void  SetObjectL( TAny* aAny );
-
-protected:
-	CT_EntryArrayData( );
-	void ConstructL();
-
-private:	
-    inline void DoCmdCount( const TDesC& aSection );
-    inline void DoCmdDelete();
-    inline void DoCmdNew();
-    inline void DoCmdIndexOperatorL(const TDesC& aSection);
-    inline void DoCleanup();
-
-private:
-
-	// TEntryArray class instance
-	TEntryArray*		iEntryArray;
-	};
-
-#endif // __T_ENTRY_ARRAY_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_EntryData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_ENTRY_DATA_H__
-#define __T_ENTRY_DATA_H__
-
-//	User Includes
-#include "T_FsData.h"
-#include "DataWrapperBase.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-
-class CT_EntryData: public CDataWrapperBase
-	{
-public:
-	static CT_EntryData* NewL();
-	~CT_EntryData();
-
-	virtual TBool 	DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex );
-	virtual TAny* 	GetObject();
-	virtual void 	SetObjectL( TAny* aAny );
-	virtual void	DisownObjectL();	
-	inline virtual 	TCleanupOperation CleanupOperation();
-	
-protected:
-	CT_EntryData( );
-	void ConstructL();
-
-private:
-    inline void DoCmdAssignmentOperatorL( const TDesC& aSection );
-    inline void DoCmdIndexOperator( const TDesC& aSection );
-    inline void DoCleanup();
-    inline void DoCmdIsArchive( const TDesC& aSection );
-    inline void DoCmdIsDir( const TDesC& aSection );
-    inline void DoCmdIsHidden( const TDesC& aSection );
-    inline void DoCmdIsReadOnly( const TDesC& aSection );
-    inline void DoCmdIsSystem( const TDesC& aSection );
-    inline void DoCmdIsTypeValid( const TDesC& aSection );
-    inline void DoCmdIsUidPresent( const TDesC& aSection );
-    inline void DoCmdMostDerived( const TDesC& aSection );
-    inline void DoCmdNew( const TDesC& aSection );
-    inline void DoCmdSetAttribute( const TDesC& aSection );
-        
-private:  
-    // Helper function
-    inline TBool CompareBool( TBool aResult, TBool aExpected );
-	static void CleanupOperation( TAny* aAny );
- 
-private:
-	// TEntry class instance
-	TEntry*				iEntry;
-	
-	// RFs class instance 
-	RFs*				iFs;
-	};
-
-#endif // __T_ENTRY_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileActiveCallback.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FileActiveCallback
-*/
-
-#if (!defined __T_FILEACTIVECALLBACK_H__)
-#define __T_FILEACTIVECALLBACK_H__
-
-#include <test/activecallback.h>
-
-class CT_FileActiveCallback : public CActiveCallback
-	{
-public:
-	static CT_FileActiveCallback*	NewL(MActiveCallback& aCallback, TInt aPriority=EPriorityStandard);
-	static CT_FileActiveCallback*	NewLC(MActiveCallback& aCallback, TInt aPriority=EPriorityStandard);
-
-	TInt	DecCount();
-	void	Activate();
-	void 	Activate(TInt aAsuncErrorIndex);
-	
-	void	SetSection(const TDesC& aSection);
-	
-	void	CreateFileDataBufferL(TInt aLength);
-	
-	TInt	iType;
-	HBufC8* 	iFileData;
-	TDesC*  iSection;
-
-protected:
-	CT_FileActiveCallback(MActiveCallback& aCallback, TInt aPriority);
-	~CT_FileActiveCallback();
-
-private:
-	TInt	iCount;
-	TInt	iAsyncErrorIndex;
-	};
-
-#endif /* __T_FILEACTIVECALLBACK_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FileData
-*/
-
-#if (!defined __T_FILE_DATA_H__)
-#define __T_FILE_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-#include "T_FileActiveCallback.h"
-
-//	EPOC includes
-#include <f32file.h>
-
-class CT_FileData: public CDataWrapperBase
-	{
-public:
-	static CT_FileData*	NewL();
-	~CT_FileData();
-
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TAny*	GetObject();
-
-protected:
-	CT_FileData();
-	void ConstructL();
-
-private:
-	//	Commands
-	void	DoCmdNewL();
-	void	DoCmdDestructor();
-	void	DoCmdCreateL(const TDesC& aSection);
-	void	DoCmdOpenL(const TDesC& aSection);
-	void	DoCmdWriteL(const TDesC& aSection, const TInt aSyncErrorIndex);
-	void	DoCmdClose();
-	void 	DoCmdReplaceL(const TDesC& aSection);
-	void	DoCmdReadL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	void 	DoCmdFlushL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	void 	DoCmdTempL(const TDesC& aSection);
-	void 	DoCmdRenameL(const TDesC& aSection);
-	void	DoCmdSeekL(const TDesC& aSection);
-	void	DoCmdReadCancelL(const TDesC& aSection);
-	void 	DoCmdLockL(const TDesC& aSection);
-	void 	DoCmdUnLockL(const TDesC& aSection);
-	void	DoCmdSizeL(const TDesC& aSection);
-	void	DoCmdSetSizeL(const TDesC& aSection);
-	void	DoCmdAttL(const TDesC& aSection);
-	void	DoCmdSetAttL(const TDesC& aSection);
-	void 	DoCmdModifiedL(const TDesC& aSection);
-	void 	DoCmdSetModifiedL(const TDesC& aSection);
-	void 	DoCmdSetL(const TDesC& aSection);
-	void 	DoCmdChangeModeL(const TDesC& aSection);
-	void	DoCmdDriveL(const TDesC& aSection);
-	void	DoCmdBlockMap(const TDesC& aSection);
-	void 	DoCmdDuplicateL(const TDesC& aSection);
-	void	DoCmdFullName(const TDesC& aSection);
-	void 	DoCmdNameL(const TDesC& aSection);
-		
-	
-
-	//	Helpers
-	inline void	DoCleanup();
-	
-	TBool GetFileModeL(const TDesC& aParameterName, const TDesC& aSection, TUint& aFileMode);
-	TBool ConvertToSeek(const TDesC& aParameterName, const TDesC& aSection, TSeek& aSeek);
-	TBool ConvertToOwnerType(const TDesC& aParameterName, const TDesC& aSection, TOwnerType& aResult);
-	TBool ConvertToAttributeL(const TDesC& aParameterName, const TDesC& aSection, TUint& aAttribute);
-    TBool ConvertToBlockMapUsage(const TDesC& aParameterName, const TDesC& aSection, TBlockMapUsage& aResult);
-	
-	void RunL(CActive* aActive, const TInt aIndex); 
-	void DoCancel(CActive* aActive, TInt aIndex);
-	
-	void ReadCancelAll();	
-	void ReadCancel();
-	void DoAsynchronousWritesL(const TDesC& aSection, const TInt aSyncErrorIndex);
-	void DoSynchronousWritesL(const TDesC& aSection);
-	void HandleExpectedString(const TDesC8& aReadedData, const TDesC& aSection);
-	void HandleExpectedString(const TDesC& aReadedData, const TDesC& aSection);	
-	void DoSynchronousReadsL(const TDesC& aSection);
-	void DoAsynchronousReadsL(const TDesC& aSection, const TInt aAsyncErrorIndex);	
-	
-	void PrintFileAttributes(TUint aAttValue);
-	
-	void ToArrayL(RPointerArray<HBufC>& aArray, HBufC*& aBuffer);
-	RPointerArray<HBufC> SplitL(const TDesC& aInput, const char* aToken);
-
-
-private:
-	/** Instance for handling to resource file */
-	RPointerArray<CT_FileActiveCallback> iReadCallbackArray;
-	RPointerArray<CActiveCallback> iWriteCallbackArray;
-	RPointerArray<CActiveCallback> iFlushCallbackArray;
-	RFile*		iFile;
-	TBool 		iFileOpened;
-	};
-
-#endif /* __T_FILE_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileManData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FileManData
-*/
-
-#if (!defined __T_FILEMAN_DATA_H__)
-#define __T_FILEMAN_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "FileserverUtil.h"
-
-//	EPOC includes
-#include <e32std.h>
-#include <f32file.h>
-#include <f32fsys.h>
-
-struct THistoryData
-	{
-	TFileName 			iCurrentSource;
-	TFileName 			iCurrentTarget;
-	TEntry 				iCurrentEntry;
-	TInt 				iBytesTransferred;
-	CFileMan::TAction	iCurrentAction;
-	TFileManError		iMoreInfoAboutError;
-	TInt 				iLastError;
-	TPtrC 				iFullPath;
-	TPtrC				iAbbreviatedPath;
-	};
-enum TObserverNotifyType
-	{
-	ENotifyStarted,
-	ENotifyOperation,
-	ENotifyEnded,
-	ENotifyUnknown
-	};
-
-class CT_FileManData: public CDataWrapperBase, public MFileManObserver
-	{
-public:
-	static CT_FileManData*	NewL();
-	~CT_FileManData();
-
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TAny*	GetObject();
-	
-protected:
-	CT_FileManData();
-	void ConstructL();
-	
-	void RunL(CActive* aActive, TInt aIndex);
-	void DoCancel(CActive* aActive, TInt aIndex);
-	
-private:
-	inline void	DoCmdNewL(const TDesC& aSection);
-	inline void DoCmdAttribsL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	inline void DoCmdCopyL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	inline void DoCmdDeleteL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	inline void DoCmdMoveL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	inline void DoCmdRenameL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	inline void DoCmdRmDirL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	inline void DoCmdSetObserver();
-	
-	inline void DoCmdCurrentAction(const TDesC& aSection);	
-	inline void DoCmdGetCurrentTarget(const TDesC& aSection);
-	inline void DoCmdGetCurrentSource(const TDesC& aSection);
-	inline void DoCmdBytesTransferredByCopyStep(const TDesC& aSection);
-	inline void DoCmdCurrentEntryL(const TDesC& aSection);
-	inline void DoCmdAbbreviatedPath(const TDesC& aSection);
-	inline void DoCmdFullPath(const TDesC& aSection);
-	inline void DoCmdGetLastError(const TDesC& aSection);
-	inline void DoCmdGetMoreInfoAboutError(const TDesC& aSection);
-	inline void	DoCleanup();
-		
-//  MFileManObserver events
-	inline TControl NotifyFileManStarted();
-	inline TControl NotifyFileManOperation();
-	inline TControl NotifyFileManEnded();
-
-// Helper functions for MFileManObserver Testing
-	void 	ReadTControl(const TDesC& aSection);
-	TBool	GetTControlFromConfig(const TDesC& aParameterName, const TDesC& aSection, TControl& aFlag);
-		
-//  Helper function
-	TBool	GetActionFromConfig(const TDesC& aParameterName, const TDesC& aSection, CFileMan::TAction& aAction);
-	TBool	GetFileManErrorFromConfig(const TDesC& aParameterName, const TDesC& aSection, TFileManError& aError);
-	void 	ConvertFileManErrorToString(TFileManError& aError, TPtrC& aErrorStr);
-	void	ConvertActionToString(CFileMan::TAction aAction, TPtrC& aActionStr);
-	TBool	GetOperationFromConfig(const TDesC& aParameterName, const TDesC& aSection, TUint& aSwitch);
-	void 	ClearHistory();
-	void	CreateHistoryRecord(THistoryData& aRecord);
-	TBool 	GetNotifyType(const TDesC& aParameterName, const TDesC& aSection, TObserverNotifyType& aType);
-	RPointerArray<THistoryData>* GetHistoryDataByType(const TDesC& aSection);
-	
-private:
-	//** CFileMan class instance that is tested */
-	CFileMan*			                iFileMan;
-	
-	/** Sores aAsyncErrorIndex (Only For MFileObserver notifications). */
-	TInt								iAsyncErrorIndex;
-	
-	/** Indicates if functions called asynchronouslly (Only For MFileObserver notifications). */
-	TBool								iAsyncCall;
-	
-	/** MFileManObserver class instance */
-	MFileManObserver*	                iFileManObserver;
-	
-    /** The request status for disk space events */
-	RPointerArray<CActiveCallback>		iAttribs;
-	
-	/** The request status for disk space events */
-	RPointerArray<CActiveCallback>		iCopy;
-	
-	/** The request status for disk space events */
-	RPointerArray<CActiveCallback>		iDelete;
-	
-	/** The request status for disk space events */
-	RPointerArray<CActiveCallback>		iMove;
-	
-	/** The request status for disk space events */
-	RPointerArray<CActiveCallback>		iRename;
-	
-	/** The request status for disk space events */
-	RPointerArray<CActiveCallback>		iRmDir;
-	
-	/** Stores history for NotifyFileManStarted  */
-	RPointerArray<THistoryData>			iStartedHistory;
-	
-	/** Stores history for NotifyFileManOperation  */
-	RPointerArray<THistoryData>			iOperationHistory;
-	
-	/** Stores history for NotifyFileManEnded  */
-	RPointerArray<THistoryData>			iEndedHistory;
-	
-	/** Stores return value for MFileManObserver Notifications */
-	TControl							iTControl;
-	
-	/** Stores source of filename for which return specified TControl value. */
-	TFileName							iNotifyFileName;
-	
-	/** Stores name of Notify Function. */
-	TObserverNotifyType					iObserverNotifyType;
-	
-	/** Idicates if we need to use specified TControl value in notifications. */
-	TBool								iUseTControl;
-	
-	};
-	
-#endif /* __T_FILEMAN_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileNamesIdenticalData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FileNamesIdenticalData
-*/
-
-#if (!defined __T_FILENAMESIDENTICAL_DATA_H__)
-#define __T_FILENAMESIDENTICAL_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-
-//	EPOC includes
-#include <f32file.h>
-
-class CT_FileNamesIdenticalData: public CDataWrapperBase
-	{
-public:
-	static CT_FileNamesIdenticalData*	NewL();
-	~CT_FileNamesIdenticalData();
-
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TAny*	GetObject();
-	
-protected:
-	CT_FileNamesIdenticalData();
-	void ConstructL();
-	
-private:
-	inline void	DoCmdFileNamesIdentical(const TDesC& aSection);
-	
-private:
-	};
-	
-#endif /* __T_FILENAMESIDENTICAL_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_FileTextData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_FILE_TEXT_DATA_H__
-#define __T_FILE_TEXT_DATA_H__
-
-//	User Includes
-#include "T_FsData.h"
-#include "DataWrapperBase.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-
-class CT_FileTextData: public CDataWrapperBase
-	{
-public:
-	static CT_FileTextData* NewL();
-	~CT_FileTextData();
-
-	virtual TBool DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/ );
-	virtual TAny* GetObject();
-
-protected:
-	CT_FileTextData( );
-	void ConstructL();
-
-private:
-    // command processors
-    inline void DoCleanup();
-    inline void DoCmdNew();
-    inline void DoCmdRead( const TDesC& aSection );
-    inline void DoCmdSeek( const TDesC& aSection );
-    inline void DoCmdSet( const TDesC& aSection );
-    inline void DoCmdWrite( const TDesC& aSection );
-    
-    // helper functions
-	TBool GetSeekMode( const TDesC& aSection, TSeek& aMode, TBool aOptional );
-		
-private:
-		
-	// TFileText class instance
-	TFileText*			iFileText;
-	};
-
-#endif // __T_FILE_TEXT_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_FindFileData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_FIND_FILE_DATA_H__
-#define __T_FIND_FILE_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-
-class CT_FindFileData: public CDataWrapperBase
-	{
-public:
-	static CT_FindFileData* NewL();
-	~CT_FindFileData();
-
-	virtual TBool DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/  );
-	virtual TAny* GetObject();
-
-protected:
-	CT_FindFileData();
-	void ConstructL();
-
-private:
-	inline void DoCleanup();
-	inline void DoCmdNew( const TDesC& aEntry );
-    inline void DoCmdFile( const TDesC& aEntry );
-    inline void DoCmdFind( const TDesC& aEntry );
-    inline void DoCmdFindByDir( const TDesC& aEntry );
-    inline void DoCmdFindByPath( const TDesC& aEntry );
-    inline void DoCmdFindWildL( const TDesC& aEntry );
-    inline void DoCmdFindWildByDirL( const TDesC& aEntry );
-    inline void DoCmdFindWildByPathL( const TDesC& aEntry );
-    inline void DoCmdSetFindMask( const TDesC& aEntry );
-    //Utility functions
-    TBool		ConvertToDriveAtts(const TDesC& aMediaAttStr, TUint& aMediaAtt);
-	TBool		GetDriveAttsFromConfig(const TDesC& aSection, TUint& aDriveAtt);
-
-
-private:
-	//	TFindFile class instance that is tested
-	TFindFile*			iFindFile;
-	
-	//	Pointer to the path list
-	TPtrC				iPathList;
-	};
-
-#endif // __T_FIND_FILE_ARRAY_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_FormatData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FormatData
-*/
-
-#if (!defined __T_FORMAT_DATA_H__)
-#define __T_FORMAT_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-//	EPOC includes
-#include <f32file.h>
-
-
-class CT_FormatData : public CDataWrapperBase
-	{
-public:
-	static CT_FormatData*	NewL();
-	~CT_FormatData();
-
-	virtual TAny*	GetObject();
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-
-protected:
-	CT_FormatData();
-	void	ConstructL();
-
-private:
-	//	Commands
-	void	DoCmdNewL();
-	void	DoCmdDestructor();
-	void	DoCmdOpenL(const TDesC& aSection);
-	void	DoCmdClose();
-	void	DoCmdNext(const TDesC& aSection, const TInt aAsyncErrorIndex);
-
-	//	Helpers
-	void	DoCleanup();
-	TBool	GetFormatMode(const TDesC& aParameterName, const TDesC& aSection, TUint& aFormatMode);
-	TBool	ConvertToFormatMode(const TDesC& aFormatModeStr, TUint& aFormatMode);
-
-	//	MActiveCallback implementation
-	virtual void	RunL(CActive* aActive, TInt aIndex);
-	virtual void	DoCancel(CActive* aActive, TInt aIndex);
-
-private:
-	/** Instance for handling to resource file */
-	RFormat*			iFormat;
-	/** The request status for files/dir events */
-	CActiveCallback*	iNext;
-	/** Outstanding async call counts */
-
-	/** count for async format */
-	TPckgBuf<TInt>		iCountPckg;
-
-	/** count for sync format */
-	TInt				iCount;
-
-	/** count for sync format */
-	TInt				iCountNextEnd;
-	};
-
-#endif /* __T_FORMAT_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_FsData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,262 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FsData
-*/
-
-#if (!defined __T_FS_DATA_H__)
-#define __T_FS_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_DirData.h"
-
-//	EPOC includes
-#include <e32std.h>
-#include <f32file.h>
-#include <f32file_private.h>
-#include <f32fsys.h>
-
-//	User includes
-#include "T_ActiveNotifyChange.h"
-
-const TInt KBufferStringLength = 256;
-
-
-class CT_FsData: public CDataWrapperBase
-	{
-public:
-	static CT_FsData*	NewL();
-	~CT_FsData();
-
-	/**
-	* Process a command read from the ini file
-	*
-	* @param	aCommand requiring command to be processed
-	* @param	aSection the section in the ini file requiring the command to be processed
-	* @param	aAsyncErrorIndex the index of asynchronous command error code belongs to.
-	* 
-	* @leave	system wide error
-	*
-	* @return	ETrue if the command is processed
-	*/
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-
-	/**
-	* Return a pointer to the object that the data wraps
-	*
-	* @return	pointer to the object that the data wraps
-	*/
-	virtual TAny*	GetObject();
-
-	/**
-	* Query to see if there are any outstanding requests
-	*
-	* @return ETrue if there are any outstanding requests
-	*/
-	
-	void RunL(CActive* aActive, TInt aIndex);
-	void DoCancel(CActive* aActive, TInt aIndex);
-
-protected:
-	CT_FsData();
-	void ConstructL();
-
-private:
-
-	virtual TBool	DoCommandDrivesL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TBool	DoCommandFilesL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TBool	DoCommandMountsL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-
-
-	void	DoCmdNewL();
-	void	DoCmdClose();
-	void	DoCmdDestructor();
-
-	// Mount commands
-	void	DoCmdAddFileSystem(const TDesC& aSection);
-	void	DoCmdMountFileSystem(const TDesC& aSection);
-	void	DoCmdMountFileSystemAndScan(const TDesC& aSection);
-	void	DoCmdDismountFileSystem(const TDesC& aSection);
-	void	DoCmdRemoveFileSystem(const TDesC& aSection);
-	void	DoCmdFileSystemName(const TDesC& aSection);
-	void	DoCmdAddExtension(const TDesC& aSection);
-	void	DoCmdMountExtension(const TDesC& aSection);
-	void	DoCmdDismountExtension(const TDesC& aSection);
-	void	DoCmdRemoveExtension(const TDesC& aSection);
-	void	DoCmdExtensionName(const TDesC& aSection);
-	void	DoCmdRemountDriveL(const TDesC& aSection);
-	void	DoCmdNotifyDismountL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	void	DoCmdNotifyDismountCancel(const TDesC& aSection);
-	void	DoCmdAllowDismount(const TDesC& aSection);
-	void	DoCmdSetStartupConfigurationL(const TDesC& aSection);
-	void	DoCmdAddCompositeMount(const TDesC& aSection);
-	void	DoCmdStartupInitCompleteL(TInt aAsyncErrorIndex);
-	void	DoCmdSetLocalDriveMappingL(const TDesC& aSection);
-	void	DoCmdSwapFileSystem(const TDesC& aSection);
-	void	DoCmdFinaliseDrives();
-	void 	DoCmdFileSystemSubType(const TDesC& aSection);
-
-	// Misc commands
-	void	DoCmdConnect(const TDesC& aSection);
-	void	DoCmdVersion(const TDesC& aSection);
-	void	DoCmdNotifyChangeL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	void	DoCmdNotifyChangeCancel(const TDesC& aSection);
-	void	DoCmdNotifyDiskSpaceL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	void	DoCmdNotifyDiskSpaceCancel(const TDesC& aSection);
-	void	DoCmdIsRomAddress(const TDesC& aSection);
-	void	DoCmdResourceCountMarkStart();
-	void	DoCmdResourceCountMarkEnd();
-	void	DoCmdResourceCount(const TDesC& aSection);
-	void	DoCmdGetNotifyUser(const TDesC& aSection);
-	void	DoCmdSetNotifyUser(const TDesC& aSection);
-	void	DoCmdLoaderHeapFunctionL(const TDesC& aSection);
-	void	DoCmdSetNotifyChange(const TDesC& aSection);
-	void	DoCmdInitialisePropertiesFile(const TDesC& aSection);
-
-	// Files commands
-	void	DoCmdRealName(const TDesC& aSection);
-	void	DoCmdSessionPath(const TDesC& aSection);
-	void	DoCmdSetSessionPath(const TDesC& aSection);
-	void	DoCmdParse(const TDesC& aSection);
-	void	DoCmdMkDir(const TDesC& aSection);
-	void	DoCmdMkDirAll(const TDesC& aSection);
-	void	DoCmdRmDir(const TDesC& aSection);
-	void	DoCmdGetDir(const TDesC& aSection);
-	void	DoCmdDelete(const TDesC& aSection);
-	void	DoCmdRename(const TDesC& aSection);
-	void	DoCmdReplace(const TDesC& aSection);
-	void	DoCmdAtt(const TDesC& aSection);
-	void	DoCmdSetAtt(const TDesC& aSection);
-	void	DoCmdModified(const TDesC& aSection);
-	void	DoCmdSetModified(const TDesC& aSection);
-	void	DoCmdEntryL(const TDesC& aSection);
-	void	DoCmdSetEntry(const TDesC& aSection);
-	void	DoCmdReadFileSectionL(const TDesC& aSection);
-	void	DoCmdIsFileOpen(const TDesC& aSection);
-	void	DoCmdGetShortName(const TDesC& aSection);
-	void	DoCmdGetLongName(const TDesC& aSection);
-	void	DoCmdIsFileInRom(const TDesC& aSection);
-	void	DoCmdIsValidName(const TDesC& aSection);
-	void	DoCmdSetSessionToPrivate(const TDesC& aSection);
-	void	DoCmdPrivatePath(const TDesC& aSection);
-	void	DoCmdCreatePrivatePath(const TDesC& aSection);
-
-	// Drives commands
-	void	DoCmdDriveList(const TDesC& aSection);
-	void	DoCmdDriveL(const TDesC& aSection);
-	void	DoCmdVolumeL(const TDesC& aSection);
-	void	DoCmdSetVolumeLabel(const TDesC& aSection);
-	void	DoCmdSubst(const TDesC& aSection);
-	void	DoCmdSetSubst(const TDesC& aSection);
-	void	DoCmdGetMediaSerialNumber(const TDesC& aSection);
-	void	DoCmdIsValidDrive(const TDesC& aSection);
-	void	DoCmdCharToDrive(const TDesC& aSection);
-	void	DoCmdDriveToChar(const TDesC& aSection);
-	void	DoCmdCheckDisk(const TDesC& aSection);
-	void	DoCmdScanDrive(const TDesC& aSection);
-	void	DoCmdGetDriveName(const TDesC& aSection);
-	void	DoCmdSetDriveName(const TDesC& aSection);
-	void	DoCmdLockDrive(const TDesC& aSection);
-	void	DoCmdUnlockDrive(const TDesC& aSection);
-	void	DoCmdClearPassword(const TDesC& aSection);
-	void	DoCmdErasePassword(const TDesC& aSection);
-	void	DoCmdReserveDriveSpace(const TDesC& aSection);
-	void	DoCmdGetReserveAccess(const TDesC& aSection);
-	void	DoCmdReleaseReserveAccess(const TDesC& aSection);
-	void	DoCmdGetSystemDrive(const TDesC& aSection);
-	void	DoCmdSetSystemDrive(const TDesC& aSection);
-	void	DoCmdGetSystemDriveChar(const TDesC& aSection);
-	void	DoCmdVolumeIOParam(const TDesC& aSection);
-
-	// Helpers
-	void	DoCleanup();
-	void	DoCmdPromptL(const TDesC &aSection);
-	inline RFs& CT_FsData::FileServer(){ return iFs2; }
-	TBool 	VerifyTDriveInfoDataFromIniL(const TDesC& aSection, TDriveInfo& aDriveInfo);
-
-	
-
-	const TDesC&	ConvertToStrAttMask(TUint aAttMask);
-	TBool		ConvertToSortKey(const TDesC& aSortKeyStr, TUint& aSortKey);	
-	TBool		ConvertToNotifyType(const TDesC& aNotifyTypeStr, TNotifyType& aNotifyType);
-	TBool		ConvertToMediaAtts(const TDesC& aMediaAttStr, TUint& aMediaAtt);
-	TBool		ConvertToDriveAtts(const TDesC& aMediaAttStr, TUint& aMediaAtt);
-	TBool		GetDriveNumberFromConfig(const TDesC& aSection, const TDesC& aParameterName, TDriveNumber& aDriveNumber);
-	TBool		GetMediaTypeFromConfig(const TDesC& aSection, TMediaType& aMediaType);
-	TBool		GetMediaAttsFromConfig(const TDesC& aSection, TUint& aMediaAtt);
-	TBool		GetDriveAttsFromConfig(const TDesC& aSection, TUint& aDriveAtt);
-	TBool		GetBatteryStateFromConfig(const TDesC& aSection, TBatteryState& aBatteryState);
-	TBool 		GetDrvMapOperationFromConfig(const TDesC& aSection, const TDesC& aParameterName, TLocalDriveMappingInfo::TDrvMapOperation& aOperation);
-public:
-	TUint64 ThreadId();
-
-private:
-	/** RFs class instance that is tested */
-	RFs*									iFs;
-
-	/** RFs class instance for additional purpoces */
-	RFs										iFs2;
-
-	/** The request status for files/dir events */
-	RPointerArray<CT_ActiveNotifyChange>	iNotifyChange;
-
-	/** The request status for disk space events */
-	RPointerArray<CActiveCallback>			iNotifyDiskSpace;
-
-	/** The request status for dismounts a file system on a drive */
-	RPointerArray<CActiveCallback>			iNotifyDismount;
-
-	/** The request status for dismounts a file system on a drive */
-	RPointerArray<CActiveCallback>			iStartupInitComplete;
-
-	/** The volume label for a drive */
-	TVolumeInfo								iVolumeInfo;
-
-	/** Optional name of the volume */
-	TFileName								iDriveName;
-	TFileName								iVolumeLabel;
-
-	/** Extension name */
-	TFullName								iExtensionName;
-
-	/** IsFileInRom result */
-	TUint8*									iIsFileInRom;
-
-	/**	FileSystemName retuned value */
-	TFullName								iFileSystemName;
-
-	/** LockDrive password */
-	TMediaPassword							iPassword;
-	};
-
-#define GET_MANDATORY_STRING_PARAMETER(aParamName, aSection, aResult)	GetCommandStringParameter(aParamName, aSection, aResult, (TText8*)__FILE__, __LINE__, ETrue)
-#define GET_MANDATORY_INT_PARAMETER(aParamName, aSection, aResult)		GetCommandIntParameter(aParamName, aSection, aResult,(TText8*) __FILE__, __LINE__, ETrue)
-#define GET_MANDATORY_INT64_PARAMETER(aParamName, aSection, aResult)	GetCommandInt64Parameter(aParamName, aSection, aResult,(TText8*) __FILE__, __LINE__, ETrue)
-#define GET_MANDATORY_BOOL_PARAMETER(aParamName, aSection, aResult)		GetCommandBoolParameter(aParamName, aSection, aResult, (TText8*)__FILE__, __LINE__, ETrue)
-
-#define GET_OPTIONAL_STRING_PARAMETER(aParamName, aSection, aResult)	GetCommandStringParameter(aParamName, aSection, aResult, (TText8*) __FILE__, __LINE__, EFalse)
-#define GET_OPTIONAL_INT_PARAMETER(aParamName, aSection, aResult)		GetCommandIntParameter(aParamName, aSection, aResult,(TText8*) __FILE__, __LINE__, EFalse)
-#define GET_OPTIONAL_INT64_PARAMETER(aParamName, aSection, aResult)		GetCommandInt64Parameter(aParamName, aSection, aResult,(TText8*) __FILE__, __LINE__, EFalse)
-#define GET_OPTIONAL_BOOL_PARAMETER(aParamName, aSection, aResult)		GetCommandBoolParameter(aParamName, aSection, aResult,(TText8*) __FILE__, __LINE__, EFalse)
-
-#endif /* __T_FS_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_OpenFileScanData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_OPEN_FILE_SCAN_DATA_H__
-#define __T_OPEN_FILE_SCAN_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-class CT_OpenFileScanData: public CDataWrapperBase
-	{
-public:
-	static CT_OpenFileScanData* NewL();
-	~CT_OpenFileScanData();
-
-	virtual TBool DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/);
-	virtual TAny* GetObject();
-
-protected:
-	CT_OpenFileScanData();
-	void ConstructL();
-
-private:	// command processors
-    inline void DoCleanup();
-    inline void DoCmdNew( const TDesC& aSection );
-    inline void DoCmdNextL( const TDesC& aSection );
-    inline void DoCmdThreadId( const TDesC& aSection );
-    
-private:	// helper functions
-	TBool GetRfsParam( const TDesC& aSection, RFs*& aRfs, TPtrC& aRfsName );
-	
-private:
-	//	TOpenFileScan class instance that is tested
-	TOpenFileScan*		iOpenFileScan;
-	};
-
-#endif // __T_OPEN_FILE_SCAN_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_ParseBaseData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_PARSE_BASE_DATA_H__
-#define __T_PARSE_BASE_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-
-class CT_ParseBaseData: public CDataWrapperBase
-	{
-public:
-	~CT_ParseBaseData();
-
-	virtual TBool DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/);
-	virtual TAny* GetObject();
-	virtual TParseBase*	GetParse() = 0;
-
-protected:
-
-private:
-	// 	command processors
-    inline void DoCmdDrive( const TDesC& aSection );
-    inline void DoCmdDriveAndPath( const TDesC& aSection );
-    inline void DoCmdDrivePresent( const TDesC& aSection );
-    inline void DoCmdExt( const TDesC& aSection );
-    inline void DoCmdExtPresent( const TDesC& aSection );
-    inline void DoCmdFullName( const TDesC& aSection );
-    inline void DoCmdIsKMatchAny( const TDesC& aSection );
-    inline void DoCmdIsKMatchOne( const TDesC& aSection );
-    inline void DoCmdIsExtWild( const TDesC& aSection );
-    inline void DoCmdIsNameWild( const TDesC& aSection );
-    inline void DoCmdIsRoot( const TDesC& aSection );
-    inline void DoCmdIsWild( const TDesC& aSection );
-    inline void DoCmdName( const TDesC& aSection );
-    inline void DoCmdNameAndExt( const TDesC& aSection );
-    inline void DoCmdNameOrExtPresent( const TDesC& aSection );
-    inline void DoCmdNamePresent( const TDesC& aSection );
-    inline void DoCmdPath( const TDesC& aSection );
-    inline void DoCmdPathPresent( const TDesC& aSection );
-private:
-
-	};
-
-#endif // __T_PARSE_BASE_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_ParseData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_PARSE_DATA_H__
-#define __T_PARSE_DATA_H__
-
-//	User Includes
-#include "T_ParseBaseData.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-
-class CT_ParseData: public CT_ParseBaseData
-	{
-public:
-	static CT_ParseData* NewL();
-	~CT_ParseData();
-
-	virtual TBool DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/);
-	virtual TAny* GetObject();
-	virtual TParseBase* GetParse();
-
-protected:
-	CT_ParseData();
-	void ConstructL();
-
-private:
-	// 	command processors
-    inline void DoCleanup();
-    inline void DoCmdNew();
-    inline void DoCmdSet( const TDesC& aSection );
-    inline void DoCmdSetNoWild( const TDesC& aSection );
-    inline void DoCmdAddDir( const TDesC& aSection );
-    inline void DoCmdPopDir();
-	
-private:
-	TParse*				iParse;
-	};
-
-#endif // __T_PARSE_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_ParsePtrCData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_PARSE_PTR_C_DATA_H__
-#define __T_PARSE_PTR_C_DATA_H__
-
-//	User Includes
-#include "T_ParseBaseData.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-class CT_ParsePtrCData: public CT_ParseBaseData
-	{
-public:
-	static CT_ParsePtrCData* NewL();
-	~CT_ParsePtrCData();
-	
-	virtual TParseBase* GetParse();
-	virtual TBool DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-
-protected:
-	CT_ParsePtrCData( );
-	void ConstructL();
-
-private:	// command processors
-    inline void DoCleanup();
-    inline void DoCmdNew( const TDesC& aSection );
-    inline void DoCmdAddDir( const TDesC& aSection );
-    inline void DoCmdPopDir();
-	
-private:
-	
-	//	TParsePtrC class instance that is tested
-	TParsePtrC*				iParsePtrC;
-	
-	// Buffer of the filename to be parsed
-	TBuf<KMaxFileName*2>	iFileName;
-	};
-
-#endif // __T_PARSE_PTR_C_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_ParsePtrData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_PARSE_PTR_DATA_H__
-#define __T_PARSE_PTR_DATA_H__
-
-//	User Includes
-#include "T_ParseBaseData.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-class CT_ParsePtrData: public CT_ParseBaseData
-	{
-public:
-	static CT_ParsePtrData* NewL();
-	~CT_ParsePtrData();
-
-	virtual TParseBase* GetParse();
-	virtual TBool DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TAny* GetObject();
-
-protected:
-	CT_ParsePtrData();
-	void ConstructL();
-
-private:	// command processors
-    inline void DoCleanup();
-    inline void DoCmdNew( const TDesC& aSection );
-    inline void DoCmdAddDir( const TDesC& aSection );
-    inline void DoCmdPopDir();
-    
-	
-private:
-	
-	//	TParsePtr class instance that is tested
-	TParsePtr*			iParsePtr;
-
-	// Buffer of the filename to be parsed
-	TBuf<KMaxFileName>	iFileName;
-	};
-
-#endif // __T_PARSE_PTR_DATA_H__
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_RDirData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_RDirData
-*/
-
-#if (!defined __T_RDIR_DATA_H__)
-#define __T_RDIR_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-
-//	EPOC includes
-#include <f32file.h>
-
-class CT_RDirData: public CDataWrapperBase
-	{
-public:
-	static CT_RDirData*	NewL();
-	~CT_RDirData();
-
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TAny*	GetObject();
-	
-protected:
-	CT_RDirData();
-	void ConstructL();
-	
-	void RunL(CActive* aActive, TInt aIndex);
-	void DoCancel(CActive* aActive, TInt aIndex);
-	
-private:
-	inline void	DoCmdNew();
-	inline void	DoCmdClose();
-	inline void	DoCmdOpenL(const TDesC& aSection);
-	inline void	DoCmdReadL(const TDesC& aSection, const TInt aAsyncErrorIndex);
-	inline void DoCmdDestructor();
-	void ReadExpectedNamesL( const TDesC& aSection );
-	
-//Helper function
-	void 	DoCleanup();
-	void 	CompareEntryArray(TEntryArray* aEntryArray);
-	void	CompareEntryData(TEntry* aEntry);
-
-private:
-	//** Instance for handling to resource directory */
-	RDir*						iRDir;
-	
-	/** The request status for read event */
-	CActiveCallback*			iRead;	
-	
-	/** The request status for read array event */
-	CActiveCallback*			iReadBlock;
-	
-	/** entry for async format */
-	TPckg<TEntry>*				iEntry;
-	
-	/** Array of expected file names*/
-	RPointerArray<TPath>*		iExpectedNames;
-	
-		
-	TBuf<KMaxPath>				iObjName;
-	
-	TBool						iCompare;
-	
-	};
-	
-#endif /* __T_RDIR_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_RawDiskData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_RawDiskData
-*/
-
-#if (!defined __T_RAWDISK_DATA_H__)
-#define __T_RAWDISK_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-
-//	EPOC includes
-#include <f32file.h>
-
-class CT_RawDiskData : public CDataWrapperBase
-	{
-public:
-	static CT_RawDiskData*	NewL();
-	~CT_RawDiskData();
-
-	virtual TAny*	GetObject();
-	virtual TBool	DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-
-
-protected:
-	CT_RawDiskData();
-	void ConstructL();
-
-private:
-	//	Commands
-	void	DoCmdNewL();
-	void	DoCmdOpen(const TDesC& aSection);
-	void	DoCmdClose();
-	void 	DoCmdReadL(const TDesC& aSection);
-	void 	DoCmdWriteL(const TDesC& aSection);
-	void	DoCmdDestructor();
-
-
-	//	Helpers
-	inline void	DoCleanup();
-    TBool GetDriveNumber(const TDesC& aSection, const TDesC& aParameterName, TDriveNumber& aDriveNumber);
-
-private:
-
-	/** Instance for handling to resource file */
-    RRawDisk*       iRawDisk;
-
-	};
-
-#endif /* __T_RAWDISK_DATA_H__ */
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_SfSrvServer.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_SfSrvServer
-*/
-
-#ifndef __T_SFSRV_SERVER_H__
-#define __T_SFSRV_SERVER_H__
-
-#include <test/testblockcontroller.h>
-#include <test/testserver2.h>
-
-#include "T_FsData.h"
-#include "T_FileData.h"
-#include "T_FormatData.h"
-#include "T_FileManData.h"
-#include "T_DriveUnitData.h"
-#include "T_RawDiskData.h"
-#include "T_DirData.h"
-#include "T_DirScanData.h"
-#include "T_FileNamesIdenticalData.h"
-#include "T_RDirData.h"
-#include "T_FileTextData.h"
-#include "T_EntryData.h"
-#include "T_EntryArrayData.h"
-#include "T_FindFileData.h"
-#include "T_ParseData.h"
-#include "T_ParsePtrCData.h"
-#include "T_ParsePtrData.h"
-#include "T_OpenFileScanData.h"
-#include "T_VolumeInfoData.h"
-
-
-_LIT(KRFs, 					"RFs");
-_LIT(KRFile,				"RFile");
-_LIT(KRFormat,				"RFormat");
-_LIT(KRRawDisk,				"RRawDisk");
-_LIT(KTDriveUnit,			"TDriveUnit");
-_LIT(KCDir,					"CDir");
-_LIT(KCDirScan,				"CDirScan");
-_LIT(KCFileMan,				"CFileMan");
-_LIT(KFileNamesIdentical,	"FileNamesIdentical");
-_LIT(KRDir,					"RDir");
-_LIT(KTFileText,			"TFileText");
-_LIT(KTEntry,				"TEntry");
-_LIT(KTEntryArray,			"TEntryArray");
-_LIT(KTFindFile,			"TFindFile");
-_LIT(KTParse,				"TParse");
-_LIT(KTParsePtr,			"TParsePtr");
-_LIT(KTParsePtrC,			"TParsePtrC");
-_LIT(KTOpenFileScan,		"TOpenFileScan");
-_LIT(KTVolumeInfo,			"TVolumeInfo");
-
-class CT_SfSrvServer : public CTestServer2
-	{
-private:
-	class CT_SfSrvBlock : public CTestBlockController
-		{
-	public:
-		inline CT_SfSrvBlock();
-		inline ~CT_SfSrvBlock();
-
-		inline CDataWrapper*	CreateDataL(const TDesC& aData);
-		};
-
-public:
-	static CT_SfSrvServer* NewL();
-	inline ~CT_SfSrvServer();
-
-	inline CTestBlockController*	CreateTestBlock();
-
-protected:
-	inline CT_SfSrvServer();
-	};
-
-#include "T_SfSrvServer.inl"
-
-#endif // __T_SFSRV_SERVER_H__
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_SfSrvServer.inl	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_SfSrvServer inline functions
-*/
-
-CT_SfSrvServer::CT_SfSrvBlock::CT_SfSrvBlock()
-:	CTestBlockController()
-	{
-	}
-
-CT_SfSrvServer::CT_SfSrvBlock::~CT_SfSrvBlock()
-	{
-	}
-
-CDataWrapper* CT_SfSrvServer::CT_SfSrvBlock::CreateDataL(const TDesC& aData)
-	{
-	CDataWrapper*	wrapper = NULL;
-	if( KRFs() == aData )
-		{
-		wrapper = CT_FsData::NewL();
-		}
-	else if( KRFile() == aData )
-		{
-		wrapper = CT_FileData::NewL();
-		}
-	else if( KRFormat() == aData )
-		{
-		wrapper = CT_FormatData::NewL();
-		}
-	else if( KRRawDisk() == aData )
-		{
-		wrapper = CT_RawDiskData::NewL();
-		}
-	else if( KTDriveUnit() == aData )
-		{
-		wrapper = CT_DriveUnitData::NewL();
-		}
-	else if( KCDir() == aData )
-		{
-		wrapper = CT_DirData::NewL();
-		}
-	else if( KCDirScan() == aData )
-		{
-		wrapper = CT_DirScanData::NewL();
-		}
-	else if( KCFileMan() == aData )
-		{
-		wrapper = CT_FileManData::NewL();
-		}
-	else if( KFileNamesIdentical() == aData )
-		{
-		wrapper = CT_FileNamesIdenticalData::NewL();
-		}
-	else if( KRDir() == aData )
-		{
-		wrapper = CT_RDirData::NewL();
-		}
-	else if( KTFileText() == aData )
-		{
-		wrapper = CT_FileTextData::NewL();
-		}
-	else if( KTEntry() == aData )
-		{
-		wrapper = CT_EntryData::NewL();
-		}
-	else if( KTEntryArray() == aData )
-		{
-		wrapper = CT_EntryArrayData::NewL();
-		}
-	else if( KTFindFile() == aData )
-		{
-		wrapper = CT_FindFileData::NewL();
-		}
-	else if( KTParse() == aData )
-		{
-		wrapper = CT_ParseData::NewL();
-		}
-	else if( KTParsePtrC() == aData )
-		{
-		wrapper = CT_ParsePtrCData::NewL();
-		}
-	else if( KTParsePtr() == aData )
-		{
-		wrapper = CT_ParsePtrData::NewL();
-		}
-	else if( KTOpenFileScan() == aData )
-		{
-		wrapper = CT_OpenFileScanData::NewL();
-		}
-	else if( KTVolumeInfo() == aData )
-		{
-		wrapper = CT_VolumeInfoData::NewL();
-		}  
-	return wrapper;
-	}
-
-CT_SfSrvServer::CT_SfSrvServer()
-	{
-	}
-
-CT_SfSrvServer::~CT_SfSrvServer()
-	{
-	}
-
-CTestBlockController* CT_SfSrvServer::CreateTestBlock()
-	{
-	return new CT_SfSrvBlock();
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/inc/T_VolumeInfoData.h	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#ifndef __T_VOLUME_INFO_DATA_H__
-#define __T_VOLUME_INFO_DATA_H__
-
-//	User Includes
-#include "DataWrapperBase.h"
-#include "T_FsData.h"
-
-//	EPOC includes
-#include <f32file.h>
-#include <e32std.h>
-#include <f32fsys.h>
-
-
-class CT_VolumeInfoData: public CDataWrapperBase
-	{
-public:
-	static CT_VolumeInfoData* NewL();
-	~CT_VolumeInfoData();
-
-	virtual TBool DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex);
-	virtual TAny* GetObject();
-	virtual void SetObjectL(TAny* aAny);
-	virtual void DisownObjectL();	
-	inline virtual TCleanupOperation CleanupOperation();
-
-protected:
-	CT_VolumeInfoData();
-	void ConstructL();
-
-private:	
-    inline void DoCleanup();
-    inline void DoCmdNew();
-    
-    static void CleanupOperation(TAny* aAny);
-
-private:
-	
-	//	TVolumeInfo class instance that is tested
-	TVolumeInfo*		iVolumeInfo;
-	};
-
-#endif // __T_VOLUME_INFO_DATA_H__
--- a/baseapitest/basesvs/validation/f32/sfsrv/pkg/dualdrive.pkg	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-;
-; Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-; All rights reserved.
-; This component and the accompanying materials are made available
-; under the terms of "Eclipse Public License v1.0"
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-;
-; Install file for t_sfsrv.exe
-;
-
-; Languages -
-&EN
-
-; Installation header
-; UID is the app's UID
-#{"t_sfsrv"},(0x20000F7D),1,0,0
-
-;%{"Vendor-EN"}
-;:"Symbian"
-
-; Localised Vendor name
-%{"Nokia"}
-
-; Unique Vendor name
-:"Nokia"
-
-
-"t_sfsrv.exe"-"!:\sys\bin\t_sfsrv.exe"
-"t_prompt.exe"-"!:\sys\bin\t_prompt.exe"
-"T_TESTFSY1.fsy"-"!:\sys\bin\T_TESTFSY1.fsy"
-"T_TestFXT.fxt"-"!:\sys\bin\T_TestFXT.fxt"
-
-
-"setup-pbase-f32-dual-drive-publicapi-ram.script"-"!:\base\setup-pbase-f32-dual-drive-publicapi-ram.script"
-"pbase-f32-dual-drive-publicapi-ram.script"-"!:\base\pbase-f32-dual-drive-publicapi-ram.script"
-"t_base.tcs"-"!:\base\t_base.tcs"
-
-
-"pbase-f32-dual-drive-publicapi-ram.ini"-"!:\base\pbase-f32-dual-drive-publicapi-ram.ini"
-
-
-"dual_drive_env.ini"-"!:\base\dual_drive_env.ini"
-
-"t_sfsrv\test.txt"-"!:\base\t_sfsrv\test.txt"
-"t_sfsrv\USBLOAD.ZIP"-"!:\base\t_sfsrv\USBLOAD.ZIP"
-"t_sfsrv\Test1.txt"-"!:\base\t_sfsrv\Test1.txt"
-"t_sfsrv\Test2.txt"-"!:\base\t_sfsrv\Test2.txt"
-"t_sfsrv\Test3.txt"-"!:\base\t_sfsrv\Test3.txt"
-"t_sfsrv\big.txt"-"!:\base\t_sfsrv\big.txt"
-
-
-; Required files
-; None
-
-; Component .sis files
-; None
--- a/baseapitest/basesvs/validation/f32/sfsrv/pkg/t_sfsrv.pkg	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,206 +0,0 @@
-;
-; Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-; All rights reserved.
-; This component and the accompanying materials are made available
-; under the terms of "Eclipse Public License v1.0"
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-;
-; Install file for t_sfsrv.exe
-;
-
-; Languages -
-&EN
-
-; Installation header
-; UID is the app's UID
-#{"t_sfsrv"},(0x20000F7D),1,0,0
-
-;%{"Vendor-EN"}
-;:"Symbian"
-
-; Localised Vendor name
-%{"Nokia"}
-
-; Unique Vendor name
-:"Nokia"
-
-
-"t_sfsrv.exe"-"!:\sys\bin\t_sfsrv.exe"
-"t_prompt.exe"-"!:\sys\bin\t_prompt.exe"
-"T_TESTFSY1.fsy"-"!:\sys\bin\T_TESTFSY1.fsy"
-"T_TestFXT.fxt"-"!:\sys\bin\T_TestFXT.fxt"
-
-"tsfsrv.bat"-"!:\base\tsfsrv.bat"
-
-"PBASE-F32-Sfsrv-PublicApi.script"-"!:\base\PBASE-F32-Sfrsrv-PublicApi.script"
-"t_base.tcs"-"!:\base\t_base.tcs"
-
-"PBASE-F32-Sfsrv-PublicApi-RAM.script"-"!:\base\PBASE-F32-Sfsrv-PublicApi-RAM.script"
-"PBASE-F32-Sfsrv-PublicApi-ROM.script"-"!:\base\PBASE-F32-Sfsrv-PublicApi-ROM.script"
-"PBASE-F32-Sfsrv-PublicApi-REM.script"-"!:\base\PBASE-F32-Sfsrv-PublicApi-REM.script"
-"PBASE-F32-Sfsrv-PublicApi-ANY.script"-"!:\base\PBASE-F32-Sfsrv-PublicApi-ANY.script"
-"PBASE-F32-Sfsrv-PublicApi-OS.script"-"!:\base\PBASE-F32-Sfsrv-PublicApi-OS.script"
-"PBASE-F32-Sfsrv-PublicApi-NAND.script"-"!:\base\PBASE-F32-Sfsrv-PublicApi-NAND.script"
-
-
-"PBASE-F32-RawDisk-PublicApi-RAM.script"-"!:\base\PBASE-F32-RawDisk-PublicApi-RAM.script"
-
-"PBASE-F32-Format-PublicApi-RAM.script"-"!:\base\PBASE-F32-Format-PublicApi-RAM.script"
-
-"PBASE-F32-Dir-PublicApi-RAM.script"-"!:\base\PBASE-F32-Dir-PublicApi-RAM.script"
-
-"PBASE-F32-DirScan-PublicApi-RAM.script"-"!:\base\PBASE-F32-DirScan-PublicApi-RAM.script"
-
-"PBASE-F32-File-PublicApi-RAM.script"-"!:\base\PBASE-F32-File-PublicApi-RAM.script"
-
-"PBASE-F32-FileMan-PublicApi-RAM.script"-"!:\base\PBASE-F32-FileMan-PublicApi-RAM.script"
-
-"PBASE-F32-FileNamesIdentical-PublicApi-RAM.script"-"!:\base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script"
-
-"PBASE-F32-RDir-PublicApi-RAM.script"-"!:\base\PBASE-F32-RDir-PublicApi-RAM.script"
-
-"PBASE-F32-Entry-PublicApi-RAM.script"-"!:\base\PBASE-F32-Entry-PublicApi-RAM.script"
-
-"PBASE-F32-EntryArray-PublicApi-RAM.script"-"!:\base\PBASE-F32-EntryArray-PublicApi-RAM.script"
-
-"PBASE-F32-FileText-PublicApi-RAM.script"-"!:\base\PBASE-F32-FileText-PublicApi-RAM.script"
-
-"PBASE-F32-OpenFileScan-PublicApi-RAM.script"-"!:\base\PBASE-F32-OpenFileScan-PublicApi-RAM.script"
-
-
-"PBASE-F32-Format-PublicApi-REM.script"-"!:\base\PBASE-F32-Format-PublicApi-REM.script"
-
-"PBASE-F32-RawDisk-PublicApi-REM.script"-"!:\base\PBASE-F32-RawDisk-PublicApi-REM.script"
-
-"PBASE-F32-FindFile-PublicApi-REM.script"-"!:\base\PBASE-F32-FindFile-PublicApi-REM.script"
-
-
-"PBASE-F32-Parse-PublicApi-ANY.script"-"!:\base\PBASE-F32-Parse-PublicApi-ANY.script"
-
-"PBASE-F32-ParsePtr-PublicApi-ANY.script"-"!:\base\PBASE-F32-ParsePtr-PublicApi-ANY.script"
-
-"PBASE-F32-ParsePtrC-PublicApi-ANY.script"-"!:\base\PBASE-F32-ParsePtrC-PublicApi-ANY.script"
-
-"PBASE-F32-Parse-Inherited-PublicApi-ANY.script"-"!:\base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script"
-
-"PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script"-"!:\base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script"
-
-"PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script"-"!:\base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script"
-
-"PBASE-F32-DriveUnit-PublicApi-ANY.script"-"!:\base\PBASE-F32-DriveUnit-PublicApi-ANY.script"
-
-"PBASE-F32-VolumeInfo-PublicApi-ANY.script"-"!:\base\PBASE-F32-VolumeInfo-PublicApi-ANY.script"
-
-
-"PBASE-F32-Format-PublicApi-ROM.script"-"!:\base\PBASE-F32-Format-PublicApi-ROM.script"
-
-"PBASE-F32-File-PublicApi-NAND.script"-"!:\base\PBASE-F32-File-PublicApi-NAND.script"
-
-"PBASE-F32-FileMan-PublicApi-OS.script"-"!:\base\PBASE-F32-FileMan-PublicApi-OS.script"
-"PBASE-F32-FindFile-PublicApi-OS.script"-"!:\base\PBASE-F32-FindFile-PublicApi-OS.script"
-
-
-"PBASE-F32-RFS-Drives-PublicApi-ANY.script"-"!:\base\PBASE-F32-RFS-Drives-PublicApi-ANY.script"
-"PBASE-F32-RFS-Mounts-PublicApi-ANY.script"-"!:\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.script"
-"PBASE-F32-RFS-Files-PublicApi-ANY.script"-"!:\base\PBASE-F32-RFS-Files-PublicApi-ANY.script"
-"PBASE-F32-RFS-Misc-PublicApi-ANY.script"-"!:\base\PBASE-F32-RFS-Misc-PublicApi-ANY.script"
-
-"PBASE-F32-RFS-PublicApi-OS.script"-"!:\base\PBASE-F32-RFS-PublicApi-OS.script"
-
-"PBASE-F32-RFS-Drives-PublicApi-RAM.script"-"!:\base\PBASE-F32-RFS-Drives-PublicApi-RAM.script"
-"PBASE-F32-RFS-Files-PublicApi-RAM.script"-"!:\base\PBASE-F32-RFS-Files-PublicApi-RAM.script"
-"PBASE-F32-RFS-Misc-PublicApi-RAM.script"-"!:\base\PBASE-F32-RFS-Misc-PublicApi-RAM.script"
-"PBASE-F32-RFS-Mounts-PublicApi-RAM.script"-"!:\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.script"
-
-"PBASE-F32-RFS-PublicApi-ROM.script"-"!:\base\PBASE-F32-RFS-PublicApi-ROM.script"
-
-"PBASE-F32-RFS-Drives-PublicApi-REM.script"-"!:\base\PBASE-F32-RFS-Drives-PublicApi-REM.script"
-"PBASE-F32-RFS-Drives-PublicApi-REM-manual.script"-"!:\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.script"
-
-
-"PBASE-F32-Parse-PublicApi.ini"-"!:\base\PBASE-F32-Parse-PublicApi.ini"
-
-"PBASE-F32-ParsePtr-PublicApi.ini"-"!:\base\PBASE-F32-ParsePtr-PublicApi.ini"
-
-"PBASE-F32-ParsePtrC-PublicApi.ini"-"!:\base\PBASE-F32-ParsePtrC-PublicApi.ini"
-
-"PBASE-F32-ParseBase-Inherited-PublicApi.ini"-"!:\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini"
-
-"PBASE-F32-DriveUnit-PublicApi.ini"-"!:\base\PBASE-F32-DriveUnit-PublicApi.ini"
-
-"PBASE-F32-Format-PublicApi.ini"-"!:\base\PBASE-F32-Format-PublicApi.ini"
-
-"PBASE-F32-Dir-PublicApi.ini"-"!:\base\PBASE-F32-Dir-PublicApi.ini"
-
-"PBASE-F32-DirScan-PublicApi.ini"-"!:\base\PBASE-F32-DirScan-PublicApi.ini"
-
-"PBASE-F32-File-PublicApi.ini"-"!:\base\PBASE-F32-File-PublicApi.ini"
-
-"PBASE-F32-FileMan-PublicApi.ini"-"!:\base\PBASE-F32-FileMan-PublicApi.ini"
-
-"PBASE-F32-FileNamesIdentical-PublicApi.ini"-"!:\base\PBASE-F32-FileNamesIdentical-PublicApi.ini"
-
-"PBASE-F32-RDir-PublicApi.ini"-"!:\base\PBASE-F32-RDir-PublicApi.ini"
-
-"PBASE-F32-Entry-PublicApi.ini"-"!:\base\PBASE-F32-Entry-PublicApi.ini"
-
-"PBASE-F32-EntryArray-PublicApi.ini"-"!:\base\PBASE-F32-EntryArray-PublicApi.ini"
-
-"PBASE-F32-FileText-PublicApi.ini"-"!:\base\PBASE-F32-FileText-PublicApi.ini"
-
-"PBASE-F32-FindFile-PublicApi.ini"-"!:\base\PBASE-F32-FindFile-PublicApi.ini"
-
-"PBASE-F32-OpenFileScan-PublicApi.ini"-"!:\base\PBASE-F32-OpenFileScan-PublicApi.ini"
-
-"PBASE-F32-VolumeInfo-PublicApi.ini"-"!:\base\PBASE-F32-VolumeInfo-PublicApi.ini"
-
-"PBASE-F32-RawDisk-PublicApi.ini"-"!:\base\PBASE-F32-RawDisk-PublicApi.ini"
-
-
-"PBASE-F32-RFS-Drives-PublicApi-ANY.ini"-"!:\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini"
-"PBASE-F32-RFS-Mounts-PublicApi-ANY.ini"-"!:\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini"
-"PBASE-F32-RFS-Files-PublicApi-ANY.ini"-"!:\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini"
-"PBASE-F32-RFS-Misc-PublicApi-ANY.ini"-"!:\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini"
-
-"PBASE-F32-RFS-PublicApi-OS.ini"-"!:\base\PBASE-F32-RFS-PublicApi-OS.ini"
-
-"PBASE-F32-RFS-Drives-PublicApi-RAM.ini"-"!:\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini"
-"PBASE-F32-RFS-Files-PublicApi-RAM.ini"-"!:\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini"
-"PBASE-F32-RFS-Misc-PublicApi-RAM.ini"-"!:\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini"
-"PBASE-F32-RFS-Mounts-PublicApi-RAM.ini"-"!:\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini"
-
-"PBASE-F32-RFS-PublicApi-ROM.ini"-"!:\base\PBASE-F32-RFS-PublicApi-ROM.ini"
-
-"PBASE-F32-RFS-Drives-PublicApi-REM.ini"-"!:\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini"
-"PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini"-"!:\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini"
-
-"base_f32_env.ini"-"!:\base\base_f32_env.ini"
-
-"t_sfsrv\test.txt"-"!:\base\t_sfsrv\test.txt"
-"t_sfsrv\USBLOAD.ZIP"-"!:\base\t_sfsrv\USBLOAD.ZIP"
-"t_sfsrv\Test1.txt"-"!:\base\t_sfsrv\Test1.txt"
-"t_sfsrv\Test2.txt"-"!:\base\t_sfsrv\Test2.txt"
-"t_sfsrv\Test3.txt"-"!:\base\t_sfsrv\Test3.txt"
-"t_sfsrv\1mb"-"!:\base\t_sfsrv\1mb"
-"t_sfsrv\any.txt"-"!:\base\t_sfsrv\any.txt"
-"t_sfsrv\big_line.txt"-"!:\base\t_sfsrv\big_line.txt"
-"t_sfsrv\filetext_eof.txt"-"!:\base\t_sfsrv\filetext_eof.txt"
-"t_sfsrv\filetext_read.txt"-"!:\base\t_sfsrv\filetext_read.txt"
-"t_sfsrv\multiline.txt"-"!:\base\t_sfsrv\multiline.txt"
-"t_sfsrv\new_file.txt"-"!:\base\t_sfsrv\new_file.txt"
-"t_sfsrv\oneliner.txt"-"!:\base\t_sfsrv\oneliner.txt"
-
-; Required files
-; None
-
-; Component .sis files
-; None
--- a/baseapitest/basesvs/validation/f32/sfsrv/pkg/tsfsrv.bat	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-@rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
-testexecute \base\PBASE-F32-Sfsrv-PublicApi
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1134 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script
-//! @SYMScriptTestEnvironment	This test script requires a base ROM.
-/////////////////////////////////////////////////////////////////////////////////////////////////////
-//The device has to support Dual drive feature for single interface. The drive info has to be changed
-//in dual_drive_env.ini before running the tests on the device which supports DUAL Drive with same interface.
-//Example two MMC drives or two NAND drives etc.
-/////////////////////////////////////////////////////////////////////////////////////////////////////
-LOAD_SUITE	T_Sfsrv
-
-START_TESTCASE 			PBASE-F32-DualDrive-Publicapi-RAM-0001
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0001
-//! @SYMAPI			    RFs::MkDirAll();TEntry::IsDir();RFs::RmDir()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc		Try creating directory on both the drives and also check whether it has been created or not.
-//!                         And finally remove the directory created.
-//!                         
-//! @SYMTestActions		1. Create RFs instance.
-//!				        2. Call RFs::MkDirAll() to create the directories.
-//!                     3. Check the directory created using TEntry()
-//!                     4. Remove the directory created.
-//!                     5. Perform the above operation on both the drives concurrently
-//!				
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	  Creates the directories on to both the drives concurrently.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs	        rfs1
-        CREATE_OBJECT	TEntry		tEntry1	
-		COMMAND		rfs1	    new
-		COMMAND		rfs1	    Connect
-		COMMAND		rfs1	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll_drive1
-        COMMAND		rfs1	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll2_drive1
-        COMMAND		rfs1	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll3_drive1
-        COMMAND		rfs1	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll4_drive1
-        COMMAND		tEntry1		new
-        COMMAND		rfs1		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry_drive1
-        COMMAND		tEntry1		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive1
-        COMMAND		rfs1		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry2_drive1
-        COMMAND		tEntry1		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive1
-        COMMAND		rfs1		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry3_drive1
-        COMMAND		tEntry1		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive1
-        COMMAND		rfs1		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry4_drive1
-        COMMAND		tEntry1		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive1
-        COMMAND		tEntry1		~
-        COMMAND		rfs1	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir_drive1
-        COMMAND		rfs1	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir2_drive1
-        COMMAND		rfs1	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir3_drive1
-        COMMAND		rfs1	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir4_drive1
-		COMMAND		rfs1	    Close
-        COMMAND		rfs1	    ~
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs	        rfs2
-        CREATE_OBJECT	TEntry		tEntry2	
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		rfs2	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll_drive2
-        COMMAND		rfs2	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll2_drive2
-        COMMAND		rfs2	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll3_drive2
-        COMMAND		rfs2	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll4_drive2
-        COMMAND		tEntry2		new
-        COMMAND		rfs2		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry_drive2
-        COMMAND		tEntry2		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive2
-        COMMAND		rfs2		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry2_drive2
-        COMMAND		tEntry2		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive2
-        COMMAND		rfs2		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry3_drive2
-        COMMAND		tEntry2		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive2
-        COMMAND		rfs2		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry4_drive2
-        COMMAND		tEntry2		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive2
-        COMMAND		tEntry2		~
-        COMMAND		rfs2	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir_drive2
-        COMMAND		rfs2	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir2_drive2
-        COMMAND		rfs2	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir3_drive2
-        COMMAND		rfs2	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir4_drive2
-		COMMAND		rfs2	    Close
-        COMMAND		rfs2	    ~
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE 			PBASE-F32-DualDrive-Publicapi-RAM-0001
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0002
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0002
-//! @SYMAPI			CFileMan::Attribs();CFileMan::Copy();Rfs::Att()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc		Copy files on to both the drives from system drive concurrenlty
-//!				
-//! @SYMTestActions		1. Call Copy() to copy files on to the mmc drives.	
-//!				2. Set and Get the attribute of the file.
-//!             3. Delete the file copied on to the drive.
-//!             4. Perform above operation on both the  drive concurrently.
-//!				
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	copying files on to both drives concurrently works successfully.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv	    \base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-        CREATE_OBJECT	RFs	        rfs1
-		CREATE_OBJECT	RFile	    file1
-        CREATE_OBJECT	CFileMan	fileMan1
-		COMMAND		rfs1	    new
-		COMMAND		rfs1	    Connect
-		COMMAND		file1	    new
-		COMMAND		file1	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0005_Open_drive1
-		COMMAND		fileMan1	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0005_NewL_drive1
-        COMMAND		fileMan1    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy_drive1
-        COMMAND		file1	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0005_Open2_drive1
-        COMMAND		fileMan1    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy2_drive1
-        COMMAND		rfs1        Att		    PBASE-F32-DualDrive-Publicapi-RAM-0005_Att1_drive1
-        COMMAND     fileMan1    Attribs     PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs1_drive1
-        COMMAND		rfs1        Att		    PBASE-F32-DualDrive-Publicapi-RAM-0005_Att2_drive1
-        COMMAND     fileMan1    Attribs     PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs2_drive1
-        COMMAND		rfs1        Att		    PBASE-F32-DualDrive-Publicapi-RAM-0005_Att1_drive1
-        COMMAND     rfs1        Delete      PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete_drive1
-        COMMAND     rfs1        Delete      PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete2_drive1
-		COMMAND		fileMan1    ~
-		COMMAND		file1	    Close
-		COMMAND		file1	    ~
-		COMMAND		rfs1	    Close
-		COMMAND		rfs1	    ~
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs     rfs2
-		CREATE_OBJECT	RFile	file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0005_Open_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0005_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy_drive2
-        COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0005_Open2_drive2
-        COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy2_drive2
-        COMMAND		rfs2        Att		    PBASE-F32-DualDrive-Publicapi-RAM-0005_Att1_drive2
-        COMMAND     fileMan2    Attribs     PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs1_drive2
-        COMMAND		rfs2        Att		    PBASE-F32-DualDrive-Publicapi-RAM-0005_Att2_drive2
-        COMMAND     fileMan2    Attribs     PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs2_drive2
-        COMMAND		rfs2        Att		    PBASE-F32-DualDrive-Publicapi-RAM-0005_Att1_drive2
-        COMMAND     rfs2        Delete      PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete_drive2
-        COMMAND     rfs2        Delete      PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete2_drive2
-		COMMAND		fileMan2    ~
-		COMMAND		file2	    Close
-		COMMAND		file2	    ~
-		COMMAND		rfs2	    Close
-		COMMAND		rfs2	    ~
-END_TEST_BLOCK	
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0002
-
-START_TESTCASE 			PBASE-F32-DualDrive-Publicapi-RAM-0003
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0003
-//! @SYMAPI			RFile::Replace();RFile::Read();RFile::Write()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc	create a file on to the both the drive, write and read the content of file and delete the file after the operation.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Open the files 
-//!             3. Write the contents on to the file.
-//!				4. Close files.
-//!				5. Open file the files.
-//!				6. Read the content of the filess.
-//!				7. Close file.
-//!				8. Delete files.
-//!				9. Perform the above operation on both the drives concurrently
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	 Can perform both read and write opearation on both the drives concurrently
-//!
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs	        rfs1
-		CREATE_OBJECT	RFile	    file1
-        CREATE_OBJECT	CFileMan	fileMan1
-		COMMAND		rfs1	    new		
-		COMMAND		rfs1	    Connect		
-		COMMAND		file1	    new	
-        COMMAND		file1	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open1_drive1
-		COMMAND		fileMan1	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0008_NewL_drive1
-		COMMAND		fileMan1    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0008_Copy_drive1
-        COMMAND		file1	    Close        
-		COMMAND		file1	    Replace		PBASE-F32-DualDrive-Publicapi-RAM-0008_Replace_drive1
-		COMMAND		file1	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0008_Write_drive1
-		COMMAND		file1	    Close		
-		COMMAND		file1	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open_drive1
-		COMMAND		file1	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0008_Read_drive1
-		COMMAND		file1	    Close		
-		COMMAND		file1	    ~		
-		COMMAND		rfs1	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0008_Delete_drive1
-		COMMAND		rfs1	    ~		
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-		CREATE_OBJECT	RFs	        rfs2
-		CREATE_OBJECT	RFile	    file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open1_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0008_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0008_Copy_drive2
-        COMMAND		file2	    Close
-        COMMAND		file2	    Replace		PBASE-F32-DualDrive-Publicapi-RAM-0008_Replace_drive2
-		COMMAND		file2	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0008_Write_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open_drive2
-		COMMAND		file2	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0008_Read_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    ~		
-		COMMAND		rfs2	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0008_Delete_drive2
-		COMMAND		rfs2	    ~		
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE 		PBASE-F32-DualDrive-Publicapi-RAM-0003
-
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0004
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0004
-//! @SYMAPI			CFileMan::Rename()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc		Rename the files on the mmc drives.
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename() to rename the file in one drive with different name.
-//!				4.Call CFileMan::Rename() to rename the file in second drive with different name.
-//!				5.Delete the renamed file.
-//!             6.Close the Rfs session.
-//!             7.Perform the above operation on both the drives concurrently
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Files get renamed on both the drives.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	50	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs				rfs1
-		CREATE_OBJECT	RFile			file1
-		CREATE_OBJECT	CFileMan	    fileMan1
-		COMMAND		rfs1		new		
-		COMMAND		rfs1		Connect
-		COMMAND		file1		new
-        COMMAND		file1	    Open		    PBASE-F32-DualDrive-Publicapi-RAM-0009_Open_drive1
-		COMMAND		fileMan1	NewL			PBASE-F32-DualDrive-Publicapi-RAM-0009_NewL_drive1
-		COMMAND		fileMan1    Copy		    PBASE-F32-DualDrive-Publicapi-RAM-0009_Copy_drive1
-		COMMAND		fileMan1	Rename		    PBASE-F32-DualDrive-Publicapi-RAM-0009_Rename_drive1
-		COMMAND		file1		Open			PBASE-F32-DualDrive-Publicapi-RAM-0009_Open_drive1
-		COMMAND		file1		Close
-		COMMAND		fileMan1	~
-		COMMAND		file1		~
-		COMMAND		rfs1		~		
-END_TEST_BLOCK	
-START_TEST_BLOCK	50	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs				rfs2
-		CREATE_OBJECT	RFile			file2
-		CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2		new		
-		COMMAND		rfs2		Connect
-		COMMAND		file2		new
-        COMMAND		file2	    Open		    PBASE-F32-DualDrive-Publicapi-RAM-0009_Open_drive2
-		COMMAND		fileMan2	NewL			PBASE-F32-DualDrive-Publicapi-RAM-0009_NewL_drive2
-		COMMAND		fileMan2    Copy		    PBASE-F32-DualDrive-Publicapi-RAM-0009_Copy_drive2
-		COMMAND		fileMan2	Rename		    PBASE-F32-DualDrive-Publicapi-RAM-0009_Rename_drive2
-		COMMAND		file2		Open			PBASE-F32-DualDrive-Publicapi-RAM-0009_Open_drive2
-		COMMAND		file2		Close
-		COMMAND		fileMan2	~
-		COMMAND		file2		~
-		COMMAND		rfs2		~		
-END_TEST_BLOCK	
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0004
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0005
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0005
-//! @SYMAPI			    CFileMan:Move()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc		Move the files between the two drives
-//!											
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move()  to move the file from drive1 to drive2.
-//!				4.Call CFileMan::Move(), to move the file from drive2 to drive2.
-//!             5.Delete the moved files.
-//!             6 Delete the directory in which the file is moved.
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Files are moved across the drives..
-//! @SYMTestType		CIT
-START_TEST_BLOCK	50	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs				rfs1
-		CREATE_OBJECT	RFile			file1
-		CREATE_OBJECT	CFileMan	    fileMan1
-		COMMAND		rfs1		new
-		COMMAND		rfs1		Connect
-		COMMAND		rfs1		MkDir			PBASE-F32-DualDrive-Publicapi-RAM-0010_MkDir_drive1
-        COMMAND		rfs1		MkDir			PBASE-F32-DualDrive-Publicapi-RAM-0010_MkDir_drive2
-		COMMAND		file1		new
-		COMMAND		fileMan1	NewL		    PBASE-F32-DualDrive-Publicapi-RAM-0010_NewL_drive1
-		COMMAND		fileMan1	Move		    PBASE-F32-DualDrive-Publicapi-RAM-0010_Move_drive1
-		COMMAND		file1		Open		    PBASE-F32-DualDrive-Publicapi-RAM-0010_Open_drive1
-		COMMAND		file1		Close
-		COMMAND		fileMan1	Move		    PBASE-F32-DualDrive-Publicapi-RAM-0010_Move_drive2
-		COMMAND		file1		Open		    PBASE-F32-DualDrive-Publicapi-RAM-0010_Open_drive2
-		COMMAND		file1		Close
-        COMMAND     fileMan1    Attribs         PBASE-F32-DualDrive-Publicapi-RAM-0010_Attribs_drive1
-        COMMAND     fileMan1    Attribs         PBASE-F32-DualDrive-Publicapi-RAM-0010_Attribs_drive2
-        COMMAND		rfs1		Delete		    PBASE-F32-DualDrive-Publicapi-RAM-0010_Delete_drive1
-        COMMAND		rfs1		Delete		    PBASE-F32-DualDrive-Publicapi-RAM-0010_Delete_drive2
-		COMMAND		rfs1		RmDir		    PBASE-F32-DualDrive-Publicapi-RAM-0010_RmDir_drive1
-        COMMAND		rfs1		RmDir		    PBASE-F32-DualDrive-Publicapi-RAM-0010_RmDir_drive2
-		COMMAND		fileMan1	~
-		COMMAND		file1		~
-		COMMAND		rfs1		~		
-END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0005
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0006
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0006
-//! @SYMAPI			    CFileMan:Move()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		02/07/2008 
-//! @SYMTestCaseDesc		Move the files from system drive to dual drive and back in to systemdrive CONCURRENTly.
-//!											
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move()  to move the file from system drive to the one of the dual drive drive.
-//!				4.Call CFileMan::Move(), to move the file from dual drive to the systemdrive .
-//!             5.Delete the directory in which the file is moved.
-//!             6.Perform the above operation concurrently on both the dual drives
-//!             
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Files are moved from systemdrive to dual drives concurrantly.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	50	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs				rfs1
-		CREATE_OBJECT	RFile			file1
-		CREATE_OBJECT	CFileMan	    fileMan1
-		COMMAND		rfs1		new
-		COMMAND		rfs1		Connect
-		COMMAND		rfs1		MkDir			PBASE-F32-DualDrive-Publicapi-RAM-0011_MkDir_drive1
-        COMMAND		file1		new
-		COMMAND		fileMan1	NewL		    PBASE-F32-DualDrive-Publicapi-RAM-0011_NewL_drive1
-		COMMAND		fileMan1	Move		    PBASE-F32-DualDrive-Publicapi-RAM-0011_Move_drive1
-		COMMAND     fileMan1    Move            PBASE-F32-DualDrive-Publicapi-RAM-0011_Move2_drive1
-        COMMAND		file1		Open		    PBASE-F32-DualDrive-Publicapi-RAM-0011_Open2_drive1
-        COMMAND		rfs1		RmDir		    PBASE-F32-DualDrive-Publicapi-RAM-0011_RmDir_drive1
-        COMMAND		file1		Close
-        COMMAND		fileMan1	~
-		COMMAND		file1		~
-		COMMAND		rfs1		~		
-END_TEST_BLOCK	
-START_TEST_BLOCK	50	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs				rfs2
-		CREATE_OBJECT	RFile			file2
-		CREATE_OBJECT	CFileMan	    fileMan2
-		COMMAND		rfs2		new
-		COMMAND		rfs2		Connect
-		COMMAND		rfs2		MkDir			PBASE-F32-DualDrive-Publicapi-RAM-0011_MkDir_drive2
-        COMMAND		file2		new
-		COMMAND		fileMan2	NewL		    PBASE-F32-DualDrive-Publicapi-RAM-0011_NewL_drive2
-		COMMAND		fileMan2	Move		    PBASE-F32-DualDrive-Publicapi-RAM-0011_Move_drive2
-		COMMAND     fileMan2    Move            PBASE-F32-DualDrive-Publicapi-RAM-0011_Move2_drive2
-        COMMAND		file2		Open		    PBASE-F32-DualDrive-Publicapi-RAM-0011_Open2_drive2
-        COMMAND		rfs2		RmDir		    PBASE-F32-DualDrive-Publicapi-RAM-0011_RmDir_drive2
-        COMMAND		file2		Close
-        COMMAND		fileMan2	~
-		COMMAND		file2		~
-		COMMAND		rfs2		~		
-END_TEST_BLOCK	
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0006
-
-START_TESTCASE 			PBASE-F32-DualDrive-Publicapi-RAM-0007
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0007
-//! @SYMAPI			    RFs::Volume();RFs::SetVolumeLabel()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		02/07/2008 
-//! @SYMTestCaseDesc		Get the Volume information for drives concurrently
-//! @SYMTestActions		1. Call Connect().
-//!				2. Saving volume label.
-//!				3. Call SetVolumeLabel() passing "Test" as first parameter and the drive number as a second parameter.
-//!				4. Call Volume() passing  TVolumeInfo reference as first parameter and the drive number as a second parameter.
-//!				5. Restoring volume label.
-//!				6. Perform above operation concurrantly on both the drives.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults Set and get the volume information of both the drives concurrently.
-//! @SYMTestType		CIT
-
-CONCURRENT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs	rfs1
-		COMMAND		rfs1	new		
-		COMMAND		rfs1	Connect		
-		COMMAND		rfs1	Volume		        PBASE-F32-DualDrive-Publicapi-RAM-0012_Volume_drive1
-		COMMAND		rfs1	SetVolumeLabel		PBASE-F32-DualDrive-Publicapi-RAM-0012_SetVolumeLabel_drive1
-		COMMAND		rfs1	Volume		        PBASE-F32-DualDrive-Publicapi-RAM-0012_Volume_drive1
-		COMMAND		rfs1	SetVolumeLabel		PBASE-F32-DualDrive-Publicapi-RAM-0012_SetVolumeLabel_drive1
-		COMMAND		rfs1	Close		
-		COMMAND		rfs1	~		
-	END_TEST_BLOCK
-    START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs	rfs2
-		COMMAND		rfs2	new		
-		COMMAND		rfs2	Connect		
-		COMMAND		rfs2	Volume		        PBASE-F32-DualDrive-Publicapi-RAM-0012_Volume_drive2
-		COMMAND		rfs2	SetVolumeLabel		PBASE-F32-DualDrive-Publicapi-RAM-0012_SetVolumeLabel_drive2
-		COMMAND		rfs2	Volume		        PBASE-F32-DualDrive-Publicapi-RAM-0012_Volume_drive2
-		COMMAND		rfs2	SetVolumeLabel		PBASE-F32-DualDrive-Publicapi-RAM-0012_SetVolumeLabel_drive2
-		COMMAND		rfs2	Close		
-		COMMAND		rfs2	~		
-	END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE 			PBASE-F32-DualDrive-Publicapi-RAM-0007
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0008
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0008
-//! @SYMAPI			    CFileMan:Move();RFile::Read();RFile::Write()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		02/07/2008 
-//! @SYMTestCaseDesc		Move the file from system drive to one of the dual drive concurrenlty with the read/write operation on another dual drive
-//!											
-//! @SYMTestActions		1.Move the file from systemdrive to dual drive and back from dual drive to system drive.
-//!				2.Write and read the content of the file from other drive in concurrent with above action on another drive
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	File is moved in concurrent with read/write operation on another drive.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	50	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs				rfs1
-		CREATE_OBJECT	RFile			file1
-		CREATE_OBJECT	CFileMan	    fileMan1
-		COMMAND		rfs1		new
-		COMMAND		rfs1		Connect
-		COMMAND		rfs1		MkDir			PBASE-F32-DualDrive-Publicapi-RAM-0011_MkDir_drive1
-        COMMAND		file1		new
-		COMMAND		fileMan1	NewL		    PBASE-F32-DualDrive-Publicapi-RAM-0011_NewL_drive1
-		COMMAND		fileMan1	Move		    PBASE-F32-DualDrive-Publicapi-RAM-0011_Move_drive1
-		COMMAND     fileMan1    Move            PBASE-F32-DualDrive-Publicapi-RAM-0011_Move2_drive1
-        COMMAND		file1		Open		    PBASE-F32-DualDrive-Publicapi-RAM-0011_Open2_drive1
-        COMMAND		rfs1		RmDir		    PBASE-F32-DualDrive-Publicapi-RAM-0011_RmDir_drive1
-        COMMAND		file1		Close
-        COMMAND		fileMan1	~
-		COMMAND		file1		~
-		COMMAND		rfs1		~		
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-		CREATE_OBJECT	RFs	rfs2
-		CREATE_OBJECT	RFile	    file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open1_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0008_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0008_Copy_drive2
-        COMMAND		file2	    Close
-        COMMAND		file2	    Replace		PBASE-F32-DualDrive-Publicapi-RAM-0008_Replace_drive2
-		COMMAND		file2	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0008_Write_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open_drive2
-		COMMAND		file2	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0008_Read_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    ~		
-		COMMAND		rfs2	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0008_Delete_drive2
-		COMMAND		rfs2	    ~		
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0008
-
-START_TESTCASE 			PBASE-F32-DualDrive-Publicapi-RAM-0009
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0009
-//! @SYMAPI			    RFs::MkDirAll();TEntry::IsDir();RFs::RmDir()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc		Try creating directory and removing directory with read and write operation concurrantly on dual drives.
-//!                         
-//! @SYMTestActions		1. Create RFs instance.
-//!				        2. Call RFs::MkDirAll() to create the directories.
-//!                     3. Check the directory created using TEntry()
-//!                     4. Remove the directory.
-//!                     5. Perform Read/Write operation on a file on different drive in concurrent with the above operation
-//!				
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	  Creates the directories on to both the drives in concurrent with the read/write operation on the other drive.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs	        rfs1
-        CREATE_OBJECT	TEntry		tEntry1	
-		COMMAND		rfs1	    new
-		COMMAND		rfs1	    Connect
-		COMMAND		rfs1	    MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll_drive1
-        COMMAND		tEntry1		new
-        COMMAND		rfs1		Entry       PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry_drive1
-        COMMAND		tEntry1		IsDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive1
-        COMMAND		tEntry1		~
-        COMMAND		rfs1	    RmDir       PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir_drive1
-		COMMAND		rfs1	    Close
-        COMMAND		rfs1	    ~
-	END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-		CREATE_OBJECT	RFs	rfs2
-		CREATE_OBJECT	RFile	    file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open1_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0008_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0008_Copy_drive2
-        COMMAND		file2	    Close
-        COMMAND		file2	    Replace		PBASE-F32-DualDrive-Publicapi-RAM-0008_Replace_drive2
-		COMMAND		file2	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0008_Write_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open_drive2
-		COMMAND		file2	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0008_Read_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    ~		
-		COMMAND		rfs2	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0008_Delete_drive2
-		COMMAND		rfs2	    ~		
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE 			PBASE-F32-DualDrive-Publicapi-RAM-0009
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0010
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0010
-//! @SYMAPI			CDirScan::SetScanDataL();CDirScan::NextL()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		02/07/2008 
-//! @SYMTestCaseDesc		Testcase to get the filtered list of filess from  both the drives CONCURRENTly
-
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <Drive>\dirscan\TempDir\ as parameter
-//!				3.Call CDirScan::NewL() and connected file server session as parameter.
-//!				4.Call CDirScan::SetScanDataL() and <Drive>\dirscan\ as first parameter, KEntryAttNormal as second
-//!				  parameter, ESortByName as third parameter and EScanDownTree as fourth parameter
-//!				5.Call CDirScan::NextL() and CDir object as parameter.
-//!				6.Call CDirScan::FullPath() to verify the expected directory path.
-//!				7.Call CDir::Count() to verify the number of entries returned.
-//!				8.Call CDir::operator[] to verify the entries returned.
-//!				9.Call RFs::RmDir() and <Drive>\dirscan\TempDir\ as parameter
-//!             10. Perform above operation on other drive concurrently
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Filters the file set with KEntryAttNormal as attribute mask on both the drives
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv		\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs		rfs1
-		CREATE_OBJECT	CFileMan	fileMan1
-        CREATE_OBJECT	TEntry		tEntry1
-		CREATE_OBJECT	CDirScan	cdirScan1
-		CREATE_OBJECT	CDir		cdir1
-		COMMAND		rfs1		new			
-		COMMAND		rfs1		Connect
-		COMMAND		rfs1		MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll_drive1
-		COMMAND		fileMan1	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0015_NewL_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy1_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy2_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy3_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy4_drive1
-		COMMAND		rfs1		MkDirAll			PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll2_drive1
-		COMMAND		tEntry1		new
-		COMMAND		cdirScan1	NewL			PBASE-F32-DualDrive-Publicapi-RAM-0015_CDirScan_NewL_drive1
-		COMMAND		cdirScan1	SetScanDataL		PBASE-F32-DualDrive-Publicapi-RAM-0015_SetScanDataL_drive1
-		COMMAND		cdirScan1	NextL			PBASE-F32-DualDrive-Publicapi-RAM-0015_NextL_drive1
-		COMMAND		cdirScan1	FullPath		PBASE-F32-DualDrive-Publicapi-RAM-0015_FullPath_drive1
-		COMMAND		cdir1		Count			PBASE-F32-DualDrive-Publicapi-RAM-0015_Count_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index1_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index2_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index3_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index4_drive1
-		COMMAND		cdir1		~
-		COMMAND		cdirScan1	~
-		COMMAND		rfs1		RmDir			PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir1_drive1
-		COMMAND		tEntry1		~
-		COMMAND		fileMan1	Delete		PBASE-F32-DualDrive-Publicapi-RAM-0015_Delete_drive1
-		COMMAND		rfs1		RmDir			PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir2_drive1
-		COMMAND		fileMan1	~
-		COMMAND		rfs1		~
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv		\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs		rfs2
-		CREATE_OBJECT	CFileMan	fileMan2
-        CREATE_OBJECT	TEntry		tEntry2
-		CREATE_OBJECT	CDirScan	cdirScan2
-		CREATE_OBJECT	CDir		cdir2
-		COMMAND		rfs2		new			
-		COMMAND		rfs2		Connect
-		COMMAND		rfs2		MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0015_NewL_drive2
-		COMMAND		fileMan2	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy1_drive2
-		COMMAND		fileMan2	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy2_drive2
-		COMMAND		fileMan2	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy3_drive2
-		COMMAND		fileMan2	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy4_drive2
-		COMMAND		rfs2		MkDirAll			PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll2_drive2
-		COMMAND		tEntry2		new
-		COMMAND		cdirScan2	NewL			PBASE-F32-DualDrive-Publicapi-RAM-0015_CDirScan_NewL_drive2
-		COMMAND		cdirScan2	SetScanDataL		PBASE-F32-DualDrive-Publicapi-RAM-0015_SetScanDataL_drive2
-		COMMAND		cdirScan2	NextL			PBASE-F32-DualDrive-Publicapi-RAM-0015_NextL_drive2
-		COMMAND		cdirScan2	FullPath		PBASE-F32-DualDrive-Publicapi-RAM-0015_FullPath_drive2
-		COMMAND		cdir2		Count			PBASE-F32-DualDrive-Publicapi-RAM-0015_Count_drive2
-		COMMAND		cdir2		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index1_drive2
-		COMMAND		cdir2		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index2_drive2
-		COMMAND		cdir2		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index3_drive2
-		COMMAND		cdir2		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index4_drive2
-		COMMAND		cdir2		~
-		COMMAND		cdirScan2	~
-		COMMAND		rfs2		RmDir			PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir1_drive2
-		COMMAND		tEntry2		~
-		COMMAND		fileMan2	Delete		PBASE-F32-DualDrive-Publicapi-RAM-0015_Delete_drive2
-	    COMMAND		rfs2		RmDir		PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir2_drive2
-		COMMAND		fileMan2	~
-		COMMAND		rfs2		~
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0010
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0011
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0011
-//! @SYMAPI			    CDirScan::SetScanDataL();RFile::Read();RFile::Write()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		02/07/2008 
-//! @SYMTestCaseDesc		Testcase to get the filtered list of files in concurrant with read/write operation
-//! @SYMTestActions		1. Filter the files with attribute normal.
-//!                     2. Perform write/ read operation in concurrant.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority	High
-//! @SYMTestExpectedResults	Filters the file set with KEntryAttNormal as attribute mask in concurrant with read/write operation on another drive
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv		\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs		rfs1
-		CREATE_OBJECT	CFileMan	fileMan1
-        CREATE_OBJECT	TEntry		tEntry1
-		CREATE_OBJECT	CDirScan	cdirScan1
-		CREATE_OBJECT	CDir		cdir1
-		COMMAND		rfs1		new			
-		COMMAND		rfs1		Connect
-		COMMAND		rfs1		MkDirAll		PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll_drive1
-		COMMAND		fileMan1	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0015_NewL_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy1_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy2_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy3_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy4_drive1
-		COMMAND		rfs1		MkDirAll			PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll2_drive1
-		COMMAND		tEntry1		new
-		COMMAND		cdirScan1	NewL			PBASE-F32-DualDrive-Publicapi-RAM-0015_CDirScan_NewL_drive1
-		COMMAND		cdirScan1	SetScanDataL		PBASE-F32-DualDrive-Publicapi-RAM-0015_SetScanDataL_drive1
-		COMMAND		cdirScan1	NextL			PBASE-F32-DualDrive-Publicapi-RAM-0015_NextL_drive1
-		COMMAND		cdirScan1	FullPath		PBASE-F32-DualDrive-Publicapi-RAM-0015_FullPath_drive1
-		COMMAND		cdir1		Count			PBASE-F32-DualDrive-Publicapi-RAM-0015_Count_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index1_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index2_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index3_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index4_drive1
-		COMMAND		cdir1		~
-		COMMAND		cdirScan1	~
-		COMMAND		rfs1		RmDir			PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir1_drive1
-		COMMAND		tEntry1		~
-		COMMAND		fileMan1	Delete		PBASE-F32-DualDrive-Publicapi-RAM-0015_Delete_drive1
-		COMMAND		fileMan1	RmDir		PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir2_drive1
-		COMMAND		fileMan1	~
-		COMMAND		rfs1		~
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-		CREATE_OBJECT	RFs	rfs2
-		CREATE_OBJECT	RFile	    file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open1_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0008_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0008_Copy_drive2
-        COMMAND		file2	    Close
-        COMMAND		file2	    Replace		PBASE-F32-DualDrive-Publicapi-RAM-0008_Replace_drive2
-		COMMAND		file2	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0008_Write_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open_drive2
-		COMMAND		file2	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0008_Read_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    ~		
-		COMMAND		rfs2	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0008_Delete_drive2
-		COMMAND		rfs2	    ~		
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0011
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0012
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0012
-//! @SYMAPI			CFileMan::Attribs();CFileMan::Copy();RFile::Read();RFile::Write()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc		Copy files on to the drive in concurrent with read/write operation on the other drive.
-//!				
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Copy() to copy files on to the mmc drives.
-//!             3. Perform read/write operation on the other drive concurrenlty
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Copying of file will be done concurranlty with the read/write operation
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv	    \base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-        CREATE_OBJECT	RFs	        rfs1
-		CREATE_OBJECT	RFile	    file1
-        CREATE_OBJECT	CFileMan	fileMan1
-		COMMAND		rfs1	    new
-		COMMAND		rfs1	    Connect
-		COMMAND		file1	    new
-		COMMAND		file1	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0005_Open_drive1
-		COMMAND		fileMan1	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0005_NewL_drive1
-		COMMAND		fileMan1    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy_drive1
-        COMMAND     fileMan1    Attribs     PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs_drive1
-        COMMAND     rfs1        Delete      PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete_drive1
-		COMMAND		fileMan1    ~
-		COMMAND		file1	    Close
-		COMMAND		file1	    ~
-		COMMAND		rfs1	    Close
-		COMMAND		rfs1	    ~
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-		CREATE_OBJECT	RFs	rfs2
-		CREATE_OBJECT	RFile	    file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open1_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0008_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0008_Copy_drive2
-        COMMAND		file2	    Close
-        COMMAND		file2	    Replace		PBASE-F32-DualDrive-Publicapi-RAM-0008_Replace_drive2
-		COMMAND		file2	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0008_Write_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0008_Open_drive2
-		COMMAND		file2	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0008_Read_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    ~		
-		COMMAND		rfs2	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0008_Delete_drive2
-		COMMAND		rfs2	    ~		
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0012
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0013
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0013
-//! @SYMAPI			CFileMan::Attribs();CFileMan::Copy()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc		Copies large file on to the drive in cuncurrent with read/write operation on the large file on the other drive.
-//!				
-//! @SYMTestActions		
-//!				1. Call Copy() to copy files on to the mmc drives.
-//!             2. Perform read/write operation on the other drive concurrenlty
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Copying of file will be done concurranlty with the read/write operation
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv	    \base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-        CREATE_OBJECT	RFs	        rfs1
-		CREATE_OBJECT	RFile	    file1
-        CREATE_OBJECT	CFileMan	fileMan1
-		COMMAND		rfs1	    new
-		COMMAND		rfs1	    Connect
-		COMMAND		file1	    new
-		COMMAND		file1	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0020_Open_drive1
-		COMMAND		fileMan1	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0020_NewL_drive1
-		COMMAND		fileMan1    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0020_Copy_drive1
-        COMMAND     fileMan1    Attribs     PBASE-F32-DualDrive-Publicapi-RAM-0020_Attribs_drive1
-        COMMAND     rfs1        Delete      PBASE-F32-DualDrive-Publicapi-RAM-0020_Delete_drive1
-		COMMAND		fileMan1    ~
-		COMMAND		file1	    Close
-		COMMAND		file1	    ~
-		COMMAND		rfs1	    Close
-		COMMAND		rfs1	    ~
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-		CREATE_OBJECT	RFs	rfs2
-		CREATE_OBJECT	RFile	    file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0018_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0018_Copy_drive2
-        COMMAND		file2	    Close
-        COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open2_drive2
-		COMMAND		file2	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0018_Write_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open2_drive2
-		COMMAND		file2	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0018_Read_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    ~		
-		COMMAND		rfs2	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0018_Delete_drive2
-		COMMAND		rfs2	    ~		
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0013
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0014
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0014
-//! @SYMAPI			    CFileMan:Move();RFile::Read();RFile::Write()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		03/07/2008 
-//! @SYMTestCaseDesc		Move the much large file in concurrant with the read/write operation on the file on another drive concurrenlty 
-//!											
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move()  to move the file from system drive to one of the dual drive.
-//!				4.Perform Read/write operation on the other drive
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	File moving and read/write operation on diff drives performed successfully
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	50	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs				rfs1
-		CREATE_OBJECT	RFile			file1
-		CREATE_OBJECT	CFileMan	    fileMan1
-		COMMAND		rfs1		new
-		COMMAND		rfs1		Connect
-		COMMAND		rfs1		MkDir			PBASE-F32-DualDrive-Publicapi-RAM-0021_MkDir_drive1
-        COMMAND		file1		new
-		COMMAND		fileMan1	NewL		    PBASE-F32-DualDrive-Publicapi-RAM-0021_NewL_drive1
-		COMMAND		fileMan1	Move		    PBASE-F32-DualDrive-Publicapi-RAM-0021_Move_drive1
-		COMMAND     fileMan1    Move            PBASE-F32-DualDrive-Publicapi-RAM-0021_Move2_drive1
-        COMMAND		file1		Open		    PBASE-F32-DualDrive-Publicapi-RAM-0021_Open2_drive1
-        COMMAND		rfs1		RmDir		    PBASE-F32-DualDrive-Publicapi-RAM-0021_RmDir_drive1
-        COMMAND		file1		Close
-        COMMAND		fileMan1	~
-		COMMAND		file1		~
-		COMMAND		rfs1		~		
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-		CREATE_OBJECT	RFs	rfs2
-		CREATE_OBJECT	RFile	    file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0018_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0018_Copy_drive2
-        COMMAND		file2	    Close
-        COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open2_drive2
-		COMMAND		file2	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0018_Write_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open2_drive2
-		COMMAND		file2	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0018_Read_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    ~		
-		COMMAND		rfs2	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0018_Delete_drive2
-		COMMAND		rfs2	    ~		
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0014
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0015
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0015
-//! @SYMAPI			CDirScan::SetScanDataL;CDirScan::NextL()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		02/07/2008 
-//! @SYMTestCaseDesc		Testcase to get the filtered list of filess from  both the drives concurrently
-
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <Drive>\dirscan\TempDir\ as parameter
-//!				3.Call CDirScan::NewL() and connected file server session as parameter.
-//!				4.Call CDirScan::SetScanDataL() and <Drive>\dirscan\ as first parameter, KEntryAttReadOnly as second
-//!				  parameter, ESortByName as third parameter and EScanDownTree as fourth parameter
-//!				5.Call CDirScan::NextL() and CDir object as parameter.
-//!				6.Call CDirScan::FullPath() to verify the expected directory path.
-//!				7.Call CDir::Count() to verify the number of entries returned.
-//!				8.Call CDir::operator[] to verify the entries returned.
-//!				9.Call RFs::RmDir() and <Drive>\dirscan\TempDir\ as parameter
-//!             10. Perform above operation on both the drives concurrently
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Filters the file set with KEntryAttReadOnly as attribute mask on one drive and KEntryAttrNormal on other drives
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	100	T_Sfsrv		\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs		rfs1
-		CREATE_OBJECT	CFileMan	fileMan1
-        CREATE_OBJECT	TEntry		tEntry1
-		CREATE_OBJECT	CDirScan	cdirScan1
-		CREATE_OBJECT	CDir		cdir1
-		COMMAND		rfs1		new			
-		COMMAND		rfs1		Connect
-		COMMAND		rfs1		MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0023_MkDirAll_drive1
-		COMMAND		fileMan1	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0023_NewL_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0023_Copy1_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0023_Copy2_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0023_Copy3_drive1
-		COMMAND		fileMan1	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0023_Copy4_drive1
-        COMMAND		rfs1        SetAtt      PBASE-F32-DualDrive-Publicapi-RAM-0023_SetAtt1_drive1
-        COMMAND		rfs1        SetAtt      PBASE-F32-DualDrive-Publicapi-RAM-0023_SetAtt2_drive1
-		COMMAND		tEntry1		new
-		COMMAND		cdirScan1	NewL			PBASE-F32-DualDrive-Publicapi-RAM-0023_CDirScan_NewL_drive1
-		COMMAND		cdirScan1	SetScanDataL	PBASE-F32-DualDrive-Publicapi-RAM-0023_SetScanDataL_drive1
-		COMMAND		cdirScan1	NextL			PBASE-F32-DualDrive-Publicapi-RAM-0023_NextL_drive1
-		COMMAND		cdirScan1	FullPath		PBASE-F32-DualDrive-Publicapi-RAM-0023_FullPath_drive1
-		COMMAND		cdir1		Count			PBASE-F32-DualDrive-Publicapi-RAM-0023_Count_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0023_index1_drive1
-		COMMAND		cdir1		[]			PBASE-F32-DualDrive-Publicapi-RAM-0023_index2_drive1
-        COMMAND		rfs1        SetAtt      PBASE-F32-DualDrive-Publicapi-RAM-0023_SetAtt4_drive1
-        COMMAND		rfs1        SetAtt      PBASE-F32-DualDrive-Publicapi-RAM-0023_SetAtt5_drive1
-		COMMAND		cdir1		~
-		COMMAND		cdirScan1	~
-		COMMAND		tEntry1		~
-		COMMAND		fileMan1	Delete		PBASE-F32-DualDrive-Publicapi-RAM-0023_Delete_drive1
-		COMMAND		rfs1    	RmDir		PBASE-F32-DualDrive-Publicapi-RAM-0023_RmDir2_drive1
-		COMMAND		fileMan1	~
-		COMMAND		rfs1		~
-END_TEST_BLOCK
-START_TEST_BLOCK	100	T_Sfsrv		\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFs		rfs2
-		CREATE_OBJECT	CFileMan	fileMan2
-        CREATE_OBJECT	TEntry		tEntry2
-		CREATE_OBJECT	CDirScan	cdirScan2
-		CREATE_OBJECT	CDir		cdir2
-		COMMAND		rfs2		new			
-		COMMAND		rfs2		Connect
-		COMMAND		rfs2		MkDirAll	PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0015_NewL_drive2
-		COMMAND		fileMan2	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy1_drive2
-		COMMAND		fileMan2	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy2_drive2
-		COMMAND		fileMan2	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy3_drive2
-		COMMAND		fileMan2	Copy		PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy4_drive2
-		COMMAND		rfs2		MkDirAll			PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll2_drive2
-		COMMAND		tEntry2		new
-		COMMAND		cdirScan2	NewL			PBASE-F32-DualDrive-Publicapi-RAM-0015_CDirScan_NewL_drive2
-		COMMAND		cdirScan2	SetScanDataL		PBASE-F32-DualDrive-Publicapi-RAM-0015_SetScanDataL_drive2
-		COMMAND		cdirScan2	NextL			PBASE-F32-DualDrive-Publicapi-RAM-0015_NextL_drive2
-		COMMAND		cdirScan2	FullPath		PBASE-F32-DualDrive-Publicapi-RAM-0015_FullPath_drive2
-		COMMAND		cdir2		Count			PBASE-F32-DualDrive-Publicapi-RAM-0015_Count_drive2
-		COMMAND		cdir2		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index1_drive2
-		COMMAND		cdir2		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index2_drive2
-		COMMAND		cdir2		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index3_drive2
-		COMMAND		cdir2		[]			PBASE-F32-DualDrive-Publicapi-RAM-0015_index4_drive2
-		COMMAND		cdir2		~
-		COMMAND		cdirScan2	~
-		COMMAND		rfs2		RmDir			PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir1_drive2
-		COMMAND		tEntry2		~
-		COMMAND		fileMan2	Delete		PBASE-F32-DualDrive-Publicapi-RAM-0015_Delete_drive2
-		COMMAND		fileMan2	RmDir		PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir2_drive2
-		COMMAND		fileMan2	~
-		COMMAND		rfs2		~
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0015
-
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0017
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0017
-//! @SYMAPI			RFormat::Open();RFormat::Next();RFile::Copy()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		03/07/2008 
-//! @SYMTestCaseDesc		Format the one drive concurrenlty with Copy operation on other drive.
-//!				Uses API elements: Format()
-//! @SYMTestActions		1. Call Format() on the drive.
-//!				        2. Try Copying files on to the other drive concurrantly with above operation
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	formats the one drive with the read/write operation on another drive concurrently.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	1000	T_Sfsrv	    \base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-        CREATE_OBJECT	RFs	        rfs1
-		CREATE_OBJECT	RFile	    file1
-        CREATE_OBJECT	CFileMan	fileMan1
-		COMMAND		rfs1	    new
-		COMMAND		rfs1	    Connect
-		COMMAND		file1	    new
-		COMMAND		file1	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0020_Open_drive1
-		COMMAND		fileMan1	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0020_NewL_drive1
-		COMMAND		fileMan1    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0020_Copy_drive1
-        COMMAND     fileMan1    Attribs     PBASE-F32-DualDrive-Publicapi-RAM-0020_Attribs_drive1
-        COMMAND     rfs1        Delete      PBASE-F32-DualDrive-Publicapi-RAM-0020_Delete_drive1
-		COMMAND		fileMan1    ~
-		COMMAND		file1	    Close
-		COMMAND		file1	    ~
-		COMMAND		rfs1	    Close
-		COMMAND		rfs1	    ~
-END_TEST_BLOCK
-START_TEST_BLOCK	1000	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFormat	format2
-		CREATE_OBJECT	RFs	rfs2
-		COMMAND		rfs2	new
-		COMMAND		rfs2	Connect
-		COMMAND		format2	new
-		COMMAND		format2	Open		PBASE-F32-DualDrive-Publicapi-RAM-0004_Open_drive2
-		COMMAND		format2	Next
-		COMMAND		format2	Close
-		COMMAND		format2	~
-		COMMAND		rfs2	Close
-		COMMAND		rfs2	~
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0017
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0018
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0018
-//! @SYMAPI			RFormat::Open();RFormat::Next();RFile::Read();RFile::Write()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		03/07/2008 
-//! @SYMTestCaseDesc		Format the one drive concurrenlty with read/write operation on large file on another drive.
-//!				Uses API elements: Format()
-//! @SYMTestActions		1. Call Format() on the drive.
-//!				        2. Try Writing and reading operation on the drive concurrantly with above operation
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	formats the one drive with the read/write operation on another drive concurrently.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	1000	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFormat	format1
-		CREATE_OBJECT	RFs	rfs1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-DualDrive-Publicapi-RAM-0004_Open_drive1
-		COMMAND		format1	Next
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-END_TEST_BLOCK
-START_TEST_BLOCK	1000	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-		CREATE_OBJECT	RFs	rfs2
-		CREATE_OBJECT	RFile	    file2
-        CREATE_OBJECT	CFileMan	fileMan2
-		COMMAND		rfs2	    new
-		COMMAND		rfs2	    Connect
-		COMMAND		file2	    new
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open_drive2
-		COMMAND		fileMan2	NewL		PBASE-F32-DualDrive-Publicapi-RAM-0018_NewL_drive2
-		COMMAND		fileMan2    Copy		PBASE-F32-DualDrive-Publicapi-RAM-0018_Copy_drive2
-        COMMAND		file2	    Close
-        COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open2_drive2
-		COMMAND		file2	    Write		PBASE-F32-DualDrive-Publicapi-RAM-0018_Write_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    Open		PBASE-F32-DualDrive-Publicapi-RAM-0018_Open2_drive2
-		COMMAND		file2	    Read		PBASE-F32-DualDrive-Publicapi-RAM-0018_Read_drive2
-		COMMAND		file2	    Close		
-		COMMAND		file2	    ~		
-		COMMAND		rfs2	    Delete		PBASE-F32-DualDrive-Publicapi-RAM-0018_Delete_drive2
-		COMMAND		rfs2	    ~		
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0018
-
-START_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0016
-//! @SYMTestCaseID		PBASE-F32-DualDrive-Publicapi-RAM-0016
-//! @SYMAPI			RFormat::Open();RFormat::Next()
-//! @SYMAuthor			Nirmala Bailur 
-//! @SYMCreationDate		30/05/2008 
-//! @SYMTestCaseDesc		Try to format both the drives.
-//!				Uses API elements: Format()
-//! @SYMTestActions		
-//!				        1. Call Format() on both the drives.	
-//!				        2. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Format() returns KErrNone and formats both the drives.
-//! @SYMTestType		CIT
-CONCURRENT
-START_TEST_BLOCK	1000	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFormat	format1
-		CREATE_OBJECT	RFs	rfs1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-DualDrive-Publicapi-RAM-0004_Open_drive1
-		COMMAND		format1	Next
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-END_TEST_BLOCK
-START_TEST_BLOCK	1000	T_Sfsrv	\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini 
-		CREATE_OBJECT	RFormat	format2
-		CREATE_OBJECT	RFs	rfs2
-		COMMAND		rfs2	new
-		COMMAND		rfs2	Connect
-		COMMAND		format2	new
-		COMMAND		format2	Open		PBASE-F32-DualDrive-Publicapi-RAM-0004_Open_drive2
-		COMMAND		format2	Next
-		COMMAND		format2	Close
-		COMMAND		format2	~
-		COMMAND		rfs2	Close
-		COMMAND		rfs2	~
-END_TEST_BLOCK
-CONSECUTIVE
-END_TESTCASE			PBASE-F32-DualDrive-Publicapi-RAM-0016
-
-
-
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Dir-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,784 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Jaanus Randveer, Runno Sgirka
-//! 	@SYMScriptCreationDate		12/10/2007
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of CDir class:
-//!	TInt Count() const.
-//!	const TEntry &operator[](TInt anIndex) const.
-//!	TInt Sort(TUint aEntrySortKey).
-
-
-LOAD_SUITE	T_SfSrv
-DELAY	5000
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0001
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Function Count() test, that counts entries in the array of directory entries.
-//!				Uses API elements: Count().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\dir\ (containing 4 files: big_line.txt, Test1.txt, Test2.txt, Test3.txt) as first parameter, 
-//!				  KEntryAttHidden as second parameter, ESortByName as third parameter, CDir pointer as fourth parameter
-//!				3.Call CDir::Count().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Count() finds 4 entries!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0001-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0001-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0001-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0001-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0001-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0001-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	CDir	CDir1
-		COMMAND		RFs1	new			
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	GetDir			PBASE-F32-Dir-PublicApi-0001-002-GetDir_command004
-		COMMAND		CDir1	Count			PBASE-F32-Dir-PublicApi-0001-002-Count_command005
-		COMMAND		CDir1	~		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0001-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0001-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0001-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0002
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		operator const TEntry &operator[](TInt anIndex) const test, that takes first entry from the array of directory entries.
-//!				Uses API elements: operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 4 files: big_line.txt, Test1.txt, Test2.txt, Test3.txt) as first parameter,
-//!			  	  KEntryAttHidden as second parameter, ESortByName as third parameter, CDir pointer as fourth parameter
-//!				3.Create new TEntry object.
-//!				4.Call CDir::operator[]() and pass 0 as parameter.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	First element is big_line.txt .
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0002-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0002-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0002-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0002-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0002-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0002-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0002-002-GetDir_command005
-		COMMAND		TEntry1	new
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0002-002-index_command007
-		COMMAND		CDir1	~
-		COMMAND		TEntry1	~		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0002-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0002-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0002-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0002
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0003
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Function Sort(TUint aEntrySortKey) test, that sorts the array of directory entries by name ascendingly.
-//!				Uses API elements: Sort(), operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 4 files: big_line.txt, Test1.txt, Test2.txt, Test3.txt) as first parameter, 
-//!				  KEntryAttHidden as second parameter, ESortNone as third parameter, CDir pointer as fourth parameter.
-//!				3.Create new TEntry object.
-//!				4.Call CDir::Sort() and ESortByName | EAscending as parameter.
-//!				5.Call operator[]() to verify the sorting result.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0003-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0003-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0003-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0003-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0003-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0003-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	2000	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0003-002-GetDir_command005
-		COMMAND		TEntry1	new
-		COMMAND		CDir1	Sort		PBASE-F32-Dir-PublicApi-0003-002-Sort_command007
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0003-002-index_command008
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0003-002-index_command009
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0003-002-index_command010
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0003-002-index_command011
-		COMMAND		CDir1	~
-		COMMAND		TEntry1	~
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0003-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0003-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0003-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0003
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0004
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0004
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Function Sort(TUint aEntrySortKey) test, that sorts the array of directory entries by extension descendingly.
-//!				Uses API elements: Sort(), operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 4 files: big_line.txt, Test1.txt, Test2.txt, Test3.txt) as first parameter, 
-//!				  KEntryAttHidden as second parameter, ESortNone as third parameter, CDir pointer as fourth parameter.
-//!				3.Create new TEntry object.
-//!				4.Call CDir::Sort() and ESortByExt | EDescending as parameter.
-//!				5.Call operator[]() to verify the sorting result.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0004-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0004-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0004-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0004-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0004-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0004-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	2000	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0004-002-GetDir_command005
-		COMMAND		TEntry1	new
-		COMMAND		CDir1	Sort		PBASE-F32-Dir-PublicApi-0004-002-Sort_command007
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0004-002-index_command008
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0004-002-index_command009
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0004-002-index_command010
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0004-002-index_command011
-		COMMAND		CDir1	~
-		COMMAND		TEntry1	~
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0004-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0004-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0004-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0004
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0005
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Function Sort(TUint aEntrySortKey) test, that sorts the array of directory entries by UID.
-//!				Uses API elements: Sort(), operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 4 files: big_line.txt, Test1.txt, Test2.txt, Test3.txt) as first parameter, 
-//!				  KEntryAttHidden as second parameter, ESortNone as third parameter, CDir pointer as fourth parameter.
-//!				3.Create new TEntry object.
-//!				4.Call CDir::Sort() and ESortByUid as parameter.
-//!				5.Call operator[]() to verify the sorting result.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0005-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0005-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0005-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0005-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0005-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0005-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	2000	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0005-002-GetDir_command005
-		COMMAND		TEntry1	new
-		COMMAND		CDir1	Sort		PBASE-F32-Dir-PublicApi-0005-002-Sort_command007
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0005-002-index_command008
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0005-002-index_command009
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0005-002-index_command010
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0005-002-index_command011
-		COMMAND		CDir1	~
-		COMMAND		TEntry1	~
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0005-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0005-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0005-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0005
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0006
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Function Sort(TUint aEntrySortKey) test, that sorts the array of directory entries by file date, placing directories
-//!				first descendingly.
-//!				Uses API elements: Sort(), operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Make three directories, passing names BBDir, CCDir and AADir as parameters.
-//!				3.Call RFs::SetModified(const TDesC &aName, const TTime &aTime) to set directories' and files' modified date.
-//!				4.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 4 files and 3 folders: big_line.txt, Test1.txt, Test2.txt, Test3.txt, AADir, BBDir,
-//!				  CCDir) as first parameter, KEntryAttMaskSupported as second parameter,EDirsLast as third parameter, 
-//!				  CDir pointer as fourth parameter.
-//!				5.Create new TEntry object.
-//!				6.Call CDir::Sort() and EDirsFirst | EDirDescending | ESortByDate as parameter.
-//!				7.Call operator[]() to verify the sorting result.
-//!				8.Remove previously created directories.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0006-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0006-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0006-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0006-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0006-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0006-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	2000	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0006-002-MkDirAll_command005
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0006-002-MkDirAll_command006
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0006-002-MkDirAll_command007
-		COMMAND		RFs1	SetModified	PBASE-F32-Dir-PublicApi-0006-002-SetModified_command008
-		COMMAND		RFs1	SetModified	PBASE-F32-Dir-PublicApi-0006-002-SetModified_command009
-		COMMAND		RFs1	SetModified	PBASE-F32-Dir-PublicApi-0006-002-SetModified_command010
-		COMMAND		RFs1	SetModified	PBASE-F32-Dir-PublicApi-0006-002-SetModified_command011
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0006-002-GetDir_command012
-		COMMAND		TEntry1	new
-		COMMAND		CDir1	Sort		PBASE-F32-Dir-PublicApi-0006-002-Sort_command014
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0006-002-index_command015
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0006-002-index_command016
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0006-002-index_command017
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0006-002-index_command018
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0006-002-index_command019
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0006-002-index_command020
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0006-002-index_command021
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0006-002-RmDir_command022
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0006-002-RmDir_command023
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0006-002-RmDir_command024
-		COMMAND		CDir1	~	
-		COMMAND		TEntry1	~	
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0006-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0006-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0006-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0006
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0007
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Function Sort(TUint aEntrySortKey) test, that sorts the array of directory entries by size, placing directories last.
-//!				Uses API elements: Sort(), operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Make three directories, passing names BBDir, CCDir and AADir as parameters.
-//!				3.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 4 files and 3 folders: big_line.txt, Test1.txt, Test2.txt, Test3.txt, AADir, BBDir, 
-//!				  CCDir) as first parameter, KEntryAttMaskSupported as second parameter, ESortNone as third parameter, CDir pointer 
-//!				  as fourth parameter.
-//!				4.Create new TEntry object.
-//!				5.Call CDir::Sort() and EDirsLast | ESortBySize as parameter.
-//!				6.Call operator[]() to verify the sorting result.
-//!				7.Remove previously created directories.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0007-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0007-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0007-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0007-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0007-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0007-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	2000	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0007-002-MkDirAll_command005
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0007-002-MkDirAll_command006
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0007-002-MkDirAll_command007
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0007-002-GetDir_command008
-		COMMAND		TEntry1	new
-		COMMAND		CDir1	Sort		PBASE-F32-Dir-PublicApi-0007-002-Sort_command010
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0007-002-index_command011
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0007-002-index_command012
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0007-002-index_command013
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0007-002-index_command014
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0007-002-index_command015
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0007-002-index_command016
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0007-002-index_command017
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0007-002-RmDir_command018
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0007-002-RmDir_command019
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0007-002-RmDir_command020
-		COMMAND		CDir1	~
-		COMMAND		TEntry1	~		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0007-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0007-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0007-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0007
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0008
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Function Sort(TUint aEntrySortKey) test, that sorts the array of directory entries by placing directories in the order
-//!				they occur.
-//!				Uses API elements: Sort(), operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Make three directories, passing names BBDir, CCDir and AADir as parameters.
-//!				3.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList, CDir
-//!				  *&aDirList), and <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 3 folders: AADir, BBDir, CCDir) as first parameter, KEntryAttMaskSupported
-//!				  as second parameter, ESortNone as third parameter, CDir pointer as fourth and fifth parameter.
-//!				4.Create new TEntry object.
-//!				5.Call CDir::Sort() and EDirsAnyOrder as parameter.
-//!				6.Remove previously created directories.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0008-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	2000	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		CREATE_OBJECT	CDir	CDir2
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0008-002-MkDirAll_command006
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0008-002-MkDirAll_command007
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0008-002-MkDirAll_command008
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0008-002-GetDir_command009
-		COMMAND		TEntry1	new
-		COMMAND		CDir2	Sort		PBASE-F32-Dir-PublicApi-0008-002-Sort_command011
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0008-002-RmDir_command012
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0008-002-RmDir_command013
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0008-002-RmDir_command014
-		COMMAND		CDir2	~
-		COMMAND		CDir1	~
-		COMMAND		TEntry1	~		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0008-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0008
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0009
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Test that checks that CDir entrylist is initialized correctly. Can be also used 
-//!				as RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList, CDir *&aDirList)
-//!				optional test.
-//!				Uses API elements: operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::TInt GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList,
-//!				  CDir *&aDirList), and <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 4 files: big_line.txt, Test1.txt, Test2.txt, Test3.txt) as first
-//!				  parameter, KEntryAttHidden as second parameter, ESortByName | EAscending as third parameter, first CDir pointer as 
-//!				  fourth parameter, second CDir pointer as fifth parameter.
-//!				3.Create new TEntry object.
-//!				4. Call CDir::Sort() and ESortByName | EAscending as parameter on the anEntryList.
-//!				5. Call operator[]() on the first CDir object to verify the sorting result.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0009-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0009-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0009-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0009-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0009-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0009-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	2000	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		CREATE_OBJECT	CDir	CDir2
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0009-002-GetDir_command006
-		COMMAND		TEntry1	new
-		COMMAND		CDir1	Sort		PBASE-F32-Dir-PublicApi-0009-002-Sort_command008
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0009-002-index_command009
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0009-002-index_command010
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0009-002-index_command011
-		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0009-002-index_command012
-		COMMAND		CDir2	~
-		COMMAND		CDir1	~
-		COMMAND		TEntry1	~		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0009-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0009-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0009-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0009
-
-
-START_TESTCASE 			PBASE-F32-Dir-PublicApi-0010
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0010
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		Function Sort(TUint aEntrySortKey) test, that sorts the array of directory entries by placing directories in the order
-//!				they occur.
-//!				Uses API elements: Sort(), operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Make three directories, passing names BBDir, CCDir and AADir as parameters.
-//!				3.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList, CDir
-//!				  *&aDirList), and <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 3 folders: AADir, BBDir, CCDir) as first parameter, KEntryAttMaskSupported
-//!				  as second parameter, ESortNone as third parameter, CDir pointer as fourth and fifth parameter.
-//!				4.Create new TEntry object.
-//!				5.Call CDir::Sort() and EDirDescending|EDirsFirst as parameter.
-//!				6.Call operator[]() on the second CDir object to verify the sorting result.
-//!				7.Remove previously created directories.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0010-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	2000	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	TEntry	TEntry1
-		CREATE_OBJECT	CDir	CDir1
-		CREATE_OBJECT	CDir	CDir2
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0010-002-MkDirAll_command006
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0010-002-MkDirAll_command007
-		COMMAND		RFs1	MkDirAll		PBASE-F32-Dir-PublicApi-0010-002-MkDirAll_command008
-		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0010-002-GetDir_command009
-		COMMAND		TEntry1	new
-		COMMAND		CDir2	Sort		PBASE-F32-Dir-PublicApi-0010-002-Sort_command011
-		COMMAND		CDir2	[]		PBASE-F32-Dir-PublicApi-0010-002-index_command012
-		COMMAND		CDir2	[]		PBASE-F32-Dir-PublicApi-0010-002-index_command013
-		COMMAND		CDir2	[]		PBASE-F32-Dir-PublicApi-0010-002-index_command014
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0010-002-RmDir_command015
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0010-002-RmDir_command016
-		COMMAND		RFs1	RmDir		PBASE-F32-Dir-PublicApi-0010-002-RmDir_command017
-		COMMAND		CDir2	~
-		COMMAND		CDir1	~
-		COMMAND		TEntry1	~		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0010-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-Dir-PublicApi-0010
-
-
-
-
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-//////								//////
-//////		 ///////////////////////////////////		//////
-//////		 ///				 ///		//////
-//////		 ///	  NEGATIVE TESTS	 ///		//////
-//////		 ///				 ///		//////	
-//////		 ///////////////////////////////////		//////
-//////								//////
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-
-
-////////
-//COUNT
-////////
-
-////////////
-//OPERATOR[]
-////////////
-
-//! START_TESTCASE 			PBASE-F32-Dir-PublicApi-0101
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0101
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		operator const TEntry &operator[](TInt anIndex) const negative test that tries to take 50th entry from the array of
-//!				directory entries.
-//!				Uses API elements: operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 1 file: Test1.txt) as first parameter, KEntryAttHidden as second parameter, ESortByName as
-//!				  third parameter, CDir pointer as fourth parameter.
-//!				3.Create new TEntry object.
-//!				4.Call CDir::operator[]() and pass 50 as parameter.		
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	E32USER-CBase = 21 panic
-//! @SYMTestType		CIT
-//! 	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-//! 		CREATE_OBJECT	RFs		RFs1
-//! 		CREATE_OBJECT	CFileMan	CFileMan1
-//! 		COMMAND		RFs1		new			
-//! 		COMMAND		RFs1		Connect
-//! 		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0101-001-MkDirAll_command004
-//! 		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0101-001-NewL_command005
-//! 		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0101-001-Copy_command006
-//! 		COMMAND		CFileMan1	~
-//! 		COMMAND		RFs1		~
-//! 	END_TEST_BLOCK
-//! 	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-//! 		CREATE_OBJECT	RFs	RFs1
-//! 		CREATE_OBJECT	TEntry	TEntry1
-//! 		CREATE_OBJECT	CDir	CDir1
-//! 		COMMAND		RFs1	new		
-//! 		COMMAND		RFs1	Connect		
-//! 		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0101-002-GetDir_command005
-//! 		COMMAND		TEntry1	new
-//! 		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0101-002-index_command007
-//! 		COMMAND		CDir1	~
-//! 		COMMAND		TEntry1	~		
-//! 		COMMAND		RFs1	~		
-//! 	END_TEST_BLOCK	!PanicCode=21 !PanicString=E32USER-CBase
-//! 	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-//! 		CREATE_OBJECT	RFs		RFs1
-//! 		CREATE_OBJECT	CFileMan	CFileMan1
-//! 		COMMAND		RFs1		new			
-//! 		COMMAND		RFs1		Connect
-//! 		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0101-003-NewL_command004
-//! 		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0101-003-Delete_command005
-//! 		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0101-003-RmDir_command006
-//! 		COMMAND		CFileMan1	~
-//! 		COMMAND		RFs1		~
-//! 	END_TEST_BLOCK
-//! END_TESTCASE 			PBASE-F32-Dir-PublicApi-0101
-
-
-//! START_TESTCASE 			PBASE-F32-Dir-PublicApi-0102
-//! @SYMTestCaseID		PBASE-F32-Dir-PublicApi-0102
-//! @SYMAPI			CDir
-//! @SYMTestCaseDesc		operator const TEntry &operator[](TInt anIndex) const negative test, that tries to take entry with index -1 from the
-//!				array of directory entries.
-//!				Uses API elements: operator[]().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList), and 
-//!				  <RAM_DRIVE>:\<RELATIVE_PATH>\Dir\ (containing 1 file: Test1.txt) as first parameter, KEntryAttHidden as second parameter, ESortByName as
-//!				  third parameter, CDir pointer as fourth parameter.
-//!				3.Create new TEntry object.
-//!				4.Call CDir::operator[]() and pass -1 as parameter.			
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	E32USER-CBase = 21 panic
-//! @SYMTestType		CIT
-//! 	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-//! 		CREATE_OBJECT	RFs		RFs1
-//! 		CREATE_OBJECT	CFileMan	CFileMan1
-//! 		COMMAND		RFs1		new			
-//! 		COMMAND		RFs1		Connect
-//! 		COMMAND		RFs1		MkDirAll		PBASE-F32-Dir-PublicApi-0102-001-MkDirAll_command004
-//! 		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0102-001-NewL_command005
-//! 		COMMAND		CFileMan1	Copy		PBASE-F32-Dir-PublicApi-0102-001-Copy_command006
-//! 		COMMAND		CFileMan1	~
-//! 		COMMAND		RFs1		~
-//! 	END_TEST_BLOCK
-//! 	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-//! 		CREATE_OBJECT	RFs	RFs1
-//! 		CREATE_OBJECT	TEntry	TEntry1
-//! 		CREATE_OBJECT	CDir	CDir1
-//! 		COMMAND		RFs1	new		
-//! 		COMMAND		RFs1	Connect		
-//! 		COMMAND		RFs1	GetDir		PBASE-F32-Dir-PublicApi-0102-002-GetDir_command005
-//! 		COMMAND		TEntry1	new
-//! 		COMMAND		CDir1	[]		PBASE-F32-Dir-PublicApi-0102-002-index_command007
-//! 		COMMAND		CDir1	~
-//! 		COMMAND		TEntry1	~		
-//! 		COMMAND		RFs1	~		
-//! 	END_TEST_BLOCK	!PanicCode=21 !PanicString=E32USER-CBase
-//! 	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Dir-PublicApi.ini 
-//! 		CREATE_OBJECT	RFs		RFs1
-//! 		CREATE_OBJECT	CFileMan	CFileMan1
-//! 		COMMAND		RFs1		new			
-//! 		COMMAND		RFs1		Connect
-//! 		COMMAND		CFileMan1	NewL		PBASE-F32-Dir-PublicApi-0102-003-NewL_command004
-//! 		COMMAND		CFileMan1	Delete		PBASE-F32-Dir-PublicApi-0102-003-Delete_command005
-//! 		COMMAND		RFs1		RmDir		PBASE-F32-Dir-PublicApi-0102-003-RmDir_command006
-//! 		COMMAND		CFileMan1	~
-//! 		COMMAND		RFs1		~
-//! 	END_TEST_BLOCK
-//! END_TESTCASE 			PBASE-F32-Dir-PublicApi-0102
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-DirScan-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1114 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Jaanus Randveer, Runno Sgirka
-//! 	@SYMScriptCreationDate		12/10/2007
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of CDirScan class:
-//!	CDirScan *NewL(RFs &aFs);
-//!	CDirScan *NewLC(RFs &aFs);
-//!	~CDirScan();
-//!	void SetScanDataL(const TDesC &aMatchName, TUint anEntryAttMask, TUint anEntrySortMask, TScanDirection aScanDir=EScanDownTree);
-//!	void NextL(CDir *&aDirEntries);
-//!	TPtrC AbbreviatedPath();
-//!	TPtrC FullPath();
-
-
-LOAD_SUITE	T_SfSrv
-DELAY	5000
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1001
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1001
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Constructor NewL(RFs &aFs) test, that constucts a CDirScan object.
-//! 				Uses API elements: NewL().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call CDirScan::NewL() and session as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	CDirScan object is not NULL
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CDirScan1	NewL		PBASE-F32-DirScan-PublicApi-1001-001-NewL_command004		
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1001
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1002
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1002
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Constructor NewLC(RFs &aFs) test, that constructs a CDirScan object and puts it to the clenupstack.
-//! 				Uses API elements: NewLC().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function;
-//!				2.Call CDirScan::NewLC() and connected file server session as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	CDirScan object is not NULL.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CDirScan1	NewLC		PBASE-F32-DirScan-PublicApi-1002-001-NewLC_command004		
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1002
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1003
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1003
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL(const TDesC &aMatchName, TUint anEntryAttMask, TUint anEntrySortMask, 
-//!				TScanDirection aScanDir=EScanDownTree) and function FullPath() test, that initialises a directory entries scan.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains 1 files and no directories.
-//! 				Uses API elements: NewLC(), SetScanDataL() FullPath();
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call CDirScan::NewLC() and connected file server session as parameter.
-//!				3.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttHidden as second
-//!				  parameter, ESortNone as third parameter and CDirScan::EScanUpTree as fourth parameter
-//!				4.Call CDirScan::FullPath().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Scans directory structure and checks if CDirScan::FullPath() result is equal to "<RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\"
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1003-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1003-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1003-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CDirScan1	NewLC		PBASE-F32-DirScan-PublicApi-1003-002-NewLC_command004
-		COMMAND		CDirScan1	SetScanDataL	PBASE-F32-DirScan-PublicApi-1003-002-SetScanDataL_command005
-		COMMAND		CDirScan1	FullPath	PBASE-F32-DirScan-PublicApi-1003-002-FullPath_command006
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1003-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-DirScan-PublicApi-1003-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1003-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1003
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1004
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1004
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function NextL(CDir *&aDirEntries) test, that scans the directory structure.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains no files and no directories.
-//!				The directory structure to be created is following: main directory <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\, in there two
-//!				sub-directories TempDir1 and TempDir2, in TempDir1 two sub-directories TempDir1Sub1 and TempDir1Sub2 and
-//!				in TempDir2 one sub-directory TempDir2Sub.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\ as parameter
-//!				3.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir2\ as parameter
-//!				4.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\TempDir1Sub1 as parameter
-//!				5.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\TempDir1Sub2 as parameter
-//!				6.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir2\TempDir2Sub as parameter
-//!				7.Call CDirScan::NewL() and connected file server session as parameter.
-//!				8.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttDir as second
-//!				  parameter, ESortByName as third parameter and EScanDownTree as fourth parameter
-//!				9.Call CDirScan::NextL() and CDir object as parameter.
-//!				10.Call CDirScan::FullPath() to verify the expected directory path.
-//!				11.Call CDirScan::NextL() and CDir object as parameter.
-//!				12.Call CDirScan::FullPath() to verify the expected directory path.
-//!				13.Call CDirScan::NextL() and CDir object as parameter.
-//!				14.Call CDirScan::FullPath() to verify the expected directory path.
-//!				15.Call CDirScan::NextL() and CDir object as parameter.
-//!				16.Call CDirScan::FullPath() to verify the expected directory path.
-//!				17.Call CDirScan::NextL() and CDir object as parameter.
-//!				18.Call CDirScan::FullPath() to verify the expected directory path.
-//!				19.Call CDirScan::NextL() and CDir object as parameter.
-//!				20.Call CDirScan::FullPath() to verify the expected directory path.
-//!				21.Call CDirScan::NextL() and CDir object as parameter.
-//!				22.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\TempDir1Sub1 as parameter
-//!				23.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\TempDir1Sub2 as parameter
-//!				24.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir2\TempDir2Sub as parameter
-//!				25.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\ as parameter
-//!				26.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir2\ as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Moves down the directory tree until there are no more directories. All the verifications pass.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1004-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command004
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command005
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command006
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command007
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command008
-		COMMAND		CDirScan1	NewL		PBASE-F32-DirScan-PublicApi-1004-002-NewL_command009
-		COMMAND		CDirScan1	SetScanDataL	PBASE-F32-DirScan-PublicApi-1004-002-SetScanDataL_command010
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1004-002-NextL_command011
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	FullPath	PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command013
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1004-002-NextL_command014
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	FullPath	PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command016
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1004-002-NextL_command017
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	FullPath	PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command019
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1004-002-NextL_command020
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	FullPath	PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command022
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1004-002-NextL_command023
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	FullPath	PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command025
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1004-002-NextL_command026
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	FullPath	PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command028
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1004-002-NextL_command029
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command032
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command033
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command034
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command035
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command036
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1004-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1004
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1005
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1005
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function AbbreviatedPath() test, that gets the abbreviated path of the entry currently being scanned.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains no files and no directories.
-//! 				Uses API elements: NewLC(), SetScanDataL, AbbreviatedPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call CDirScan::NewLC() and session as parameter.
-//!				3.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttHidden as second
-//!				  parameter, ESortNone as third parameter and CDirScan::EScanUpTree as fourth parameter
-//!				4.Call CDirScan::AbbreviatedPath().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Abbreviated path is equal to \.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1005-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CDirScan1	NewLC			PBASE-F32-DirScan-PublicApi-1005-002-NewLC_command004
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1005-002-SetScanDataL_command005
-		COMMAND		CDirScan1	AbbreviatedPath		PBASE-F32-DirScan-PublicApi-1005-002-AbbreviatedPath_command006
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1005-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1005
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1006
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1006
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function NextL(CDir *&aDirEntries) test, that scans an empty directory.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir - contains no files and directories.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as parameter
-//!				3.Call CDirScan::NewL() and connected file server session as parameter.
-//!				4.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as first parameter, KEntryAttDir as second
-//!				  parameter, ESortByName as third parameter and EScanDownTree as fourth parameter
-//!				5.Call CDirScan::NextL() and CDir object as parameter.
-//!				6.Call CDirScan::FullPath() to verify the expected directory path.
-//!				7.Call CDirScan::NextL() and CDir object as parameter.
-//!				8.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The first NexL() method call returns the empty directory itself, the second one returns NULL (nothing more
-//!				to scan).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1006-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1006-002-MkDirAll_command004
-		COMMAND		CDirScan1	NewL		PBASE-F32-DirScan-PublicApi-1006-002-NewL_command005
-		COMMAND		CDirScan1	SetScanDataL	PBASE-F32-DirScan-PublicApi-1006-002-SetScanDataL_command006
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1006-002-NextL_command007
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	FullPath	PBASE-F32-DirScan-PublicApi-1006-002-FullPath_command009
-		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1006-002-NextL_command010
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1006-002-RmDir_command013
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1006-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1006
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1007
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1007
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL(const TDesC &aMatchName, TUint anEntryAttMask, TUint anEntrySortMask, 
-//!				TScanDirection aScanDir=EScanDownTree) test, that uses KEntryAttNormal as attribute mask and expects files
-//!				only to be returned.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains 4 files and no directories. One directory
-//!				is going to be created.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as parameter
-//!				3.Call CDirScan::NewL() and connected file server session as parameter.
-//!				4.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttNormal as second
-//!				  parameter, ESortByName as third parameter and EScanDownTree as fourth parameter
-//!				5.Call CDirScan::NextL() and CDir object as parameter.
-//!				6.Call CDirScan::FullPath() to verify the expected directory path.
-//!				7.Call CDir::Count() to verify the number of entries returned.
-//!				8.Call CDir::operator[] to verify the entries returned.
-//!				9.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using KEntryAttNormal as attribute mask returns files only.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1007-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1007-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1007-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1007-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1007-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1007-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll			PBASE-F32-DirScan-PublicApi-1007-002-MkDirAll_command006
-		COMMAND		TEntry1		new
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1007-002-NewL_command008
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1007-002-SetScanDataL_command009
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1007-002-NextL_command010
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1007-002-FullPath_command011
-		COMMAND		CDir1		Count			PBASE-F32-DirScan-PublicApi-1007-002-Count_command012
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1007-002-index_command013
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1007-002-index_command014
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1007-002-index_command015
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1007-002-index_command016
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~
-		COMMAND		RFs1		RmDir			PBASE-F32-DirScan-PublicApi-1007-002-RmDir_command019
-		COMMAND		TEntry1		~
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1007-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-DirScan-PublicApi-1007-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1007-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1007
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1008
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1008
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL(const TDesC &aMatchName, TUint anEntryAttMask, TUint anEntrySortMask, 
-//!				TScanDirection aScanDir=EScanDownTree) test, that uses KEntryAttDir as attribute mask and expects files
-//!				and directories both to be returned.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains 4 files and no directories. One directory
-//!				is going to be created.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as parameter
-//!				3.Call CDirScan::NewL() and connected file server session as parameter.
-//!				4.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttDir as second
-//!				  parameter, ESortByName as third parameter and EScanDownTree as fourth parameter
-//!				5.Call CDirScan::NextL() and CDir object as parameter.
-//!				6.Call CDirScan::FullPath() to verify the expected directory path.
-//!				7.Call CDir::Count() to verify the number of entries returned.
-//!				8.Call CDir::operator[] to verify the entries returned.
-//!				9.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using KEntryAttDir as attribute mask returns both files and directories.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1008-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1008-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1008-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1008-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1008-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1008-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		MkDirAll			PBASE-F32-DirScan-PublicApi-1008-002-MkDirAll_command006
-		COMMAND		TEntry1		new
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1008-002-NewL_command008
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1008-002-SetScanDataL_command009
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1008-002-NextL_command010
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1008-002-FullPath_command011
-		COMMAND		CDir1		Count			PBASE-F32-DirScan-PublicApi-1008-002-Count_command012
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1008-002-index_command013
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1008-002-index_command014
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1008-002-index_command015
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1008-002-index_command016
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1008-002-index_command017
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		RmDir			PBASE-F32-DirScan-PublicApi-1008-002-RmDir_command020
-		COMMAND		TEntry1		~
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1008-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-DirScan-PublicApi-1008-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1008-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1008
-
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1009
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1009
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL(const TDesC &aMatchName, TUint anEntryAttMask, TUint anEntrySortMask, 
-//!				TScanDirection aScanDir=EScanDownTree) test, that uses KEntryAttDir|KEntryAttMatchExclusive as attribute mask
-//!				and expects directories only to be returned.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains no files and no directories. One directory
-//!				is going to be created.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as parameter
-//!				3.Call CDirScan::NewL() and connected file server session as parameter.
-//!				4.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttDir|KEntryAttMatchExclusive
-//!				  as second parameter, ESortByName as third parameter and EScanDownTree as fourth parameter
-//!				5.Call CDirScan::NextL() and CDir object as parameter.
-//!				6.Call CDirScan::FullPath() to verify the expected directory path.
-//!				7.Call CDir::Count() to verify the number of entries returned.
-//!				8.Call CDir::operator[] to verify the entries returned.
-//!				9.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir\ as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using KEntryAttDir|KEntryAttMatchExclusive as attribute mask returns
-//!				directories only.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1009-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		MkDirAll			PBASE-F32-DirScan-PublicApi-1009-002-MkDirAll_command006
-		COMMAND		TEntry1		new
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1009-002-NewL_command008
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1009-002-SetScanDataL_command009
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1009-002-NextL_command010
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1009-002-FullPath_command011
-		COMMAND		CDir1		Count			PBASE-F32-DirScan-PublicApi-1009-002-Count_command012
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1009-002-index_command013
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		RmDir			PBASE-F32-DirScan-PublicApi-1009-002-RmDir_command016
-		COMMAND		TEntry1		~
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1009-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1009
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1010
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1010
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL(const TDesC &aMatchName, TUint anEntryAttMask, TUint anEntrySortMask, 
-//!				TScanDirection aScanDir=EScanDownTree) test, that uses KEntryAttReadOnly|KEntryAttMatchExclusive as attribute
-//!				mask and expects only read-only files to be returned.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains 4 files and no directories.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::SetAtt() to clear all possible read-only attributes.
-//!				3.Call RFs::SetAtt() to set some read-only attributes.
-//!				4.Call CDirScan::NewL() and connected file server session as parameter.
-//!				5.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttReadOnly|KEntryAttMatchExclusive
-//!				  as second parameter, ESortByName as third parameter and EScanDownTree as fourth parameter
-//!				6.Call CDirScan::NextL() and CDir object as parameter.
-//!				7.Call CDirScan::FullPath() to verify the expected directory path.
-//!				8.Call CDir::Count() to verify the number of entries returned.
-//!				9.Call CDir::operator[] to verify the entries returned.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using KEntryAttReadOnly|KEntryAttMatchExclusive as attribute mask returns
-//!				only read-only files and directories.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1010-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1010-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1010-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1010-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1010-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1010-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		SetAtt			PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command006
-		COMMAND		RFs1		SetAtt			PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command007
-		COMMAND		RFs1		SetAtt			PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command008
-		COMMAND		RFs1		SetAtt			PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command009
-		COMMAND		RFs1		SetAtt			PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command010
-		COMMAND		RFs1		SetAtt			PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command011
-		COMMAND		TEntry1		new
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1010-002-NewL_command013
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1010-002-SetScanDataL_command014
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1010-002-NextL_command015
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1010-002-FullPath_command016
-		COMMAND		CDir1		Count			PBASE-F32-DirScan-PublicApi-1010-002-Count_command017
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1010-002-index_command018
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1010-002-index_command019
-		COMMAND		RFs1		SetAtt			PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command020
-		COMMAND		RFs1		SetAtt			PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command021
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1010-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-DirScan-PublicApi-1010-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1010-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1010
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1011
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1011
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL() test, that checks that when using relative path then everything else is taken from
-//!				the session path.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains no files and no directories.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::SetSessionPath() to set new session path, passing <RAM_DRIVE>:\<RELATIVE_PATH>\ as parameter.
-//!				3.Call RFs::SessionPath() to verify previous action.
-//!				4.Call CDirScan::NewL() and connected file server session as parameter.
-//!				5.Call CDirScan::SetScanDataL() and \dirscan\ as first parameter, KEntryAttNormal as second parameter,
-//!				  ESortByName as third parameter and EScanDownTree as fourth parameter.
-//!				6.Call CDirScan::NextL() and CDir object as parameter.
-//!				7.Call CDirScan::FullPath() to verify the expected directory path.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using relative path takes everything else from the session path.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1011-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		SetSessionPath		PBASE-F32-DirScan-PublicApi-1011-002-SetSessionPath_command004
-		COMMAND		RFs1		SessionPath		PBASE-F32-DirScan-PublicApi-1011-002-SessionPath_command005
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1011-002-NewL_command006
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1011-002-SetScanDataL_command007
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1011-002-NextL_command008
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1011-002-FullPath_command009
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1011-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1011
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1012
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1012
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL() test, that checks that when using path without the traling \ then it starts scanning
-//!				the parent directory.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains no files and no directories.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call CDirScan::NewL() and connected file server session as parameter.
-//!				3.Call CDirScan::SetScanDataL() and drive>:\dirscan as first parameter, KEntryAttNormal as second parameter,
-//!				  ESortByName as third parameter and EScanDownTree as fourth parameter.
-//!				4.Call CDirScan::NextL() and CDir object as parameter.
-//!				5.Call CDirScan::FullPath() to verify the expected directory path.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using path without trailing \ starts scanning the parent directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1012-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1012-002-NewL_command004
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1012-002-SetScanDataL_command005
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1012-002-NextL_command006
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1012-002-FullPath_command007
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1012-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1012
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1013
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1013
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL() test, that uses ESortByName | EAscending as sort key.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains 4 files and no directories.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call CDirScan::NewL() and connected file server session as parameter.
-//!				3.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttNormal as second
-//!				  parameter, ESortByName | EAscending as third parameter and EScanDownTree as fourth parameter
-//!				4.Call CDirScan::NextL() and CDir object as parameter.
-//!				5.Call CDirScan::FullPath() to verify the expected directory path.
-//!				6.Call CDir::Count() to verify the number of entries returned.
-//!				7.Call CDir::operator[] to verify the entries returned.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using ESortByName | EAscending as sort key sorts the entries as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1013-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1013-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1013-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1013-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1013-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1013-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect	
-		COMMAND		TEntry1		new	
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1013-002-NewL_command007
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1013-002-SetScanDataL_command008
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1013-002-NextL_command009
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1013-002-FullPath_command010
-		COMMAND		CDir1		Count			PBASE-F32-DirScan-PublicApi-1013-002-Count_command011
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1013-002-index_command012
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1013-002-index_command013
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1013-002-index_command014
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1013-002-index_command015
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1013-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-DirScan-PublicApi-1013-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1013-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1013
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1014
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1014
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL() test, that uses ESortByExt | EDescending as sort key.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains 4 files and no directories.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call CDirScan::NewL() and connected file server session as parameter.
-//!				3.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttNormal as second
-//!				  parameter, ESortByExt | EDescending as third parameter and EScanDownTree as fourth parameter
-//!				4.Call CDirScan::NextL() and CDir object as parameter.
-//!				5.Call CDirScan::FullPath() to verify the expected directory path.
-//!				6.Call CDir::Count() to verify the number of entries returned.
-//!				7.Call CDir::operator[] to verify the entries returned.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using ESortByExt | EDescending as sort key sorts the entries as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1014-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1014-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1014-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1014-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1014-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1014-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect	
-		COMMAND		TEntry1		new	
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1014-002-NewL_command007
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1014-002-SetScanDataL_command008
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1014-002-NextL_command009
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1014-002-FullPath_command010
-		COMMAND		CDir1		Count			PBASE-F32-DirScan-PublicApi-1014-002-Count_command011
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1014-002-index_command012
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1014-002-index_command013
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1014-002-index_command014
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1014-002-index_command015
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1014-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-DirScan-PublicApi-1014-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1014-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1014
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1015
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1015
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL() test, that uses EDirsFirst | EDirDescending | ESortByDate as sort key.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains 4 files and no directories. Two directories
-//!				will be created.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\ as parameter
-//!				3.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir2\ as parameter
-//!				4.Call RFs::SetModified(const TDesC &aName, const TTime &aTime) to set directories' and files' modified date.
-//!				5.Call CDirScan::NewL() and connected file server session as parameter.
-//!				6.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttDir as second
-//!				  parameter, EDirsFirst | EDirDescending | ESortByDate as third parameter and EScanDownTree as fourth parameter
-//!				7.Call CDirScan::NextL() and CDir object as parameter.
-//!				8.Call CDirScan::FullPath() to verify the expected directory path.
-//!				9.Call CDir::Count() to verify the number of entries returned.
-//!				10.Call CDir::operator[] to verify the entries returned.
-//!				11.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\ as parameter
-//!				12.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir2\ as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using EDirsFirst | EDirDescending | ESortByDate as sort key sorts the entries as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1015-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1015-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1015-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1015-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1015-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1015-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect	
-		COMMAND		RFs1		MkDirAll			PBASE-F32-DirScan-PublicApi-1015-002-MkDirAll_command006
-		COMMAND		RFs1		MkDirAll			PBASE-F32-DirScan-PublicApi-1015-002-MkDirAll_command007
-		COMMAND		RFs1		SetModified		PBASE-F32-DirScan-PublicApi-1015-002-SetModified_command008
-		COMMAND		RFs1		SetModified		PBASE-F32-DirScan-PublicApi-1015-002-SetModified_command009
-		COMMAND		RFs1		SetModified		PBASE-F32-DirScan-PublicApi-1015-002-SetModified_command010
-		COMMAND		RFs1		SetModified		PBASE-F32-DirScan-PublicApi-1015-002-SetModified_command011
-		COMMAND		TEntry1		new	
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1015-002-NewL_command013
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1015-002-SetScanDataL_command014
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1015-002-NextL_command015
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1015-002-FullPath_command016
-		COMMAND		CDir1		Count			PBASE-F32-DirScan-PublicApi-1015-002-Count_command017
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1015-002-index_command018
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1015-002-index_command019
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1015-002-index_command020
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1015-002-index_command021
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1015-002-index_command022
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1015-002-index_command023
-		COMMAND		RFs1		RmDir			PBASE-F32-DirScan-PublicApi-1015-002-RmDir_command024
-		COMMAND		RFs1		RmDir			PBASE-F32-DirScan-PublicApi-1015-002-RmDir_command025
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~	
-		COMMAND		TEntry1		~	
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1015-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-DirScan-PublicApi-1015-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1015-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1015
-
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1016
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1016
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL() test, that uses EDirsLast | ESortBySize as sort key.
-//!				Directory used in SetScanDataL() - <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ - contains 4 files and no directories. Two directories
-//!				will be created.
-//! 				Uses API elements: NewL(), SetScanDataL(), NextL(), FullPath().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\ as parameter
-//!				3.Call RFs::MkDirAll() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir2\ as parameter
-//!				4.Call CDirScan::NewL() and connected file server session as parameter.
-//!				5.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttDir as second
-//!				  parameter, EDirsLast | ESortBySize as third parameter and EScanDownTree as fourth parameter
-//!				6.Call CDirScan::NextL() and CDir object as parameter.
-//!				7.Call CDirScan::FullPath() to verify the expected directory path.
-//!				8.Call CDir::Count() to verify the number of entries returned.
-//!				9.Call CDir::operator[] to verify the entries returned.
-//!				10.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir1\ as parameter
-//!				11.Call RFs::RmDir() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\TempDir2\ as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The SetScanDataL() method call using EDirsLast | ESortBySize as sort key sorts the entries as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1016-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1016-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1016-001-Copy_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1016-001-Copy_command007
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1016-001-Copy_command008
-		COMMAND		CFileMan1	Copy		PBASE-F32-DirScan-PublicApi-1016-001-Copy_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect	
-		COMMAND		RFs1		MkDirAll			PBASE-F32-DirScan-PublicApi-1016-002-MkDirAll_command006
-		COMMAND		RFs1		MkDirAll			PBASE-F32-DirScan-PublicApi-1016-002-MkDirAll_command007
-		COMMAND		TEntry1		new
-		COMMAND		CDirScan1	NewL			PBASE-F32-DirScan-PublicApi-1016-002-NewL_command009
-		COMMAND		CDirScan1	SetScanDataL		PBASE-F32-DirScan-PublicApi-1016-002-SetScanDataL_command010
-		COMMAND		CDirScan1	NextL			PBASE-F32-DirScan-PublicApi-1016-002-NextL_command011
-		COMMAND		CDirScan1	FullPath		PBASE-F32-DirScan-PublicApi-1016-002-FullPath_command012
-		COMMAND		CDir1		Count			PBASE-F32-DirScan-PublicApi-1016-002-Count_command013
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1016-002-index_command014
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1016-002-index_command015
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1016-002-index_command016
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1016-002-index_command017
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1016-002-index_command018
-		COMMAND		CDir1		[]			PBASE-F32-DirScan-PublicApi-1016-002-index_command019
-		COMMAND		RFs1		RmDir			PBASE-F32-DirScan-PublicApi-1016-002-RmDir_command020
-		COMMAND		RFs1		RmDir			PBASE-F32-DirScan-PublicApi-1016-002-RmDir_command021
-		COMMAND		CDir1		~
-		COMMAND		CDirScan1	~
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-DirScan-PublicApi-1016-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-DirScan-PublicApi-1016-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1016-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1016
-
-
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-//////								//////
-//////		 ///////////////////////////////////		//////
-//////		 ///				 ///		//////
-//////		 ///	  NEGATIVE TESTS	 ///		//////
-//////		 ///				 ///		//////	
-//////		 ///////////////////////////////////		//////
-//////								//////
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-
-
-
-//////////////
-//SETSCANDATAL
-//////////////
-
-START_TESTCASE			PBASE-F32-DirScan-PublicApi-1101
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1101
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function SetScanDataL(const TDesC &aMatchName, TUint anEntryAttMask, TUint anEntrySortMask, 
-//!				TScanDirection aScanDir=EScanDownTree) negative test, that tries initialise directories entries scan
-//!				with directory which not exists.
-//! 				Uses API elements: NewLC(), SetScanDataL(), NextL();
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call CDirScan::NewLC() and connected file server session as parameter.
-//!				3.Call CDirScan::SetScanDataL() and <RAM_DRIVE>:\<RELATIVE_PATH>\dirscan\ as first parameter, KEntryAttHidden as second
-//!				  parameter, ESortNone as third parameter and CDirScan::EScanUpTree as fourth parameter
-//!				4.Call CDirScan::NextL() and CDir pointer as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	NextL() returns KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-DirScan-PublicApi-1101-001-MkDirAll_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CDirScan	CDirScan1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CDirScan1	NewLC		PBASE-F32-DirScan-PublicApi-1101-002-NewLC_command004
-		COMMAND			CDirScan1	SetScanDataL	PBASE-F32-DirScan-PublicApi-1101-002-SetScanDataL_command005
-		COMMAND !Error=-12	CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1101-002-NextL_command006
-		COMMAND			CDir1		~
-		COMMAND			CDirScan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		RmDir		PBASE-F32-DirScan-PublicApi-1101-003-RmDir_command003
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-DirScan-PublicApi-1101
-
-
-////////
-//NEXTL
-////////
-
-//! START_TESTCASE			PBASE-F32-DirScan-PublicApi-1102
-//! @SYMTestCaseID		PBASE-F32-DirScan-PublicApi-1102
-//! @SYMAPI			CDirScan
-//! @SYMTestCaseDesc		Function NextL(CDir *&aDirEntries) negative test, that tries to scan next directory entries when SetScanDataL()
-//!				hasn't been called.
-//! 				Uses API elements: NewLC(), NextL();
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call CDirScan::NewLC() and connected file server session as parameter.
-//!				3.Call CDirScan::NextL() and CDir pointer as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	NextL() raises Panic USER Code = 17 
-//! @SYMTestType		CIT
-//! 	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-DirScan-PublicApi.ini 
-//! 		CREATE_OBJECT	RFs		RFs1
-//! 		CREATE_OBJECT	CDirScan	CDirScan1
-//! 		CREATE_OBJECT	CDir		CDir1
-//! 		COMMAND		RFs1		new		
-//! 		COMMAND		RFs1		Connect
-//! 		COMMAND		CDirScan1	NewLC		PBASE-F32-DirScan-PublicApi-1102-001-NewLC_command004	
-//! 		COMMAND		CDirScan1	NextL		PBASE-F32-DirScan-PublicApi-1102-001-NextL_command005
-//! 		COMMAND		CDir1		~		
-//! 		COMMAND		CDirScan1	~		
-//! 		COMMAND		RFs1		~		
-//! 	END_TEST_BLOCK	!PanicCode=17 !PanicString=USER
-//! END_TESTCASE			PBASE-F32-DirScan-PublicApi-1102
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-DriveUnit-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,374 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName			pbase-f32-sfsrv-publicapi-any
-//! @SYMScriptTestEnvironment		This test script requires a basic ROM.
-//! @SYMScriptAuthor 			Tanel Milsaar, Runno Sgirka
-//! @SYMScriptDescription		The test script contains API tests for the following functions of TDriveUnit class:
-//!	TDriveUnit(TInt aDrive);
-//!	TDriveUnit(const TDesC &aDrive);
-//!	TDriveUnit &operator=(TInt aDrive);
-//!	void TDriveUnit &operator=(TInt aDrive);
-//!	TDriveUnit &operator=(const TDesC &aDrive);
-//!	operator TInt() const;
-//!	TDriveName Name() const;
-
-
-LOAD_SUITE	t_sfsrv
-DELAY	5000
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0001
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create an instance with a drive number lesser than KMaxDrives.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit(TInt aDrive) to create a TDriveUnit object, passing "3" as parameter.
-//!				2. Call operator TInt() to convert the drive unit to an integer value, passing "3" as expected value,
-//!				for verification.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The TDriveUnit() method call is completed without errors, test returns "3" as drive number.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0001-001-new_command01
-		COMMAND		driveUnit1	convertToInt	PBASE-F32-DriveUnit-PublicApi-0001-001-convertToInt_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0002
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create an instance with a drive letter defined in TDriveName.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit(const TDesC &aDrive) to create a TDriveUnit object, passing "C" as parameter.
-//!				2. Call Name() to get the drive unit name as text, passing "C:" as expected value for verification.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The TDriveUnit() method call is completed without errors, test returns "C:" as drive name.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0002-001-new_command01
-		COMMAND		driveUnit1	name		PBASE-F32-DriveUnit-PublicApi-0002-001-name_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0002
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0003
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function operator=() test. Assigns a new drive number lesser than KMaxDrives to the drive unit.
-//!				Uses API elements: TDriveUnit(), operator=().
-//! @SYMTestActions		1. Call TDriveUnit(TInt aDrive) to create a TDriveUnit object, passing "3" as parameter.
-//!				2. Call operator=() to assign a new drive number, passing "4" as parameter.
-//!				3. Call operator TInt() to convert the drive unit to an integer value, passing "4" as expected value,
-//!				for verification.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The operator=() call is completed without errors, test returns "4" as drive number.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0003-001-new_command01
-		COMMAND		driveUnit1	=		PBASE-F32-DriveUnit-PublicApi-0003-001-_command02
-		COMMAND		driveUnit1	convertToInt	PBASE-F32-DriveUnit-PublicApi-0003-001-convertToInt_command03
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0003
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0004
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0004
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function operator=() test. Assigns a new drive letter to the drive unit.
-//!				Uses API elements: TDriveUnit(), operator=().
-//! @SYMTestActions		1. Call TDriveUnit(const TDesC &aDrive) to create a TDriveUnit object, passing "C" as parameter.
-//!				2. Call operator=() to assign a new drive letter, passing "F" as parameter.
-//!				3. Call Name() to get the drive unit name as text, passing "F:" as expected value for verification.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The operator=() call is completed without errors, test returns "F:" as drive name.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0004-001-new_command01
-		COMMAND		driveUnit1	=		PBASE-F32-DriveUnit-PublicApi-0004-001-_command02
-		COMMAND		driveUnit1	name		PBASE-F32-DriveUnit-PublicApi-0004-001-name_command03
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0004
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0005
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function operator TInt() test. Converts the drive unit to an integer value.
-//!				Uses API elements: TDriveUnit(), operator TInt().
-//! @SYMTestActions		1. Call TDriveUnit(const TDesC &aDrive) to create a TDriveUnit object, passing "C" as parameter.
-//!				2. Call operator TInt() to convert the drive unit to an integer value, passing 2 as expected value.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The TInt() operator call is completed without errors, returning 2.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0005-001-new_command01
-		COMMAND		driveUnit1	convertToInt		PBASE-F32-DriveUnit-PublicApi-0005-001-convertToInt_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0005
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0006
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function Name() test. Gets the drive unit name as text.
-//!				Uses API elements: TDriveUnit(), Name().
-//! @SYMTestActions		1. Call TDriveUnit(TInt aDrive) to create a TDriveUnit object, passing "22" as parameter.
-//!				2. Call Name() to get the drive unit name as text, passing "W:" as expected value.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Name() method call is completed without errors, returning "W:".
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0006-001-new_command01
-		COMMAND		driveUnit1	name		PBASE-F32-DriveUnit-PublicApi-0006-001-name_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0006
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0007
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create an instance with a drive letter defined in TDriveName, with a colon at the end.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit(const TDesC &aDrive) to create a TDriveUnit object, passing "C:" as parameter.
-//!				2. Call Name() to get the drive unit name as text, passing "C:" as expected value for verification.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The TDriveUnit() method call is completed without errors, test returns "C:" as drive name.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0007-001-new_command01
-		COMMAND		driveUnit1	name		PBASE-F32-DriveUnit-PublicApi-0007-001-name_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0007
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0008
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create an instance with a drive letter defined in TDriveName, as lowercase.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit(const TDesC &aDrive) to create a TDriveUnit object, passing "c" as parameter.
-//!				2. Call Name() to get the drive unit name as text, passing "C:" as expected value for verification.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The TDriveUnit() method call is completed without errors, test returns "C:" as drive name.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0008-001-new_command01
-		COMMAND		driveUnit1	name		PBASE-F32-DriveUnit-PublicApi-0008-001-name_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0008
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0009
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function operator=() test. Assigns a new lowercase drive letter to the drive unit.
-//!				Uses API elements: TDriveUnit(), operator=().
-//! @SYMTestActions		1. Call TDriveUnit(const TDesC &aDrive) to create a TDriveUnit object, passing "C" as parameter.
-//!				2. Call operator=() to assign a new drive letter, passing "f" as parameter.
-//!				3. Call Name() to get the drive unit name as text, passing "F:" as expected value for verification.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The operator=() call is completed without errors, test returns "F:" as drive name.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0009-001-new_command01
-		COMMAND		driveUnit1	=		PBASE-F32-DriveUnit-PublicApi-0009-001-_command02
-		COMMAND		driveUnit1	name		PBASE-F32-DriveUnit-PublicApi-0009-001-name_command03
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0009
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0010
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-0010
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create a TDriveUnit instance.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit() to create a TDriveUnit object.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The TDriveUnit() method call is completed without errors.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-0010-001-new_command01
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-0010
-
-
-// 	************************
-//	***  NEGATIVE TESTS  ***
-// 	************************
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1001
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-1001
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create an instance with a drive number greater than KMaxDrives.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit(TInt aDrive) to create a TDriveUnit object, passing "100" as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High Priority
-//! @SYMTestExpectedResults	The TDriveUnit() method call will panic (FSCLIENT Code=0).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-1001-001-new_command01
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	!PanicCode=0	!PanicString="FSCLIENT panic"
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1001
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1002
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-1002
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function operator=() test. Assigns a drive number greater than KMaxDrives to the drive unit.
-//!				Uses API elements: TDriveUnit, operator=().
-//! @SYMTestActions		1. Call TDriveUnit(TInt aDrive) to create a TDriveUnit object, passing "16" as parameter.
-//!				2. Call operator=() to assign a new drive number, passing "100" as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High Priority
-//! @SYMTestExpectedResults	The TDriveUnit() method call will panic (FSCLIENT Code=0).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-1002-001-new_command01
-		COMMAND		driveUnit1	=		PBASE-F32-DriveUnit-PublicApi-1002-001-_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	!PanicCode=0	!PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-DriveUnit-PublicApi-1002
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1003
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-1003
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create an instance with a drive number equal to KMaxDrives.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit(TInt aDrive) to create a TDriveUnit object, passing "26" as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High Priority
-//! @SYMTestExpectedResults	The TDriveUnit() method call will panic (FSCLIENT Code=0).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-1003-001-new_command01
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	!PanicCode=0	!PanicString="FSCLIENT panic"
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1003
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1004
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-1004
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create an instance with a drive number bigger than KMaxDrives.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit(TInt aDrive) to create a TDriveUnit object, passing "50" as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High Priority
-//! @SYMTestExpectedResults	The TDriveUnit() method call will panic (FSCLIENT Code=0).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-1004-001-new_command01
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	!PanicCode=0	!PanicString="FSCLIENT panic"
-END_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1004
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1005
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-1005
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function operator=() test. Assigns a new drive number to the drive unit bigger than KMaxDrives.
-//!				Uses API elements: TDriveUnit(), operator=().
-//! @SYMTestActions		1. Call TDriveUnit(TInt aDrive) to create a TDriveUnit object, passing "7" as parameter.
-//!				2. Call operator=() to assign a new drive number, passing "100" as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High Priority
-//! @SYMTestExpectedResults	The operator=() call will panic (FSCLIENT Code=0).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-1005-001-new_command01
-		COMMAND		driveUnit1	=		PBASE-F32-DriveUnit-PublicApi-1005-001-_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	!PanicCode=0	!PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-DriveUnit-PublicApi-1005
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1006
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-1006
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function TDriveUnit() test. Create an instance with a malformed drive name.
-//!				Uses API elements: TDriveUnit().
-//! @SYMTestActions		1. Call TDriveUnit(const TDesC &aDrive) to create a TDriveUnit object, passing "##" as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High Priority
-//! @SYMTestExpectedResults	The TDriveUnit() method call will panic (FSCLIENT Code=1).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-1006-001-new_command01
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	!PanicCode=1	!PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-DriveUnit-PublicApi-1006
-
-
-START_TESTCASE 			PBASE-F32-DriveUnit-PublicApi-1007
-//! @SYMTestCaseID		PBASE-F32-DriveUnit-PublicApi-1007
-//! @SYMAPI			TDriveUnit
-//! @SYMTestCaseDesc		Function operator=() test. Assigns a malformed drive name to the drive unit.
-//!				Uses API elements: TDriveUnit(), operator=().
-//! @SYMTestActions		1. Call TDriveUnit(const TDesC &aDrive) to create a TDriveUnit object, passing "Z" as parameter.
-//!				2. Call operator=() to assign a new drive letter, passing "##" as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High Priority
-//! @SYMTestExpectedResults	The operator=() call will panic (FSCLIENT Code=1).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-DriveUnit-PublicApi.ini 
-		CREATE_OBJECT	TDriveUnit	driveUnit1
-		COMMAND		driveUnit1	new		PBASE-F32-DriveUnit-PublicApi-1007-001-new_command01
-		COMMAND		driveUnit1	=		PBASE-F32-DriveUnit-PublicApi-1007-001-_command02
-		COMMAND		driveUnit1	~		
-	END_TEST_BLOCK	!PanicCode=1	!PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-DriveUnit-PublicApi-1007
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Entry-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,680 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName			pbase-f32-sfsrv-publicapi-ram
-//! @SYMScriptTestEnvironment		This test script requires a basic ROM.
-//! @SYMScriptAuthor 			Dmitri Trofimov, Sergei Tveritin, Jaanus Randveer
-//! @SYMCreationDate			12/10/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of TEntry class:
-//! TEntry();
-//! TEntry(const TEntry &aEntry);
-//! TEntry &operator=(const TEntry &aEntry);
-//! const TUid &operator[](TInt anIndex) const;
-//! TBool IsUidPresent(TUid aUid) const;
-//! TBool IsTypeValid() const;
-//! TUid MostDerivedUid() const;
-//! TBool IsReadOnly() const;
-//! TBool IsHidden() const;
-//! TBool IsSystem() const;
-//! TBool IsDir() const;
-//! TBool IsArchive() const;
-
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0001
-//! @SYMAPI			TEntry
-//!
-//! @SYMTestCaseDesc		TEntry() test. Tests for successful object creation.
-//!				Uses API elements: TEntry()
-//! @SYMTestActions		1. Create a TEntry object
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		TEntry1		new
-		COMMAND		TEntry1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0002
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		operator=() test. Tests for successful assignment of one TEntry object to another TEntry object.
-//!				Uses API elements: TEntry(), operator=(), RFs::Entry()
-//! @SYMTestActions		1. Create a TEntry object.
-//!				2. Call RFs's command Entry() and pass "<RAM_DRIVE>:\<RELATIVE_PATH>\Entry\Test1.txt" as name of file.
-//!				3. Create second TEntry object.
-//!				4. Call assignment operator "=" and pass second TEntry object, first TEntry object to be copied to this second TEntry object.
-//!				5. Check that firstTEntr and second TEntry has the same name "\base\PBASE-F32-Entry-PublicApi.ini".
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Second TEntry object contains same data as the first TEntry.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll	PBASE-F32-Entry-PublicApi-0002-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0002-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0002-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		CREATE_OBJECT	TEntry		TEntry2	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		TEntry1		new	
-		COMMAND		RFs1		Entry	PBASE-F32-Entry-PublicApi-0002-002-Entry_command007
-		COMMAND		TEntry2		new		
-		COMMAND		TEntry2		=	PBASE-F32-Entry-PublicApi-0002-002-=_command009
-		COMMAND		TEntry2		~		
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0002-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0002-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0002-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0002
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0003
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		TEntry() passing another TEntry object as a reference. Tests for successful creation of TEntry object and initilization with another TEntry objet's data.
-//!				Uses API elements: TEntry()
-//! @SYMTestActions		1. Create a TEntry object
-//!				2. Call RFs's command Entry() and pass "<RAM_DRIVE>:\<RELATIVE_PATH>\Entry\Test1.txt" as name of file.
-//!				3. Create the second TEntry object passing the the first TEntry as a parameter
-//!				4. Compare data members of the first and the second TEntry objects.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	New TEntry object contains same data as the other one.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0003-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0003-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0003-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		CREATE_OBJECT	TEntry		TEntry2	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		TEntry1		new		
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0003-002-Entry_command007
-		COMMAND		TEntry2		new		PBASE-F32-Entry-PublicApi-0003-002-new_command008
-		COMMAND		TEntry2		IsReadOnly	PBASE-F32-Entry-PublicApi-0003-002-IsReadOnly_command009
-		COMMAND		TEntry2		IsHidden	PBASE-F32-Entry-PublicApi-0003-002-IsHidden_command010
-		COMMAND		TEntry2		IsDir		PBASE-F32-Entry-PublicApi-0003-002-IsDir_command011
-		COMMAND		TEntry2		~		
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0003-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0003-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0003-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0003
-
-
-//! START_TESTCASE 			PBASE-F32-Entry-PublicApi-0004
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0004
-//! @SYMAPI			TEntry
-//! @SYMCreationDate		13/08/2006
-//! @SYMTestCaseDesc		operator[] negative test where passing unsupported index of UID as a parameter. This tests for panic when unsupported UID
-//!				index value is provided.
-//!				Uses API elements: operator[]
-//! @SYMTestActions		1. Create a TEntry object
-//!				2. Try get "four UID"
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic USER - 37.
-//! @SYMTestType		CIT
-//! 	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-//! 		CREATE_OBJECT	TEntry		TEntry1	
-//! 		COMMAND		TEntry1		new		
-//! 		COMMAND		TEntry1		[]		PBASE-F32-Entry-PublicApi-0004-001-index_command003
-//! 		COMMAND		TEntry1		~		
-//! 	END_TEST_BLOCK	!PanicCode=37 !PanicString=USER
-//! END_TESTCASE			PBASE-F32-Entry-PublicApi-0004
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0005
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		IsUidPresent() test. This tests the function for finding a match in "first UID".
-//!				Uses API elements: IsUidPresent()
-//! @SYMTestActions		1. Create a TEntry object
-//!				2. Call IsUidPresent() and and check that the function return "FALSE".
-//!				3. Call RFs's command Entry() and pass "<RAM_DRIVE>:\<RELATIVE_PATH>\Entry\Test3.txt" as name of file.
-//!				4. Call IsUidPresent() and check that the function return "FALSE".
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	IsUidPresent() returns ETrue
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0005-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0005-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0005-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		TEntry1		new		
-		COMMAND		TEntry1		IsUidPresent	PBASE-F32-Entry-PublicApi-0005-002-IsUidPresent_command006
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0005-002-Entry_command007
-		COMMAND		TEntry1		IsUidPresent	PBASE-F32-Entry-PublicApi-0005-002-IsUidPresent_command008
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0005-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0005-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0005-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0005
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0006
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		IsTypeValid() test. This tests if the function can correctly identify the absence of valid UID.
-//!				Uses API elements: IsTypeValid()
-//! @SYMTestActions		1. Create TEntry object
-//!				2. Call IsTypeValid() and and check that the function return "FALSE".
-//!				3. Call RFs's command Entry() and pass "<RAM_DRIVE>:\<RELATIVE_PATH>\Entry\Test3.txt" as name of file.
-//!				4. Call IsTypeValid() and check that the function return "FALSE".
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	IsTypeValid() returns EFalse
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0006-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0006-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0006-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		TEntry1		new		
-		COMMAND		TEntry1		IsTypeValid	PBASE-F32-Entry-PublicApi-0006-002-IsTypeValid_command006
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0006-002-Entry_command007
-		COMMAND		TEntry1		IsTypeValid	PBASE-F32-Entry-PublicApi-0006-002-IsTypeValid_command008
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0006-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0006-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0006-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0006
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0007
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		MostDerivedUid(). This tests if the function is able to correctly find the most derived UID when it is "first UID".
-//!				Uses API elements: MostDerivedUid()
-//! @SYMTestActions		1. Create TEntry object
-//!				2. Call RFs's command Entry() and pass "<RAM_DRIVE>:\<RELATIVE_PATH>\Entry\Test3.txt" as name of file.
-//!				3. Call MostDerivedUid().
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function returns no panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0007-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0007-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0007-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		TEntry1		new		
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0007-002-Entry_command006
-		COMMAND		TEntry1		MostDerivedUid	
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0007-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0007-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0007-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0007
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0008
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		IsReadOnly() test. Test if the function is able to correctly identify the presence of ReadOnly attribute.
-//!				Uses API elements: IsReadOnly(), RFs:SetAtt()
-//! @SYMTestActions		1. Create RFs object
-//!				2. Create TEntry object
-//!				3. Call RFs::SetAtt() and pass KEntryAttReadOnly as attribute and "Test1.txt" as name of entry.
-//!				4. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				5. Call IsReadOnly(), and check that the attribute is set.
-//!				6. Call RFs::SetAtt() and pass KEntryAttReadOnly as attribute for clear and "Test1.txt" as name of entry.
-//!				7. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				8. Call IsReadOnly(), and check that the attribute is not set.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	IsReadonly() returns expected result successfuly.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0008-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0008-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0008-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		SetAtt		PBASE-F32-Entry-PublicApi-0008-002-SetAtt_command005
-		COMMAND		TEntry1		new		
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0008-002-Entry_command007
-		COMMAND		TEntry1		IsReadOnly	PBASE-F32-Entry-PublicApi-0008-002-IsReadOnly_command008
-		COMMAND		RFs1		SetAtt		PBASE-F32-Entry-PublicApi-0008-002-SetAtt_command009
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0008-002-Entry_command010
-		COMMAND		TEntry1		IsReadOnly	PBASE-F32-Entry-PublicApi-0008-002-IsReadOnly_command011
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0008-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0008-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0008-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0008
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0009
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		IsHidden() test. This tests if the function is able to identify the presence of Hidden attribute.
-//!				Uses API elements: IsHidden(), RFs:SetAtt()
-//! @SYMTestActions		1. Create RFs object
-//!				2. Create TEntry object
-//!				3. Call RFs::SetAtt() and pass KEntryAttHidden as attribute and "Test1.txt" as name of entry.
-//!				4. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				5. Call IsHidden(), and check that the attribute is set.
-//!				6. Call RFs::SetAtt() and pass KEntryAttHidden as attribute for clear and "Test1.txt" as name of entry.
-//!				7. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				8. Call IsHidden(), and check that the attribute is not set.
-//!
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	IsHidden() returns expected result successfuly.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0009-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0009-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0009-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		SetAtt		PBASE-F32-Entry-PublicApi-0009-002-SetAtt_command005
-		COMMAND		TEntry1		new		
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0009-002-Entry_command007
-		COMMAND		TEntry1		IsHidden	PBASE-F32-Entry-PublicApi-0009-002-IsHidden_command008
-		COMMAND		RFs1		SetAtt		PBASE-F32-Entry-PublicApi-0009-002-SetAtt_command009
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0009-002-Entry_command010
-		COMMAND		TEntry1		IsHidden	PBASE-F32-Entry-PublicApi-0009-002-IsHidden_command011
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0009-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0009-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0009-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0009
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0010
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0010
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		IsSystem() test. This tests if the function is able to identify the presence of System attribute.
-//!				Uses API elements: IsSystem(), RFs:SetAtt()
-//! @SYMTestActions		1. Create RFs object
-//!				2. Create TEntry object
-//!				3. Call RFs::SetAtt() and pass KEntryAttSystem as attribute and "Test1.txt" as name of entry.
-//!				4. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				5. Call IsSystem(), and check that the attribute is set.
-//!				6. Call RFs::SetAtt() and pass KEntryAttSystem as attribute for clear and "Test1.txt" as name of entry.
-//!				7. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				8. Call IsSystem(), and check that the attribute is not set.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	IsSystem() returns expected result successfuly.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0010-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0010-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0010-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		SetAtt		PBASE-F32-Entry-PublicApi-0010-002-SetAtt_command005
-		COMMAND		TEntry1		new		
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0010-002-Entry_command007
-		COMMAND		TEntry1		IsSystem	PBASE-F32-Entry-PublicApi-0010-002-IsSystem_command008
-		COMMAND		RFs1		SetAtt		PBASE-F32-Entry-PublicApi-0010-002-SetAtt_command009
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0010-002-Entry_command010
-		COMMAND		TEntry1		IsSystem	PBASE-F32-Entry-PublicApi-0010-002-IsSystem_command011
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0010-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0010-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0010-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0010
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0011
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0011
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		IsArchive() test. This tests if the function is able to identify the presence of Archive attribute.
-//!				Uses API elements: IsArchive(), RFs:SetAtt()
-//! @SYMTestActions		1. Create RFs object
-//!				2. Create TEntry object
-//!				3. Call RFs::SetAtt() and pass KEntryAttArchive as attribute and "Test1.txt" as name of entry.
-//!				4. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				5. Call IsArchive(), and check that the attribute is set.
-//!				6. Call RFs::SetAtt() and pass KEntryAttArchive as attribute for clear and "test.txt" as name of entry.
-//!				7. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				8. Call IsArchive(), and check that the attribute is not set.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	IsArchive() returns ETrue.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0011-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0011-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0011-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		SetAtt		PBASE-F32-Entry-PublicApi-0011-002-SetAtt_command005
-		COMMAND		TEntry1		new		
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0011-002-Entry_command007
-		COMMAND		TEntry1		IsArchive	PBASE-F32-Entry-PublicApi-0011-002-IsArchive_command008
-		COMMAND		RFs1		SetAtt		PBASE-F32-Entry-PublicApi-0011-002-SetAtt_command009
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0011-002-Entry_command010
-		COMMAND		TEntry1		IsArchive	PBASE-F32-Entry-PublicApi-0011-002-IsArchive_command011
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0011-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0011-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0011-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0011
-
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0012
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0012
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		IsDir() test. This tests if the function is able to indentify the presence of Dir attribute.
-//!				Uses API elements: IsDir(), RFs:SetAtt()
-//! @SYMTestActions		1. Create RFs object
-//!				2. Create TEntry object
-//!				3. Call RFs::MkDirAll() and pass "test\" as name of directory.
-//!				4. Call RFs::Entry() to obtain data for TEntry object where name is "test".
-//!				5. Call IsDir(), and check that the attribute is set.
-//!				6. Call RFs::Entry() to obtain data for TEntry object where name is "Test1.txt".
-//!				7. Call IsDir(), and check that the attribute is not set.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	IsDir() returns ETrue.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0012-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0012-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0012-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0012-002-MkDirAll_command005
-		COMMAND		TEntry1		new		
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0012-002-Entry_command007
-		COMMAND		TEntry1		IsDir		PBASE-F32-Entry-PublicApi-0012-002-IsDir_command008
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0012-002-Entry_command009
-		COMMAND		TEntry1		IsDir		PBASE-F32-Entry-PublicApi-0012-002-IsDir_command010
-		COMMAND		TEntry1		~		
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0012-002-RmDir_command012
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0012-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0012-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0012-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0012
-
-
-
-START_TESTCASE 			PBASE-F32-Entry-PublicApi-0013
-//! @SYMTestCaseID		PBASE-F32-Entry-PublicApi-0013
-//! @SYMAPI			TEntry
-//! @SYMTestCaseDesc		operator[] test where getting one index of UID.
-//!				Uses API elements: operator[]
-//! @SYMTestActions		1. Create a TEntry object
-//!				2. Call RFs's command Entry() and pass "<RAM_DRIVE>:\<RELATIVE_PATH>\Entry\Test3.txt" as name of file.
-//!				3. Call operator[] and pass "UID1" as parameter.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	operator[] returns no panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll		PBASE-F32-Entry-PublicApi-0013-001-MkDirAll_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0013-001-NewL_command005
-		COMMAND		CFileMan1	Copy		PBASE-F32-Entry-PublicApi-0013-001-Copy_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TEntry		TEntry1	
-		COMMAND		RFs1		new		
-		COMMAND		TEntry1		new
-		COMMAND		RFs1		Connect	
-		COMMAND		RFs1		Entry		PBASE-F32-Entry-PublicApi-0013-002-Entry_command006
-		COMMAND		TEntry1		[]		PBASE-F32-Entry-PublicApi-0013-002-index_command007
-		COMMAND		TEntry1		~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Entry-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-Entry-PublicApi-0013-003-NewL_command004
-		COMMAND		CFileMan1	Delete		PBASE-F32-Entry-PublicApi-0013-003-Delete_command005
-		COMMAND		RFs1		RmDir		PBASE-F32-Entry-PublicApi-0013-003-RmDir_command006
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-Entry-PublicApi-0013
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-EntryArray-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,270 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Dmitri Trofimov, Jaanus Randveer
-//! @SYMCreationDate		12/10/2007
-//! @SYMScriptDescription	The test script contains API tests for the following functions of TEntryArray class:
-//! TEntryArray();
-//! TInt Count() const;
-//! const TEntry &operator[](TInt anIndex) const;
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-START_TESTCASE 			PBASE-F32-EntryArray-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-EntryArray-PublicApi-0001
-//! @SYMAPI			TEntryArray
-//! @SYMCreationDate		08/12/2006 
-//! @SYMTestCaseDesc		TEntryArray() test. Tests for successful object creation.
-//!				Uses API elements: TEntryArray()
-//! @SYMTestActions		1. Create TEntryArray object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini
-		CREATE_OBJECT	TEntryArray	TEntryArray1	
-		COMMAND		TEntryArray1	new		
-		COMMAND		TEntryArray1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-EntryArray-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-EntryArray-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-EntryArray-PublicApi-0002
-//! @SYMAPI			TEntryArray
-//! @SYMTestCaseDesc		Count() test. Tests if Count() returns correct number of entries.
-//!				Uses API elements: TEntryArray(), Count()
-//! @SYMTestActions		1. Create RFs object.
-//!				2. Create RDir object.
-//!				3. Create RFile object.
-//!				4. Create TEntryArray object.
-//!				5. Call Rfs::Connect().
-//!				6. Creates files "test1.txt", "test2.txt" and "test3.txt" using RFile::Create().
-//!				7. Close files "test1.txt", "test2.txt" and "test3.txt" using RFile::Close(). 
-//!				8. Open the contents of directory "<RAM_DRIVE>:\EntryArray\" using RDir::Open().
-//!				9. Read the contents of directory "<RAM_DRIVE>:\EntryArray\" using RDir::Read() and passing TEntryArray object as parameter.
-//!				10.Call RFs::Close() for closing "<RAM_DRIVE>:\EntryArray\" directory.
-//!				11.Call TEntryArray::Count().
-//!				12.Delete files "test1.txt", "test2.txt" and "test3.txt" using RFs::Delete().
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Count() returns the number of files in the test directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini 
-		CREATE_OBJECT		RFs		RFs1
-		COMMAND			RFs1		new			
-		COMMAND			RFs1		Connect
-		COMMAND			RFs1		MkDirAll		PBASE-F32-EntryArray-PublicApi-0002-001-MkDirAll_command004
-		COMMAND			RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini
-		CREATE_OBJECT		RFs		RFs1
-		CREATE_OBJECT		RDir		RDir1
-		CREATE_OBJECT		RFile		RFile1
-		CREATE_OBJECT		TEntryArray	TEntryArray1	
-		COMMAND			RFs1		new			
-		COMMAND			RFile1		new					
-		COMMAND			RDir1		new		
-		COMMAND			TEntryArray1	new		
-		COMMAND			RFs1		Connect
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0002-002-CreateFile_command010
-		COMMAND			RFile1		Close
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0002-002-CreateFile_command012
-		COMMAND			RFile1		Close
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0002-002-CreateFile_command014
-		COMMAND			RFile1		Close
-		COMMAND			RDir1		Open		PBASE-F32-EntryArray-PublicApi-0002-002-OpenDir_command016
-		COMMAND	!Error=-25	RDir1		Read		PBASE-F32-EntryArray-PublicApi-0002-002-Read_command017
-		COMMAND			RDir1		Close
-		COMMAND			TEntryArray1	count		PBASE-F32-EntryArray-PublicApi-0002-002-Count_command019
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0002-002-DeleteFile_command020
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0002-002-DeleteFile_command021
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0002-002-DeleteFile_command022
-		COMMAND			TEntryArray1	~		
-		COMMAND			RFile1		~
-		COMMAND			RDir1		~	
-		COMMAND			RFs1		~			
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini 
-		CREATE_OBJECT		RFs		RFs1
-		COMMAND			RFs1		new			
-		COMMAND			RFs1		Connect
-		COMMAND			RFs1		RmDir		PBASE-F32-EntryArray-PublicApi-0002-003-RmDir_command004
-		COMMAND			RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-EntryArray-PublicApi-0002
-
-
-START_TESTCASE 			PBASE-F32-EntryArray-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-EntryArray-PublicApi-0003
-//! @SYMAPI			TEntryArray
-//! @SYMTestCaseDesc		operator[] test. This tests successful accessing all of the elements in the array.
-//!				Uses API elements: TEntry(), TEntryArray(), operator[]
-//! @SYMTestActions		1. Create RFs object.
-//!				2. Create RDir object.
-//!				3. Create RFile object.
-//!				4. Create TEntry object.
-//!				5. Create TEntry temp object.
-//!				6. Create TEntryArray object.
-//!				7. Call Rfs::Connect(). 
-//!				8. Creates files "test1.txt", "test2.txt" and "test3.txt" using RFile::Create().
-//!				9. Close files "test1.txt", "test2.txt" and "test3.txt" using RFile::Close(). 
-//!				10.Open the contents of directory "<RAM_DRIVE>:\EntryArray\" using RDir::Open().
-//!				11.Read the contents of directory "<RAM_DRIVE>:\EntryArray\" using RDir::Read() and passing TEntryArray object as parameter.
-//!				12.Call RFs::Close() for closing "<RAM_DRIVE>:\EntryArray\" directory.
-//!				13.Call TEntryArray::Operatorp[] and pass index "0" as parameter.
-//!				14.Assign TEntry object to temp TEntry  and check that the element temp TEntry has a name "Test1.txt"
-//!				15.Call TEntryArray::Operator[] and pass index "1" as parameter.
-//!				16.Assign TEntry object to temp TEntry  and check that the element temp TEntry has a name "Test2.txt"
-//!				17.Call TEntryArray::Operator[] and pass index "2" as parameter.
-//!				18.Assign TEntry object to temp TEntry  and check that the element temp TEntry has a name "Test3.txt"
-//!				19.Delete files "test1.txt", "test2.txt" and "test3.txt" using RFs::Delete().
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini 
-		CREATE_OBJECT		RFs		RFs1
-		COMMAND			RFs1		new			
-		COMMAND			RFs1		Connect
-		COMMAND			RFs1		MkDirAll		PBASE-F32-EntryArray-PublicApi-0003-001-MkDirAll_command004
-		COMMAND			RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini
-		CREATE_OBJECT		RFs		RFs1
-		CREATE_OBJECT		RDir		RDir1
-		CREATE_OBJECT		RFile		RFile1
-		CREATE_OBJECT		TEntry		TEntry1
-		CREATE_OBJECT		TEntry		TEntryTemp
-		CREATE_OBJECT		TEntryArray	TEntryArray1			
-		COMMAND			RFs1		new			
-		COMMAND			RFile1		new					
-		COMMAND			RDir1		new		
-		COMMAND			TEntry1		new
-		COMMAND			TEntryTemp	new
-		COMMAND			TEntryArray1	new			
-		COMMAND			RFs1		Connect
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0003-002-CreateFile_command014
-		COMMAND			RFile1		Close
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0003-002-CreateFile_command016
-		COMMAND			RFile1		Close
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0003-002-CreateFile_command018
-		COMMAND			RFile1		Close
-		COMMAND			RDir1		Open		PBASE-F32-EntryArray-PublicApi-0003-002-OpenDir_command020
-		COMMAND	!Error=-25	RDir1		Read		PBASE-F32-EntryArray-PublicApi-0003-002-Read_command021
-		COMMAND			RDir1		Close
-		COMMAND			TEntryArray1	[]		PBASE-F32-EntryArray-PublicApi-0003-002-brackets_command023
-		COMMAND			TEntryTemp	=		PBASE-F32-EntryArray-PublicApi-0003-002-equal_command024
-		COMMAND			TEntryArray1	[]		PBASE-F32-EntryArray-PublicApi-0003-002-brackets_command025
-		COMMAND			TEntryTemp	=		PBASE-F32-EntryArray-PublicApi-0003-002-equal_command026
-		COMMAND			TEntryArray1	[]		PBASE-F32-EntryArray-PublicApi-0003-002-brackets_command027
-		COMMAND			TEntryTemp	=		PBASE-F32-EntryArray-PublicApi-0003-002-equal_command028
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0003-002-DeleteFile_command029
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0003-002-DeleteFile_command030
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0003-002-DeleteFile_command031
-		COMMAND			TEntryArray1	~
-		COMMAND			TEntryTemp	~			
-		COMMAND			TEntry1		~		
-		COMMAND			RFile1		~		
-		COMMAND			RDir1		~		
-		COMMAND			RFs1		~			
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini 
-		CREATE_OBJECT		RFs		RFs1
-		COMMAND			RFs1		new			
-		COMMAND			RFs1		Connect
-		COMMAND			RFs1		RmDir		PBASE-F32-EntryArray-PublicApi-0003-003-RmDir_command004
-		COMMAND			RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-EntryArray-PublicApi-0003
-
-
-START_TESTCASE 			PBASE-F32-EntryArray-PublicApi-0004
-//! @SYMTestCaseID		PBASE-F32-EntryArray-PublicApi-0004
-//! @SYMAPI			TEntryArray
-//! @SYMTestCaseDesc		operator[] test. This tests for panic when accessing non-existant array element.
-//!				Uses API elements: TEntry(), TEntryArray(), operator[]
-//! @SYMTestActions		1. Create RFs object.
-//!				2. Create RDir object.
-//!				3. Create RFile object.
-//!				4. Create TEntry object.
-//!				5. Create TEntryArray object.
-//!				6. Call Rfs::Connect().
-//!				7. Creates files "test1.txt", "test2.txt" and "test3.txt" using RFile::Create().
-//!				8. Close files "test1.txt", "test2.txt" and "test3.txt" using RFile::Close(). 
-//!				9. Open the contents of directory "<RAM_DRIVE>:\EntryArray\" using RDir::Open().
-//!				10.Read the contents of directory "<RAM_DRIVE>:\EntryArray\" using RDir::Read() and passing TEntryArray object as parameter.
-//!				11.Call RFs::Close() for closing "<RAM_DRIVE>:\EntryArray\" directory.
-//!				12.Assign an element of TEntryArray with index 3 to TEntry.
-//!				13.Delete files "test1.txt", "test2.txt" and "test3.txt" using RFs::Delete().
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function panics with panic code FSCLIENT 22.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini 
-		CREATE_OBJECT		RFs		RFs1
-		COMMAND			RFs1		new			
-		COMMAND			RFs1		Connect
-		COMMAND			RFs1		MkDirAll		PBASE-F32-EntryArray-PublicApi-0004-001-MkDirAll_command004
-		COMMAND			RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini
-		CREATE_OBJECT		RFs		RFs1
-		CREATE_OBJECT		RDir		RDir1
-		CREATE_OBJECT		RFile		RFile1
-		CREATE_OBJECT		TEntry		TEntry1	
-		CREATE_OBJECT		TEntryArray	TEntryArray1
-		COMMAND			RFs1		new			
-		COMMAND			RFile1		new					
-		COMMAND			RDir1		new		
-		COMMAND			TEntry1		new		
-		COMMAND			TEntryArray1	new				
-		COMMAND			RFs1		Connect
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0004-002-CreateFile_command012
-		COMMAND			RFile1		Close
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0004-002-CreateFile_command014
-		COMMAND			RFile1		Close
-		COMMAND			RFile1		Create		PBASE-F32-EntryArray-PublicApi-0004-002-CreateFile_command016
-		COMMAND			RFile1		Close
-		COMMAND			RDir1		Open		PBASE-F32-EntryArray-PublicApi-0004-002-OpenDir_command018
-		COMMAND	!Error=-25	RDir1		Read		PBASE-F32-EntryArray-PublicApi-0004-002-Read_command019
-		COMMAND			RDir1		Close
-		COMMAND			TEntryArray1	[]		PBASE-F32-EntryArray-PublicApi-0004-002-brackets_command021
-		COMMAND			TEntryArray1	~		
-		COMMAND			TEntry1		~		
-		COMMAND			RFile1		~		
-		COMMAND			RDir1		~		
-		COMMAND			RFs1		~				
-	END_TEST_BLOCK	!PanicCode=22 !PanicString="FSCLIENT panic"
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-EntryArray-PublicApi.ini
-		CREATE_OBJECT		RFs		RFs1
-		COMMAND			RFs1		new			
-		COMMAND			RFs1		Connect			
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0004-003-DeleteFile_command004
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0004-003-DeleteFile_command005
-		COMMAND			RFs1		Delete		PBASE-F32-EntryArray-PublicApi-0004-003-DeleteFile_command006
-		COMMAND			RFs1		RmDir		PBASE-F32-EntryArray-PublicApi-0004-003-RmDir_command007
-		COMMAND			RFs1		~			
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-EntryArray-PublicApi-0004
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-File-PublicApi-NAND.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		PBASE-F32-File-PublicApi-NAND
-//!	@SYMScriptTestEnvironment	This test script requires a Pagged ROM.
-//!                             So tests has to be run on Pagged ROM.This tests is good tests only on H/w on which the memory is pagaed.
-//!                             On emulator these tests will not return proper value/so it can be ignored.
-//! 	@SYMScriptCreationDate		27/08/2007
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of RFile class:
-//!	TInt BlockMap(SBlockMapInfo &aInfo, TInt64 &aStartPos, TInt64 aEndPos=-1, TInt aBlockMapusage=EBlockMapUsagePaging) const;
-
-
-LOAD_SUITE	T_SfSrv
-DELAY		1000
-
-
-//
-// BlockMap
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-6001
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-6001
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function BlockMap() test, replace a file and then call BlockMap() on it to get the block/cluster Information
-//!				Uses API elements: Open(), BlockMap().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace() 
-//!				4. Call RFile::BlockMap().
-//!				5. Close RFile.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The tests returns KErrNotSupported on the Rom which is unpaged. On the pagged rom this tests will return 
-//!  KErrCompletion if the end of the file is reached.                     
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Open		PBASE-F32-File-PublicApi-6001-001-Replace_command003
-		COMMAND		!Error=-17	file	BlockMap PBASE-F32-File-PublicApi-6001-001-BlockMap_command003
-		COMMAND			file	Close		
-		COMMAND			file	~	
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-6001
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-6002
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-6002
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function BlockMap() test. Call BlockMap with Usage ETestDebug
-//!				Uses API elements: Open(), BlockMap().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace() to create file tc0002 with EFileWrite 
-//!				4. Call RFile::BlockMap() passing EBlockMapUsagePaging for usage, 0 for startPos.
-//!				5. Close RFile.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The tests returns KErrNotSupported on the Rom which is unpaged. On the pagged rom this tests will return 
-//!  KErrCompletion if the end of the file is reached.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Open	PBASE-F32-File-PublicApi-6002-001-Replace_command003
-		COMMAND	!Error=-17	file	BlockMap	PBASE-F32-File-PublicApi-6002-001-BlockMap_command004
-		COMMAND			file	Close		
-		COMMAND			file	~	
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-6002
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-File-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4238 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Alvar Udras
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of RFile class:
-//!	TInt Open(RFs &aFs, const TDesC &aName, TUint aFileMode);
-//!	void Close();
-//!	TInt Create(RFs &aFs, const TDesC &aName, TUint aFileMode);
-//!	TInt Replace(RFs &aFs, const TDesC &aName, TUint aFileMode);
-//!	TInt Temp(RFs &aFs, const TDesC &aPath, TFileName &aName, TUint aFileMode);
-//!	TInt Read(TDes8 &aDes) const;
-//!	void Read(TDes8 &aDes, TRequestStatus &aStatus) const;
-//!	TInt Read(TDes8 &aDes, TInt aLength) const;
-//!	void Read(TDes8 &aDes, TInt aLength, TRequestStatus &aStatus) const;
-//!	TInt Read(TInt aPos, TDes8 &aDes) const;
-//!	void Read(TInt aPos, TDes8 &aDes, TRequestStatus &aStatus) const;
-//!	TInt Read(TInt aPos, TDes8 &aDes, TInt aLength) const;
-//!	void Read(TInt aPos, TDes8 &aDes, TInt aLength, TRequestStatus &aStatus) const;
-//!	void ReadCancel(TRequestStatus &aStatus) const;
-//!	void ReadCancel() const;
-//!	TInt Write(const TDesC8 &aDes);
-//!	void Write(const TDesC8 &aDes, TRequestStatus &aStatus);
-//!	TInt Write(const TDesC8 &aDes, TInt aLength);
-//!	void Write(const TDesC8 &aDes, TInt aLength, TRequestStatus &aStatus);
-//!	TInt Write(TInt aPos, const TDesC8 &aDes);
-//!	void Write(TInt aPos, const TDesC8 &aDes, TRequestStatus &aStatus);
-//!	TInt Write(TInt aPos, const TDesC8 &aDes, TInt aLength);
-//!	void Write(TInt aPos, const TDesC8 &aDes, TInt aLength, TRequestStatus &aStatus);
-//!	TInt Lock(TInt aPos, TInt aLength) const;
-//!	TInt UnLock(TInt aPos, TInt aLength) const;
-//!	TInt Seek(TSeek aMode, TInt &aPos) const;
-//!	TInt Flush();
-//!	void Flush(TRequestStatus &aStatus);
-//!	TInt Size(TInt &aSize) const;
-//!	TInt SetSize(TInt aSize);
-//!	TInt Att(TUint &aAttValue) const;
-//!	TInt SetAtt(TUint aSetAttMask, TUint aClearAttMask);
-//!	TInt Modified(TTime &aTime) const;
-//!	TInt SetModified(const TTime &aTime);
-//!	TInt Set(const TTime &aTime, TUint aSetAttMask, TUint aClearAttMask);
-//!	TInt ChangeMode(TFileMode aNewMode);
-//!	TInt Rename(const TDesC &aNewName);
-//!	TInt Drive(TInt &aDriveNumber, TDriveInfo &aDriveInfo) const;
-//!	TInt Name(TDes &aName) const;
-//!	TInt Duplicate(const RFile &aFile, TOwnerType aType=EOwnerProcess);
-//!	TInt FullName(TDes &aName) const;
-
-LOAD_SUITE	T_SfSrv
-DELAY		1000
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-Install
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-Install
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Setup the Environment to test RFile APIs by creating directories.
-//! @SYMTestActions		1. Rfs::New() to create Rfs Object.
-//!                     2. Rfs::MkDirAll() to create directories required.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Directories get created.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect	
-		COMMAND		RFs1	MkDirAll	PBASE-F32-File-PublicApi-Install
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-Install
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0001
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Open() test. Open a file and close it.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call Replace passing "{Drives, RAMDriveTestPath}file\tc0001.txt", EFileShareAny | EFileWrite
-//!				3. Write "open test" to file.
-//!				4. Close file.
-//!				5. Open file "{Drives, RAMDriveTestPath}file\tc0001.txt", with EFileRead
-//!				6. Read from file to determine, that the file is opened.
-//!				7. Close file.
-//!				8. Delete file.
-//!				9. Close file system.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Open() returns KErrNone. File is opened after Open call.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0001-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0001-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0001-001-Open_command008
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0001-001-Read_command009
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0001-001-Delete_command013
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-0001
-
-
-//FileModes - EFileRead
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-4001
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-4001
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function TFileMode::EFileRead test. open file for reading and try to write to it.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call Replace passing "{Drives, RAMDriveTestPath}file\tc4001.txt", EFileShareAny | EFileWrite
-//!				3. Close file.
-//!				4. Open file "{Drives, RAMDriveTestPath}file\tc4001.txt", with EFileRead
-//!				5. Write "test" to file.
-//!				6. Close file.
-//!				7. Delete file.
-//!				8. Close file system.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Write returns KErrAccessDenied.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-4001-001-Replace_command005
-		COMMAND			file	Close		
-		COMMAND			file	Open		PBASE-F32-File-PublicApi-4001-001-Open_command007
-		COMMAND	!Error=-21	file	Write		PBASE-F32-File-PublicApi-4001-001-Write_command008
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-4001-001-Delete_command012
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-4001
-
-
-//EFileShareExclusive
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-4002
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-4002
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function TFileMode::EFileShareExclusive test. Open a file in EFileShareExclusive and try to open the same file through another handle.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call Replace passing "{Drives, RAMDriveTestPath}file\tc4002.txt", EFileShareAny | EFileWrite.
-//!				3. Close file.
-//!				4. Open file "{Drives, RAMDriveTestPath}file\tc4002.txt", with EFileShareExclusive 
-//!				5. Open "{Drives, RAMDriveTestPath}file\tc4002.txt" through new handle called file2, with EFileShareExlusive
-//!				6. Close file.
-//!				7. Delete file.
-//!				8. Close file system.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Open returns KErrInUse.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-4002-001-Replace_command005
-		COMMAND			file	Close		
-		COMMAND			file	Open		PBASE-F32-File-PublicApi-4002-001-Open_command007
-		COMMAND			file2	new		
-		COMMAND	!Error=-14	file2	Open		PBASE-F32-File-PublicApi-4002-001-Open_command010
-		COMMAND			file2	Close		
-		COMMAND			file2	~		
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-4002-001-Delete_command017
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-4002
-
-
-//EFileShareReadersOnly
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-4003
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-4003
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function TFileMode::EFileShareReadersOnly test. Open a file in EFileShareReadersOnly and try to write to it through another handle.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call Replace passing "{Drives, RAMDriveTestPath}file\tc4003.txt", EFileShareAny | EFileWrite 
-//!				3. Write "open test" to file.
-//!				4. Close file.
-//!				5. Open file "{Drives, RAMDriveTestPath}file\tc4003.txt", with EFileShareReadersOnly 
-//!				6. Open "{Drives, RAMDriveTestPath}file\tc4003.txt" through new handle called file2 EFileRead.
-//!				7. Read from file.
-//!				8. Try to write "will cause error" to file.
-//!				9. Close file.
-//!				10. Delete file.
-//!				11. Close file system.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Write returns KErrAccessDenied.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-4003-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-4003-001-Write_command006
-		COMMAND			file	Close		
-		COMMAND			file	Open		PBASE-F32-File-PublicApi-4003-001-Open_command008
-		COMMAND			file2	new		
-		COMMAND			file2	Open		PBASE-F32-File-PublicApi-4003-001-Open_command011
-		COMMAND			file2	Read		PBASE-F32-File-PublicApi-4003-001-Read_command012
-		COMMAND	!Error=-21	file2	Write		PBASE-F32-File-PublicApi-4003-001-Write_command013
-		COMMAND			file2	Close		
-		COMMAND			file2	~		
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-4003-001-Delete_command020
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-4003
-
-
-//EFileShareAny
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-4004
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-4004
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function TFileMode::EFileShareAny test. Open a file in EFileShareAny and try to write to it through another handle.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call Replace passing "{Drives, RAMDriveTestPath}file\tc4004.txt", EFileShareAny | EFileWrite 
-//!				3. Write "open test" to file.
-//!				4. Close file.
-//!				5. Open file "{Drives, RAMDriveTestPath}file\tc4004.txt", with EFileShareAny.
-//!				6. Open "{Drives, RAMDriveTestPath}file\tc4004.txt" through new handle called file2 EFileShareAny | EFileWrite.
-//!				7. Read from file.
-//!				8. Try to write "open test" to file.
-//!				9. Close file.
-//!				10. Delete file.
-//!				11. Close file system.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No error is returned or panic raised.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-4004-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-4004-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-4004-001-Open_command008
-		COMMAND		file2	new		
-		COMMAND		file2	Open		PBASE-F32-File-PublicApi-4004-001-Open_command011
-		COMMAND		file2	Read		PBASE-F32-File-PublicApi-4004-001-Read_command012
-		COMMAND		file2	Write		PBASE-F32-File-PublicApi-4004-001-Write_command013
-		COMMAND		file2	Close		
-		COMMAND		file2	~		
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-4004-001-Delete_command020
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-4004
-
-//EFileShareReadersOfWriters
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-4005
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-4005
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function TFileMode::EFileShareReadersOrWriters test. Open a file in EFileShareReadersOrWriters and try to write to it through another handle.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call Replace passing "{Drives, RAMDriveTestPath}file\tc4005.txt", EFileShareAny | EFileWrite. 
-//!				3. Write "open test" to file.
-//!				4. Close file.
-//!				5. Open file "{Drives, RAMDriveTestPath}file\tc4005.txt", with EFileShareReadersOrWriters | EFileRead. 
-//!				6. Open "{Drives, RAMDriveTestPath}file\tc4005.txt" through new handle called file2, EFileShareReadersOrWriters | EFileWrite.
-//!				7. Read from file.
-//!				8. Try to write "open test" to file.
-//!				9. Close file.
-//!				10. Delete file.
-//!				11. Close file system.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No errors returned or panics raised.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-4005-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-4005-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-4005-001-Open_command008
-		COMMAND		file2	new		
-		COMMAND		file2	Open		PBASE-F32-File-PublicApi-4005-001-Open_command011
-		COMMAND		file2	Read		PBASE-F32-File-PublicApi-4005-001-Read_command012
-		COMMAND		file2	Write		PBASE-F32-File-PublicApi-4005-001-Write_command013
-		COMMAND		file2	Close		
-		COMMAND		file2	~		
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-4005-001-Delete_command020
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-4005
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0003
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Create() test. Create a file.
-//!				Uses API elements: Create().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Create passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0003.txt", EFileShareAny
-//!				3. Open the file.
-//!				4. Write literal "test created this file" to file.
-//!				5. Close RFile.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Create() returns KErrNone. File is created. No panics raised or errors returned
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Create		PBASE-F32-File-PublicApi-0003-001-Create_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0003-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0003-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0003
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0004
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0004
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Replace() test. Replace a file.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0004.txt", EFileWrite
-//!				3. Call RFile::Write passing literal "This file is replaced"
-//!				4. Call Flush on file.
-//!				5. Close file.
-//!				6. Open file.
-//!				7. Read the file.
-//!				8. Close RFile.
-//!				9. Delete file.
-//!				10. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Replace returns KErrNone. File contains written literal and nothing else.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0004-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0004-001-Write_command006
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0004-001-Open_command009
-		COMMAND		file	Read		
-		COMMAND		file	Close
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0004-001-Delete_command013
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0004
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0005
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Temp() test. Create a temporary file.
-//!				Uses API elements: Temp().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Temp passing RFs, literal "{Drives, RAMDriveTestPath}file\", TDesc&, EFileWrite
-//!				3. Call RFile::Write passing literal "This is temporary file"
-//!				4. Rename the file to "tc0005.txt".
-//!				5. Close RFile.
-//!				6. Delete temporary file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Temp() returns KErrNone, temporary file is created.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Temp		PBASE-F32-File-PublicApi-0005-001-Temp_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0005-001-Write_command006
-		COMMAND		file	Rename		PBASE-F32-File-PublicApi-0005-001-Rename_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0005-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0005
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0006
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read(TDes8 &aDes) test - will open file and read its contents to a buffer.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0006.txt", EFileWrite
-//!				3. Call RFile::Write passing literal "Synchronous read test!".
-//!				4. Set the file position to 0.
-//!				5. Call RFile::Read().
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrNone. Data is read and verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0006-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0006-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0006-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0006-001-Read_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0006-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0006
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0007
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read(TDes8& aDes, TRequestStatus &aStatus) test - will open file and read its contents to a buffer.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0007.txt", EFileWrite.
-//!				3. Call RFile::Write passing literal "asynchronous read test"
-//!				4. Reset file position
-//!				5. Call RFile::Read() passing TRequestStatus.
-//!				6. Wait until asynchronous call completes
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The asynchronous read call finishes with KErrNone. Data is read and verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0007-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0007-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0007-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0007-001-Read_command008
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0007-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0007
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0008
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read(TDes8 &aDes, TInt aLength) test - will open file and read fixed length from its contents to a buffer.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0008.txt", EFileWrite
-//!				3. Write "synchronous read with length test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing TDesC, 5 for the length
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrNone. Data is read and verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0008-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0008-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0008-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0008-001-Read_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0008-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0008
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0009
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read(TDes8 &aDes, TInt aLength, TRequestStatus &aStatus) test - will open file and read fixed length from its contents to a buffer.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0009.txt", EFileWrite.
-//!				3. Call RFile::Write passing literal "Asynchronous read with length test"
-//!				4. Reset file position
-//!				4. Create TRequestStatus variable.
-//!				5. Call RFile::Read() passing TRequestStatus and 5 for length.
-//!				6. Wait until asynchronous call completes
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The asynchronous read call finishes with KErrNone. Data is read and verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0009-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0009-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0009-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0009-001-Read_command008
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0009-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0009
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0010
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0010
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read(TInt aPos, TDes8 &aDes) test - will open file and read from given position its contents to a buffer.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0010.txt", EFileWrite
-//!				3. Write "synchronous read with position test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing 5 for position.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrNone. Data is read and verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0010-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0010-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0010-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0010-001-Read_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0010-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-0010
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0011
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0011
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read(TInt aPos, TDes8 &aDes, TRequestStatus &aStatus) test - will open file and read from given position its contents to a buffer.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0011.txt", EFileWrite.
-//!				3. Call RFile::Write passing literal "asynchronous read with position test"
-//!				4. Reset file position
-//!				5. Call RFile::Read() passing TRequestStatus and 5 for position.
-//!				6. Wait until asynchronous call completes
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The asynchronous read call finishes with KErrNone. Data is read and verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0011-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0011-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0011-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0011-001-Read_command008
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0011-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0011
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0012
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0012
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read(TInt aPos, TDes8 &aDes, TInt aLength) test - will open file and read from given position fixed length of contents into a buffer.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0012.txt", EFileWrite
-//!				3. Write "synchronous read with length and position test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing 5 for  length and 5 for position.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrNone. Data is read and verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0012-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0012-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0012-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0012-001-Read_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0012-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0012
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0013
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0013
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read(TInt aPos, TDes8 &aDes, TInt aLength, TRequestStatus &aStatus) test - will open file and read from given position fixed length of contents into a buffer.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0013.txt", EFileWrite.
-//!				3. Call RFile::Write passing literal "asynchronous read with length and position test"
-//!				4. Reset file position
-//!				5. Call RFile::Read() passing TRequestStatus, 5 for length and 5 for position.
-//!				6. Wait until asynchronous call completes
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The asynchronous read call finishes with KErrNone. Data is read and verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0013-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0013-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0013-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0013-001-Read_command008
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~	
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0013-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-0013
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0014
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0014
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function ReadCancel(TRequestStatus aStatus) and EFileReadAsyncAll test.
-//!				Uses API elements: ReadCancel().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0014.txt", EFileWrite.
-//!				3. Write message "short data" to file.
-//!				4. Close file
-//!				5. Open fail again with EFileShareAny | EFileReadAsyncAll.
-//!				6. Call RFile::Read() passing TRequestStatus.
-//!				7. Call ReadCancel passing TRequestStatus.
-//!				8. Close RFile.
-//!				9. Delete file.
-//!				10. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	TRequestStatus returns KErrCancel after ReadCancel.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0014-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0014-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0014-001-Open_command008
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0014-001-Seek_command009
-		COMMAND	!AsyncError=-3	file	Read		PBASE-F32-File-PublicApi-0014-001-Read_command010
-		ASYNC_DELAY		5
-		COMMAND		file	ReadCancel	
-        COMMAND		file	ReadCancel
-		OUTSTANDING 	
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0014-001-Delete_command015
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0014
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0015
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0015
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function ReadCancel() test, call two asynchronous reads consequently on the same file.
-//!				Uses API elements: ReadCancel().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0015.txt", EFileWrite.
-//!				3. Write message "short data" to file.
-//!				4. Close file
-//!				5. Open fail again with EFileShareAny | EFileReadAsyncAll.
-//!				6. Call RFile::Read() passing TRequestStatus.
-//!				7. Call RFile::Read() passing TRequestStatus.
-//!				8. Call ReadCancel.
-//!				9. Close RFile.
-//!				10. Delete file.
-//!				11. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Both TRequestStatuses return KErrCancel after ReadCancel.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0015-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0015-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0015-001-Open_command008
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0015-001-Seek_command009
-		COMMAND !AsyncError=-3	file	Read		PBASE-F32-File-PublicApi-0015-001-Read_command010
-		COMMAND	!AsyncError=-3	file	Read		PBASE-F32-File-PublicApi-0015-001-Read_command011
-		ASYNC_DELAY		5
-		COMMAND		file	ReadCancel		PBASE-F32-File-PublicApi-0015-001-ReadCancel_command012
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0015-001-Delete_command016
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-0015
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0016
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0016
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Write(const TDesC8 &aDes) test - will open file and Write to it from given buffer.
-//!				Uses API elements: Write(const TDesC8 &aDes).
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0016.txt", EFileWrite
-//!				3. Call RFile::Write() passing "Write test".
-//!				4. Reset file position
-//!				5. Read from file to verify it's content.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Write() returns KErrNone. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0016-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0016-001-Write_command006
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0016-001-Open_command009
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0016-001-Read_command010
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0016-001-Delete_command014
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0016
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0017
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0017
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Write(const TDesC8 &aDes, TRequestStatus &aStat) test - will open file and Write to it from given buffer.
-//!				Uses API elements: Write(const TDesC8 &aDes, TRequestStatus &aStat).
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0017.txt", EFileWrite.
-//!				3. Call RFile::Write()  passing "Asynchronous write test" and TRequestStatus.
-//!				4. Wait for request to complete.
-//!				5. Reset file position
-//!				6. Read from file to verify it's content.
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Write completes with KErrNone. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0017-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0017-001-Write_command006
-		OUTSTANDING
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0017-001-Open_command009
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0017-001-Read_command010
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0017-001-Delete_command014
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0017
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0018
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0018
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Write(const TDesC8 &aDes, TInt aLength) test - will open file and Write to it fixed length bytes from given buffer.
-//!				Uses API elements: Write(const TDesC8 &aDes, TInt aLength).
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0018.txt", EFileWrite
-//!				3. Call RFile::Write() passing "Synchronous write test with length", and 5 for length to write.
-//!				4. Reset file position
-//!				5. Read from file to verify it's content.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Write() returns KErrNone. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0018-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0018-001-Write_command006
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0018-001-Open_command009
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0018-001-Read_command010
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0018-001-Delete_command014
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0018
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0019
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0019
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Write(const TDesC8 &aDes, TInt aLength, TRequestStatus &aStatus) test - will open file and Write to it fixed length bytes from given buffer.
-//!				Uses API elements: Write(const TDesC8 &aDes, TInt aLength, TRequestStatus &aStatus).
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0019.txt", EFileWrite.
-//!				3. Call RFile::Write()  passing "Asynchronous write test with length", 5 for length and TRequestStatus.
-//!				4. Wait for request to complete.
-//!				5. Reset file position
-//!				6. Read from file to verify it's content.
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Write completes with KErrNone. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0019-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0019-001-Write_command006
-		OUTSTANDING
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0019-001-Open_command009
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0019-001-Read_command010
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0019-001-Delete_command014
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-0019
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0020
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0020
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Write(TInt aPos, const TDesC8 &aDes) test - will open file and Write to it from given position.
-//!				Uses API elements: Write(TInt aPos, const TDesC8 &aDes).
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0020.txt", EFileWrite
-//!				4. Call RFile::Write() passing "Synchronous write test with position", and 2 for position to write from.
-//!				5. Reset file position
-//!				6. Read from file to verify it's content.
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Write() returns KErrNone. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0020-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0020-001-Write_command006
-		COMMAND		file	Flush		
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0020-001-Write_command008
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0020-001-Open_command011
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0020-001-Read_command012
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0020-001-Delete_command016
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-0020
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0021
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0021
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Write(TInt aPos, const TDesC8 &aDes, TRequestStatus &aStatus) test - will open file and Write to it from given position.
-//!				Uses API elements: Write(TInt aPos, const TDesC8 &aDes, TRequestStatus &aStatus).
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0021.txt", EFileWrite.
-//!				3. Call RFile::Write()  passing "Asynchronous write test with position", 2 for position and TRequestStatus.
-//!				4. Wait for request to complete.
-//!				5. Reset file position
-//!				6. Read from file to verify it's content.
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	TRequestStatus equals KErrNone after writing. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0021-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0021-001-Write_command006
-		COMMAND		file	Flush		
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0021-001-Write_command008
-		OUTSTANDING
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0021-001-Open_command011
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0021-001-Read_command012
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0021-001-Delete_command016
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0021
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0022
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0022
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Write(TInt aPos, const TDesC8 &aDes, TInt aLength) test - will open file and Write to it from given position and fixed length of bytes.
-//!				Uses API elements: Write(TInt aPos, const TDesC8 &aDes, TInt aLength).
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0022.txt", EFileWrite
-//!				3. Call RFile::Write() passing "Synchronous write test with position, length", 2 for position and 4 for length to write from.
-//!				4. Reset file position
-//!				5. Read from file to verify it's content.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Write() returns KErrNone. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0022-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0022-001-Write_command006
-		COMMAND		file	Flush		
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0022-001-Write_command008
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0022-001-Open_command011
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0022-001-Read_command012
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0022-001-Delete_command016
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0022
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0023
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0023
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Write(TInt aPos, const TDesC8 &aDes, TInt aLength, TRequestStatus &aStatus) test - will open file and Write to it from given position and fixed length of bytes.
-//!				Uses API elements: Write(TInt aPos, const TDesC8 &aDes, TInt aLength, TRequestStatus &aStatus).
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0023.txt", EFileWrite.
-//!				3. Call RFile::Write()  passing "Asynchronous write test with position, length",2 for position, 4 for length and TRequestStatus.
-//!				4. Wait for request to complete.
-//!				5. Reset file position
-//!				6. Read from file to verify it's content.
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	TRequestStatus equals KErrNone after writing. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0023-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0023-001-Write_command006
-		COMMAND		file	Flush		
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0023-001-Write_command008
-		OUTSTANDING
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0023-001-Open_command011
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0023-001-Read_command012
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0023-001-Delete_command016
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0023
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0024
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0024
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Lock(), UnLock test - open a file and lock it, then try to read from it from another RFs.
-//!				Uses API elements: Lock(), Unlock(), Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0024.txt", EFileWrite, open file as fileOne.
-//!				3. Write "Lock test" to file.
-//!				4. Lock the file by Calling Lock() with pos=0 and length=3.
-//!				5. open  "{Drives, RAMDriveTestPath}file\tc0024.txt" as fileTwo.
-//!				6. read from the fileTwo.
-//!				7. read from fileOne.
-//!				8. unlock fileOne by RFile::Unlock(), with pos=0 and length=3.
-//!				9. read from fileTwo.
-//!				10. Close fileOne.
-//!				11. Close fileTwo.
-//!				12. Delete file.
-//!				13. Close first RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	When fileOne is locked reading of fileTwo returns KErrLocked, Lock() returns KErrNone, UnLock returns KErrNone. 
-//!				After fileOne is unlocked Reading of fileTwo returns KErrNone.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-0024-001-Replace_command005
-		COMMAND			file2	new		
-		COMMAND			file2	Open		PBASE-F32-File-PublicApi-0024-001-Open_command008
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-0024-001-Write_command010
-		COMMAND			file	Lock		PBASE-F32-File-PublicApi-0024-001-Lock_command011
-		COMMAND	!Error=-22	file2	Read		
-		COMMAND			file	Read		
-		COMMAND			file	UnLock		PBASE-F32-File-PublicApi-0024-001-UnLock_command016
-		COMMAND			file2	Read		
-		COMMAND			file2	Close		
-		COMMAND			file2	~		
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-0024-001-Delete_command025
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0024
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0025
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0025
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Seek() test - open a file and and get it's current position.
-//!				Uses API elements: Seek(), Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0025.txt", EFileWrite.
-//!				3. Write "Should seek to pos here" to file.
-//!				3. Call RFile::Seek passing ESeekStart, 19
-//!				4. Call RFile::Read;
-//!				5. Close file.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Seek() returns KErrNone, buffer contents equals string literal "here".
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0025-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0025-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0025-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0025-001-Read_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0025-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0025
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0125
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0125
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Seek() test - test TSeek::ESeekCurrent.
-//!				Uses API elements: Seek(), Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0125.txt", EFileWrite.
-//!				3. Write "Should seek to pos here" to file.
-//!				3. Call RFile::Seek passing ESeekStart, 0
-//!				4. Call RFile::Read passing 7 for length.
-//!				5. Call RFile::Seek passing ESeekCurrent, 5.
-//!				6. Call RFile::Read().
-//!				7. Close file.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Seek() returns KErrNone, step 6 returns "to pos here".
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0125-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0125-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0125-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0125-001-Read_command008
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0125-001-Seek_command009
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0125-001-Read_command010
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0125-001-Delete_command014
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-0125
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0026
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0026
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Flush() test - open file, write to it and then flush.
-//!				Uses API elements: Open(), Flush(), Write().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0026.txt", EFileWrite.
-//!				5. Call RFile::Write()  passing "This data should be flushed".
-//!				4. Call RFile::Flush();
-//!				5. Close file.
-//!				6. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Flush() returns KErrNone. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0026-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0026-001-Write_command006
-		COMMAND		file	Flush	
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0026-001-Seek_command008
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0026-001-Read_command009
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0026-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0026
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0027
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0027
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Flush() test - open file, write to it and then flush.
-//!				Uses API elements: Open(), Flush(), Write().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0027.txt", EFileWrite.
-//!				3. Call RFile::Write()  passing literal "This data should be flushed".
-//!				4. Call RFile::Flush() passing TRequestStatus.
-//!				5. Wait for request to complete.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	TRequestStatus returns KErrNone. File contains written data.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0027-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0027-001-Write_command006
-		COMMAND		file	Flush		PBASE-F32-File-PublicApi-0027-001-Flush_command007
-		OUTSTANDING
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0027-001-Seek_command008
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0027-001-Read_command009
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0027-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0027
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0028
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0028
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function SetSize, Size() test - open file and set it's size, then get it.
-//!				Uses API elements: Open(), Flush(), Write().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0028.txt", EFileWrite.
-//!				3. Write literal "Size test this text should be truncated" to file.
-//!				4. Call RFile::SetSize() passing it 10 for size.
-//!				5. Call RFile::Size.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Size, RFile::SetSize returns KErrNone(). aSize equals with the size of file.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0028-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0028-001-Write_command006
-		COMMAND		file	SetSize		PBASE-F32-File-PublicApi-0028-001-SetSize_command007
-		COMMAND		file	Size		PBASE-F32-File-PublicApi-0028-001-Size_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0028-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0028
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0029
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0029
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Att(), SetAtt test - open file and get it's attributes.
-//!				Uses API elements: Open(), Att().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0029.txt", EFileWrite.
-//!				3. Write "SetAtt test" to file.
-//!				4. Call RFile::SetAtt, passing KEntryAttNormal, KEntryAttReadOnly
-//!				5. Flush data to file.
-//!				6. Close file.
-//!				7. Open file.
-//!				8. Call RFile::Att().
-//!				9. Close RFile.
-//!				10. Delete file.
-//!				11. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Att(), RFile::SetAtt returns KErrNone, aAttValue & KEntryAttNormal equals KEntryAttNormal.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0029-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0029-001-Write_command006
-		COMMAND		file	SetAtt		PBASE-F32-File-PublicApi-0029-001-SetAtt_command007
-		COMMAND		file	Flush		
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0029-001-Open_command010
-		COMMAND		file	Att		PBASE-F32-File-PublicApi-0029-001-Att_command011
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0029-001-Delete_command015
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0029
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0030
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0030
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Modified(), SetModified test - open file and get/set it's modification time.
-//!				Uses API elements: Open(), Modified(), SetModified().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0030.txt", EFileWrite.
-//!				3. Call RFile::SetModified, passing 20070118:
-//!				4. Close the file.
-//!				5. Open the file.
-//!				6. Call RFile::Modified().
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Modified(), RFile::SetModified returns KErrNone. Modified returns same date as was set with SetModified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0030-001-Replace_command005
-		COMMAND		file	SetModified		PBASE-F32-File-PublicApi-0030-001-SetModified_command006
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0030-001-Open_command008
-		COMMAND		file	Modified		PBASE-F32-File-PublicApi-0030-001-Modified_command009
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0030-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0030
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0031
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0031
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Set() test - open file and set it's modification time and attributes.
-//!				Uses API elements: Open(), Set(), Modified(), Att().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0031.txt", EFileShareAny.
-//!				3. Call RFile::Set() passing it 20070118:, KEntryAttArchive, KEntryAttReadOnly.
-//!				4. Call RFile::Modified() to validate modification date.
-//!				5. Call RFile::Att() to validate attributes.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Set() returns KErrNone. Data and attributes are validated.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0031-001-Replace_command005
-		COMMAND		file	Set		PBASE-F32-File-PublicApi-0031-001-Set_command006
-		COMMAND		file	Att		PBASE-F32-File-PublicApi-0031-001-Att_command007
-		COMMAND		file	Modified		PBASE-F32-File-PublicApi-0031-001-Modified_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0031-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0031
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0032
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0032
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function ChangeMode() test - open file and change it's access mode.
-//!				Uses API elements: Open(), SetModified().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0032.txt".
-//!				3. Close file.
-//!				4. open the file in EFileShareExclusive mode.
-//!				5. Call RFile::ChangeMode() passing it EFileShareReadersOnly.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::ChangeMode() returns KErrNone. Filemode is EFileSareReadersOnly.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0032-001-Replace_command005
-		COMMAND		file	Close		
-		COMMAND		file	Open		PBASE-F32-File-PublicApi-0032-001-Open_command007
-		COMMAND		file	ChangeMode		PBASE-F32-File-PublicApi-0032-001-ChangeMode_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0032-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0032
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0033
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0033
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Rename() test - open file and rename it.
-//!				Uses API elements: Open(), RFile::Rename().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0033.txt", EFileShareExclusive | EFileWrite.
-//!				3. Call RFile::Rename() passing it string literal "test_renamed.txt".
-//!				4. Call RFile::Name.
-//!				5. rename the file back to tc0033.txt
-//!				6. Delete file.
-//!				7. Close resources.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Rename() returns KErrNone. File is renamed.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0033-001-Replace_command005
-		COMMAND		file	Rename		PBASE-F32-File-PublicApi-0033-001-Rename_command006
-		COMMAND		file	Name		
-		COMMAND		file	Rename		PBASE-F32-File-PublicApi-0033-001-Rename_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0033-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0033
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0034
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0034
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Drive() test - open file and get it's drive info.
-//!				Uses API elements: RFile::Drive().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0034.txt", EFileShareAny.
-//!				3. Call RFile::Drive().
-//!				4. Close RFile.
-//!				5. Delete file.
-//!				6. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Drive() returns KErrNone.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0034-001-Replace_command005
-		COMMAND		file	Drive		PBASE-F32-File-PublicApi-0034-001-Drive_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0034-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0034
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0039
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0039
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Name() test. Open a file and get it's name.
-//!				Uses API elements: Name().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Open file "{Drives, RAMDriveTestPath}file\tc0039.txt" as file1
-//!				3. Call RFile::Name().
-//!				4. Close file system.
-//!				5. Delete file.
-//!				6. Close file.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Name() returns KErrNone. File name is verified.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0039-001-Replace_command005
-		COMMAND		file	Name		PBASE-F32-File-PublicApi-0039-001-Name_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0039-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0039
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0040
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0040
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Duplicate() test. Duplicate a file and compare it size to original.
-//!				Uses API elements: Duplicate().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Replace file "{Drives, RAMDriveTestPath}file\tc0040.txt" as file1, with EFileWrite permission
-//!				3. Write "Duplicate Test" to file
-//!				4. Create file2 by calling RFile::Duplicate(), passing reference to file1.
-//!				5. Read from file2 to verify that file1 has been duplicated.
-//!				6. Close file1.
-//!				7. Close file2.
-//!				8. Delete file1
-//!				9. Close fs session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Duplicate() returns KErrNone. The content of file1 and file2 is equal.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0040-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0040-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-0040-001-Seek_command007
-		COMMAND		file2	new		
-		COMMAND		file2	Duplicate	PBASE-F32-File-PublicApi-0040-001-Duplicate_command010
-		COMMAND		file2	Read		PBASE-F32-File-PublicApi-0040-001-Read_command011
-		COMMAND		file2	Close		
-		COMMAND		file2	~		
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0040-001-Delete_command017
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0040
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1040
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1040
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Duplicate()  with aType = EOwnerThread test. Duplicate file and compare it size to original.
-//!				Uses API elements: Duplicate().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Replace file "{Drives, RAMDriveTestPath}file\tc1040.txt" as file1, with EFileWrite permission
-//!				3. Write "Duplicate Test" to file
-//!				4. Create file2 by calling RFile::Duplicate(), passing reference to file1.
-//!				5. Read from file2 to verify that file1 has been duplicated.
-//!				6. Close file1.
-//!				7. Close file2.
-//!				8. Delete file1.
-//!				9. Close fs session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Duplicate() returns KErrNone. The content of file1 and file2 is equal.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1040-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1040-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-1040-001-Seek_command007
-		COMMAND		file2	new		
-		COMMAND		file2	Duplicate	PBASE-F32-File-PublicApi-1040-001-Duplicate_command010
-		COMMAND		file2	Read		PBASE-F32-File-PublicApi-1040-001-Read_command011
-		COMMAND		file2	Close		
-		COMMAND		file2	~		
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1040-001-Delete_command017
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1040
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0041
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0041
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function FullName() test. Open a file and get it's full name.
-//!				Uses API elements: FullName().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Replace file "{Drives, RAMDriveTestPath}file\tc0041.txt" 
-//!				3. Call FullName.
-//!				4. Close file.
-//!				5. Delete file.
-//!				6. Close fs session.
-//!
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::FullName returns KErrNone. Descriptor retrieved from FullName is equal to the path and name of the file.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0041-001-Replace_command005
-		COMMAND		file	FullName		PBASE-F32-File-PublicApi-0041-001-FullName_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0041-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0041
-
-
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-//////								//////
-//////		 ///////////////////////////////////		//////
-//////		 ///				 ///		//////
-//////		 ///	  NEGATIVE TESTS	 ///		//////
-//////		 ///				 ///		//////	
-//////		 ///////////////////////////////////		//////
-//////								//////
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0101
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0101
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Open() neg. test. Call open with invalid path.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Open file "{Drives, RAMDriveTestPath}file\base\chickenfarm\chicken.txt"
-//!				3. Close fs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	open returns KErrPathNotFound! on step 2.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND	!Error=-12	file	Open		PBASE-F32-File-PublicApi-0101-001-Open_command005
-		COMMAND			file	~		
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0101
-
-
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0103
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0103
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Open() neg. test. Call open with invalid filemodes.
-//!				Uses API elements: Open().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Create file "{Drives, RAMDriveTestPath}file\tc0103.txt".
-//!				3. Close file.
-//!				4. Open file "{Drives, RAMDriveTestPath}file\tc0103.txt" with EFileShareReadersOnly | EFileWrite.
-//!				5. Delete file.
-//!				6. Close fs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Open returns KErrArgument on step 2.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-0103-001-Replace_command005
-		COMMAND			file	Close		
-		COMMAND	!Error=-6	file	Open		PBASE-F32-File-PublicApi-0103-001-Open_command007
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-0103-001-Delete_command010
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0103
-
-
-//
-// Create
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0201
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0201
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Create() neg. test. Try to Create a file in nonexistant folder.
-//!				Uses API elements: Create().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Create passing RFs, literal "{Drives, RAMDriveTestPath}file\base\chickenfarm\chicken.txt", EFileShareAny
-//!				3. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Create() returns KErrPathNotFound on step 2.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND	!Error=-12	file	Create		PBASE-F32-File-PublicApi-0201-001-Create_command005
-		COMMAND			file	~		
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0201
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0202
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0202
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Create() neg. test. Try to Create a file which already exists.
-//!				Uses API elements: Create().
-//! @SYMTestActions		1. Create RFs handle.
-//!				2. Create a File, by calling RFile::Replace with "{Drives, RAMDriveTestPath}file\tc0202.txt", EFileWrite.
-//!				3. Close file.
-//!				4. Call RFile::Create passing "{Drives, RAMDriveTestPath}file\tc0202.txt", EFileWrite.
-//!				5. Delete file.
-//!				6. Close fs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	KErrAlreadyExists on step 3
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-0202-001-Replace_command005
-		COMMAND			file	Close		
-		COMMAND	!Error=-11	file	Create		PBASE-F32-File-PublicApi-0202-001-Create_command007
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-0202-001-Delete_command010
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0202
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0203
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0203
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Create() neg. test. Try to Create a file with bizarre filemodes.
-//!				Uses API elements: Create().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Replace file "{Drives, RAMDriveTestPath}file\tc0203.txt"
-//!				3. Delete file "{Drives, RAMDriveTestPath}file\tc0203.txt"
-//!				2. Create file "{Drives, RAMDriveTestPath}file\tc0203.txt" with EFileShareReadersOnly | EFileWrite
-//!				3. Close session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Create returns KErrArgument on step 2.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new	
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-0203-001-Replace_command001
-		COMMAND			file    Close
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-0203-001-Delete_command002
-		COMMAND	!Error=-6	file	Create		PBASE-F32-File-PublicApi-0203-001-Create_command005
-		COMMAND			file	~		
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0203
-
-
-//
-// Replace
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0301
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0301
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Replace() neg. test. Replace a file with nonexistant path.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\base\chickenfarm\chicken.txt", EFileWrite
-//!				3. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Replace() returns KErrPathNotFound on step 2.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND	!Error=-12	file	Replace		PBASE-F32-File-PublicApi-0301-001-Replace_command005
-		COMMAND			file	~		
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0301
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0303
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0303
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Replace() neg. test. Call Replace with bizarre filemodes.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0303.txt", EFileShareReadersOnly | EFileWrite
-//!				3. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	returns KErrArgument on step 2.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND	!Error=-6	file	Replace		PBASE-F32-File-PublicApi-0303-001-Replace_command005
-		COMMAND			file	~		
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0303
-
-//
-// TEMP
-//
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0401
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0401
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Temp() neg. test. Try to create temporary file in nonexistant directory.
-//!				Uses API elements: Temp().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Temp passing RFs, literal "{Drives, RAMDriveChar}:\base\chickenfarm\", TDesc&, EFileWrite
-//!				3. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Temp() KErrPathNotFound on step 2.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND	!Error=-12	file	Temp		PBASE-F32-File-PublicApi-0401-001-Temp_command005
-		COMMAND			file	~		
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0401
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0403
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0403
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Temp() neg. test. Try to create a temporary file with obscure filemodes.
-//!				Uses API elements: Temp().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Temp passing RFs, literal "{Drives, RAMDriveTestPath}file\", TDesc&, EFileShareReadersOnly | EFileWrite
-//!				3. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Temp() returns KErrArgument on step 2.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND	!Error=-6	file	Temp		PBASE-F32-File-PublicApi-0403-001-Temp_command005
-		COMMAND			file	~		
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0403
-
-
-//
-// READ3
-//
-
-
-START_TESTCASE 		PBASE-F32-File-PublicApi-0701
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0701
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - try to read negative length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\0701.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing TDesC, -1 for the length
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrArgument.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-0701-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-0701-001-Write_command006
-		COMMAND	!Error=-6	file	Read		PBASE-F32-File-PublicApi-0701-001-Read_command007
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-0701-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0701
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0702
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0702
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - Will open file and try to read more data from it, than the buffer length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0702.txt", EFileWrite
-//!				3. Write "readtest" to file
-//!				4. Reset file position.
-//!				5. Create buffer descriptor with length 4.
-//!				5. Call RFile::Read() passing buffer, 1000 for the length.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns an KErrOverlow.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-0702-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-0702-001-Write_command006
-		COMMAND	!Error=-9	file	Read		PBASE-F32-File-PublicApi-0702-001-Read_command007
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-0702-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0702
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0703
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0703
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read(TDesC8& aData, TInt length) test. Pass 0 for length
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0703.txt", EFileWrite
-//!				3. Write "readtest" to file
-//!				4. Reset file position.
-//!				5. Create buffer descriptor with length 4.
-//!				5. Call RFile::Read() passing buffer, 0 for the length.
-//!				6. Close RFile.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns empty descriptor
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0703-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0703-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0703-001-Read_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0703-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0703
-
-
-//
-// READ4
-//
-
-
-START_TESTCASE 		PBASE-F32-File-PublicApi-0801
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0801
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read() neg. test - try to read negative length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0801.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing TDesC, -1 for the length, TRequestStatus
-//!				6. wait for request.
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrArgument with TRequestStatus.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-0801-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-0801-001-Write_command006
-		COMMAND	!AsyncError=-6	file	Read		PBASE-F32-File-PublicApi-0801-001-Read_command007
-		OUTSTANDING
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-0801-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0801
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0802
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0802
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read() neg. test - Will open file and try to read more data from it, than the buffer length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0802.txt", EFileWrite
-//!				3. Write "readtest" to file
-//!				4. Reset file position.
-//!				5. Create buffer descriptor with length 4.
-//!				6. Call RFile::Read() passing buffer, 1000 for the length, TRequestStatus
-//!				7. Wait for status.
-//!				8. Close RFile.
-//!				9. Delete file.
-//!				10. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns an KErrOverlow, with TRequestStatus.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-0802-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-0802-001-Write_command006
-		COMMAND	!AsyncError=-9	file	Read		PBASE-F32-File-PublicApi-0802-001-Read_command007
-		OUTSTANDING
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-0802-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0802
-
-
-//
-// READ5
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0901
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0901
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - try to read from negative position.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0901.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing -1 for position.
-//!				6. Close file.
-//!				7. Delete file.
-//!				8. Close file server session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic FSCLIENT:19 at step 5.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0901-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0901-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0901-001-Read_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0901-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0901-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-0901
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-0902
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-0902
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - try to read beyond file's length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc0902.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing 100 for position.
-//!				6. Close file.
-//!				7. Delete file.
-//!				8. Close file server session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read(data, position) returns zero length descriptor.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-0902-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-0902-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-0902-001-Read_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-0902-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-0902
-
-
-//
-// READ6
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1001
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1001
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read() neg. test - try to read from negative position.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1001.txt", EFileWrite
-//!				3. Write "synchronous read with position test" to file
-//!				4. Call RFile::Read() passing -1 for position, TRequestStatus.
-//!				5. close file.
-//!				6. Delete tc1001.txt
-//!				7. Close file server session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic FSCLIENT:19 at step 5.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1001-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1001-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-1001-001-Read_command007
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1001-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1001-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-1001
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1002
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1002
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read() neg. test - try to read beyond files length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1002.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing 100 for position, TRequestStatus.
-//!				6. close file.
-//!				7. Delete tc1002.txt
-//!				8. Close file server session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read(data, position, status) returns zero length descriptor.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1002-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1002-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-1002-001-Read_command007
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1002-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1002
-
-//
-// READ7 
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1101
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1101
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - Will try to read from negative position.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1101.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing 4 for length and -1 for position.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic FSCLIENT:19 at step 5.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1101-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1101-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-1101-001-Read_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1101-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1101-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-1101
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1102
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1102
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - will try to read negative length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1102.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing -4 for length and 10 for position.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrArgument.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1102-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-1102-001-Write_command006
-		COMMAND	!Error=-6	file	Read		PBASE-F32-File-PublicApi-1102-001-Read_command007
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1102-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1102
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1103
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1103
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - Will try to read from position beyond file length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1103.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing 4 for  length and 10 for  position (larger than file's content).
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrNone. Length of data read is 0.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1103-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1103-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-1103-001-Read_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1103-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1103
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1104
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1104
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - Read more from file than buffer's length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1104.txt", EFileRead
-//!				3. Write "readtest" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing buffer (with size 4) 1000 for length and 10 for position.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns an KErrOverlow.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1104-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-1104-001-Write_command006
-		COMMAND	!Error=-9	file	Read		PBASE-F32-File-PublicApi-1104-001-Read_command007
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1104-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1104
-
-
-//
-// READ8 
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1201
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1201
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read() neg. test - Will try to read from negative position.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1201.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing 4 for length and -1 for position and TRequestStatus.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic FSCLIENT:19 at step 5.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1201-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1201-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-1201-001-Read_command007
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1201-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1201-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-1201
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1202
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1202
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read() neg. test - will try to read negative length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1202.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing -4 for length and 10 for position and TRequestStatus.
-//!				6. wait for request to complete
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrArgument.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1202-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-1202-001-Write_command006
-		COMMAND	!AsyncError=-6	file	Read		PBASE-F32-File-PublicApi-1202-001-Read_command007
-		OUTSTANDING
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1202-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1202
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1203
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1203
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read() neg. test - Will try to read from position beyond file length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1203.txt", EFileWrite
-//!				3. Write "test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read(), 4 for length, 10 for position.
-//!				6. Wait for request to complete.
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns KErrNone. Length of data read is 0.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1203-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1203-001-Write_command006
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-1203-001-Read_command007
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1203-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1203
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1204
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1204
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read() neg. test - Read more from file than buffer's length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1204.txt", EFileWrite
-//!				3. Write "synchronous read with length and position test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing buffer (buffer size 4) 1000 for length and for position 10, TRequestStatus.
-//!				6. Wait for request.
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns an KErrOverlow.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1204-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-1204-001-Write_command006
-		COMMAND	!AsyncError=-9	file	Read		PBASE-F32-File-PublicApi-1204-001-Read_command007
-		OUTSTANDING
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1204-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1204
-
-//
-// Write
-//
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1301
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1301
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Write(const TDesC8 &aDes) test - write an emptry buffer to file.
-//!				
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1301.txt", EFileWrite.
-//!				3. Call Write, passing "" and descriptor with length 0.
-//!				4. Close file
-//!				5. Close RFile.
-//!				6. Delete file
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No panic is raised, or error returned.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1301-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-1301-001-Write_command006
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1301-001-Delete_command010
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1301
-
-//
-// Write2
-//
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1401
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1401
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function WWrite(const TDesC8 &aDes, TRequestStatus &aStatus) test - write an emptry buffer to file.
-//!				
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc.txt", EFileWrite.
-//!				3. Call Write, passing "" and descriptor with length 0.
-//!				4. Close file
-//!				5. Close RFile.
-//!				6. Delete file
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No panic is raised, or error returned.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1401-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-1401-001-Write_command006
-		OUTSTANDING
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1401-001-Delete_command010
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1401
-
-
-//
-// Write3
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1602
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1602
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function write neg. test - pass negative number for length.
-//!				
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1602.txt", EFileWrite.
-//!				3. Call Write, pass message "short data" and -1 length.
-//!				4. Close file
-//!				5. Close RFile.
-//!				6. Delete file
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Write() returns KErrArgument.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1602-001-Replace_command005
-		COMMAND	!Error=-6	file	Write		PBASE-F32-File-PublicApi-1602-001-Write_command006
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1602-001-Delete_command010
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1602
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1603
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1603
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function write neg. test - pass 0 number for length.
-//!				
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1603.txt", EFileWrite.
-//!				3. Call Write, pass message "short data" and 0.
-//!				4. Close file
-//!				5. Close RFile.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Write() returns KErrNone.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1603-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1603-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1603-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1603
-
-
-//
-// Write4
-//
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1701
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1701
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous function write neg. test - pass negative number for length.
-//!				
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1701.txt", EFileWrite.
-//!				3. Call Write passing literal "test", -1 for length and TRequestStatus.
-//!				4. Close RFile.
-//!				5. Delete file.
-//!				6. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Write() returns KErrArgument.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1701-001-Replace_command005
-		COMMAND	!AsyncError=-6	file	Write		PBASE-F32-File-PublicApi-1701-001-Write_command006
-		OUTSTANDING
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1701-001-Delete_command010
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1701
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1702
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1702
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous function write test - pass 0 for length.
-//!				
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1702.txt", EFileWrite.
-//!				3. Call Write passing literal "test", 0 for length and TRequestStatus.
-//!				4. Close RFile.
-//!				5. Delete file.
-//!				6. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No panics raised or errors returned.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-1702-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-1702-001-Write_command006
-		OUTSTANDING
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-1702-001-Delete_command010
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-1702
-
-
-//
-// Write5
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1801
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1801
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function write neg. test. Write to negative position.
-//!				Uses API elements:.
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1801.txt", EFileWrite.
-//!				3. Call Write passing "test" and -1 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic FSCLIENT:19.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1801-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1801-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1801-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1801-001-Delete_command010
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-1801
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1802
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1802
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous function write test. Pass a 0 length descriptor to  RFile::Write().
-//!				Uses API elements: void Write(TInt aPos, const TDesC8 &aDes, TRequestStatus &aStatus).
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1802.txt", EFileWrite.
-//!				3. Call Write passing "" and 1 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No error is returned or panic raised.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1802-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1802-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1802-001-Delete_command010
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-1802
-
-
-//
-// Write6
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1901
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1901
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous function write neg. test. Pass a negative number for position to RFile::Write().
-//!				Uses API elements: void Write(TInt aPos, const TDesC8 &aDes, TRequestStatus &aStatus).
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1901.txt", EFileWrite.
-//!				3. Call Write passing "test" and -1 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic FSCLIENT:19.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1901-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1901-001-Write_command006
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1901-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1901-001-Delete_command010
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-1901
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-1902
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-1902
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous function write test. Pass a 0 length descriptor to  RFile::Write().
-//!				Uses API elements: void Write(TInt aPos, const TDesC8 &aDes, TRequestStatus &aStatus).
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc1902.txt", EFileWrite.
-//!				3. Call Write passing descriptor with length 0 and 1 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No error is returned or panic raised.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-1902-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-1902-001-Write_command006
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-1902-001-Delete_command010
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-1902
-
-
-//
-// Write7
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2001
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2001
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Write(TInt aPos, const TDesC8 &aDes, TInt aLength) neg. test. Pass a negative position and negative length.
-//!				Uses API elements: Write().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2001.txt", EFileWrite.
-//!				3. call write, pass "test", -1 for length, -1 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic, FSCLIENT:19
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2001-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2001-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2001-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2001-001-Delete_command010
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2001
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2002
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2002
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Write(TInt aPos, const TDesC8 &aDes, TInt aLength) test. Pass 0 for length.
-//!				Uses API elements: Write().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2002.txt", EFileWrite.
-//!				3. call write, pass "test", 0 for length, 0 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No panic is raised and no error is returned
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2002-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2002-001-Write_command006
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2002-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2002
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2003
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2003
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Write(TInt aPos, const TDesC8 &aDes, TInt aLength) test. Pass -1 for length.
-//!				Uses API elements: Write().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2003.txt", EFileWrite.
-//!				3. call write, pass "test", -1 for length, 0 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Write returns KerrArgument 
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-2003-001-Replace_command005
-		COMMAND	!Error=-6	file	Write		PBASE-F32-File-PublicApi-2003-001-Write_command006
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-2003-001-Delete_command010
-		COMMAND			RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2003
-
-
-//
-// Write8
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2101
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2101
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous function write test. Pass a negative position and negative length.
-//!				Uses API elements: Write().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2101.txt", EFileWrite.
-//!				3. call write, pass literal "negative write test", -1 for length, -1 for negative, TRequestStatus.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic, FSCLIENT:19
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2101-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2101-001-Write_command006
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2101-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2101-001-Delete_command010
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2101
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2102
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2102
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Write(TInt aPos, const TDesC8 &aDes, TInt aLength) test. Pass 0 for length.
-//!				Uses API elements: Write().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2102.txt", EFileWrite.
-//!				3. call write, pass "test", 0 for length, 0 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No panic is raised and no error is returned
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2102-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2102-001-Write_command006
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2102-001-Delete_command010
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2102
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2103
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2103
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Write(TInt aPos, const TDesC8 &aDes, TInt aLength) test. Pass a negative length.
-//!				Uses API elements: Write().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2103.txt", EFileWrite.
-//!				3. call write, pass "test", -1 for length, 0 for position.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Write returns KerrArgument 
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-2103-001-Replace_command005
-		COMMAND	!AsyncError=-6	file	Write		PBASE-F32-File-PublicApi-2103-001-Write_command006
-		OUTSTANDING
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-2103-001-Delete_command010
-		COMMAND			RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2103
-
-
-//
-// Lock
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2201
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2201
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Lock() neg. test - open a file and try to lock zero bytes.
-//!				Uses API elements: Lock(), Unlock(), Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2201.txt", EFileRead.
-//!				3. Write "test" to file.
-//!				4. Lock the file by Calling Lock(), passing pos 0, len 0.
-//!				5. Close file.
-//!				6. Close fs session.
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic - FSCLIENT:17
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2201-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2201-001-Write_command006
-		COMMAND		file	Lock		PBASE-F32-File-PublicApi-2201-001-Lock_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2201-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=17 !PanicString="FSCLIENT"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2201-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2201
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2202
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2202
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Lock() neg. test - open same file with two handles, try to lock the same region twice.
-//!				Uses API elements: Lock(), Unlock(), Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2202.txt", EFileWrite, open file as fileOne.
-//!				3. Lock the file by Calling Lock().
-//!				4. Open "{Drives, RAMDriveTestPath}file\tc2202.txt" as fileTwo.
-//!				5. lock the file 2 at the same position and length as fileOne.
-//!				6. Close fileOne.
-//!				7. Close fileTwo
-//!				8. Delete file
-//!				9. Close first RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Lock() returns KErrLocked at step 5. 
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-2202-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-2202-001-Write_command006
-		COMMAND			file	Lock		PBASE-F32-File-PublicApi-2202-001-Lock_command007
-		COMMAND			file2	new		
-		COMMAND			file2	Open		PBASE-F32-File-PublicApi-2202-001-Open_command010
-		COMMAND	!Error=-22	file2	Lock		PBASE-F32-File-PublicApi-2202-001-Lock_command011
-		COMMAND			file2	Close		
-		COMMAND			file2	~		
-		COMMAND			file	Close		
-		COMMAND			file	~	
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-2202-001-Delete_command017
-		COMMAND			RFs1	~
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-2202
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2203
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2203
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Lock() neg. test - try to lock negative length.
-//!				Uses API elements: Lock(), Unlock(), Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2203.txt", EFileWrite, open file as fileOne.
-//!				3. Lock the file by Calling Lock() with 0 for pos and -1 for length.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Lock() returns panic. 
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2203-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2203-001-Write_command006
-		COMMAND		file	Lock		PBASE-F32-File-PublicApi-2203-001-Lock_command007
-END_TEST_BLOCK	!PanicCode=17 !PanicString="FSCLIENT"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2203-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2203
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2204
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2204
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Lock() neg. test - try to lock negative position.
-//!				Uses API elements: Lock(), Unlock(), Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2204.txt", EFileWrite, open file as fileOne.
-//!				3. Lock the file by Calling Lock() with -1 for pos and 1 for length.
-//!				4. Close file.
-//!				5. Delete file.
-//!				6. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No error returned or panic raised. 
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2204-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2204-001-Write_command006
-		COMMAND	    file	Lock		PBASE-F32-File-PublicApi-2204-001-Lock_command007
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2204-001-Delete_command010
-		COMMAND		RFs1	~	
-END_TEST_BLOCK		
-END_TESTCASE 		PBASE-F32-File-PublicApi-2204
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2205
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2205
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Lock() neg. test - try to write to locked file.
-//!				Uses API elements: Lock(), Unlock(), Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2205.txt", EFileWrite, open file as file1.
-//!				3. Call RFile::Open passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2205.txt", EFileWrite | EFileShareAny, open file as file2.
-//!				4. Write "test" to file through file1.
-//!				5. Lock the file by Calling Lock() with 6 for pos and 4 for length, through file1
-//!				6. Write "Trying to write to locked region" through new handle
-//!				7. Close file.
-//!				8. Close second handle
-//!				9. Delete file.
-//!				10. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	trying to write to locked file returns KErrLocked
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFile	file2
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-2205-001-Replace_command005
-		COMMAND			file2	new		
-		COMMAND			file2	Open		PBASE-F32-File-PublicApi-2205-001-Open_command008
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-2205-001-Write_command010
-		COMMAND			file	Lock		PBASE-F32-File-PublicApi-2205-001-Lock_command011
-		COMMAND	!Error=-22	file2	Write		PBASE-F32-File-PublicApi-2205-001-Write_command013
-		COMMAND			file2	Close		
-		COMMAND			file2	~		
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-2205-001-Delete_command020
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-2205
-
-//
-// UnLock
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2301
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2301
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function UnLock() neg. test - open a file try to unlock a region that has not been locked.
-//!				
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2301.txt", EFileWrite.
-//!				3. write "test data" to file.
-//!				4. call UnLock with position 2 and with length 4
-//!				5. close file
-//!				6. Delete file.
-//!				7. close fs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	UnLock() returns KErrNotFound.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-2301-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-2301-001-Write_command006
-		COMMAND	!Error=-1	file	UnLock		PBASE-F32-File-PublicApi-2301-001-UnLock_command007
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-2301-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-2301
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2302
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2302
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function UnLock() neg. test - open a file lock some part, try to unlock a portion of the locked region.
-//!				
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2302.txt", EFileWrite.
-//!				3. Write some data to file.
-//!				4. Lock the file by Calling Lock() with pos 0 and length 2.
-//!				5. UnLock a portion of that file with posi 0 and length 1.	
-//!				6. Close that file.
-//!				7. Delete file.
-//!				8. close fs session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	UnLock() returns KErrNotFound.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-2302-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-2302-001-Write_command006
-		COMMAND			file	Lock		PBASE-F32-File-PublicApi-2302-001-Lock_command007
-		COMMAND	!Error=-1	file	UnLock		PBASE-F32-File-PublicApi-2302-001-Close_command008
-		COMMAND			file	Close	
-		COMMAND			file	~			
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-2302-001-Delete_command014
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-2302
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2303
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2303
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function UnLock() neg. test - UnLock a region with negative length
-//!				
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2303.txt", EFileWrite.
-//!				3. Write some data to file.
-//!				4. Call Lock with pos 2, length 2.
-//!				5. UnLock by calling 2 for position -2 for length.	
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	UnLock() causes FSCLIENT:18.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2303-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2303-001-Write_command006
-		COMMAND		file	Lock		PBASE-F32-File-PublicApi-2303-001-Lock_command007
-		COMMAND		file	UnLock		PBASE-F32-File-PublicApi-2303-001-UnLock_command008
-END_TEST_BLOCK	!PanicCode=18 !PanicString="FSCLIENT"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2303-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2303
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2304
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2304
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function UnLock() neg. test - UnLock a region with negative position
-//!				
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2304.txt", EFileWrite.
-//!				3. Write some data to file.
-//!				4. Call Lock with pos 2, length 2.
-//!				5. UnLock by calling -2 for position 2 for length.	
-//!				6. Close that file.
-//!				7. Delete file.
-//!				8. close fs session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::UnLock() causes FSCLIENT:19.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-2304-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-2304-001-Write_command006
-		COMMAND			file	Lock		PBASE-F32-File-PublicApi-2304-001-Lock_command007
-		COMMAND         file	UnLock		PBASE-F32-File-PublicApi-2304-001-UnLock_command008
-END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		    RFs1	new
-		COMMAND		    RFs1	Connect
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-2304-001-Delete_command012
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-2304
-
-
-//
-// Seek
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2401
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2401
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Seek() neg. test - try to seek to negative position.
-//!				
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2401.txt", EFileWrite.
-//!				3. Write "Seek test" to file.
-//!				4. Call RFile::Seek() passing ESeekStart, -10.
-//!				5. Close file.
-//!				6. Delete file.
-//!				7. Close fs session.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Seek returns KErrArgument.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-2401-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-2401-001-Write_command006
-		COMMAND	!Error=-6	file	Seek		PBASE-F32-File-PublicApi-2401-001-Seek_command007
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-2401-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-2401
-
-
-//
-// Flush
-//
-
-
-
-
-//
-// Size
-//
-
-
-
-
-//
-// SetSize
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2701
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2701
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function SetSize() neg test - try to pass a negative size.
-//!				
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2701.txt", EFileWrite.
-//!				3. Write "test" to file.
-//!				3. Call SetSize with -2.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic - FSCLIENT:20
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2701-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2701-001-Write_command006
-		COMMAND		file	SetSize		PBASE-F32-File-PublicApi-2701-001-SetSize_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2701-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=20 !PanicString="FSCLIENT"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2701-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2701
-
-
-//
-// Att
-//
-
-
-
-//
-// SetAtt 
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-2901
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-2901
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function SetAtt neg. test - set same attribute on both bitmasks.
-//!				Uses API elements: Att().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc2901.txt", EFileWrite.
-//!				3. Write "test" to file.
-//!				4. Call RFile::SetAtt, passing KEntryAttNormal, KEntryAttNormal
-//!				
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic FSCLIENT:21 at step 3.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-2901-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-2901-001-Write_command006
-		COMMAND		file	SetAtt		PBASE-F32-File-PublicApi-2901-001-SetAtt_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2901-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=21 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-2901-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-2901
-
-
-//
-// Modified 
-//
-
-
-
-//
-// SetModified
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-3101
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-3101
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function SetModified neg. test - open file for reading and set it's date.
-//!				Uses API elements: Modified(), SetModified().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc3101.txt", EFileWrite.
-//!				3. Write "test" to file
-//!				4. Call RFile::SetModified. 
-//!				5. Close file.
-//!				6. Delete file.
-//!				7. Close fs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::SetModified returns KErrAccessDenied.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-3101-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-3101-001-Write_command006
-		COMMAND			file	Close		
-		COMMAND			file	Open		PBASE-F32-File-PublicApi-3101-001-Open_command008
-		COMMAND	!Error=-21	file	SetModified		PBASE-F32-File-PublicApi-3101-001-SetModified_command009
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-3101-001-Delete_command013
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-3101
-
-
-//
-// ChangeMode
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-5501
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-5501
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function ChangeMode() neg. test - call ChangeMode with value outside of set (EFileShareExclusive, EFileShareReadersOnly).
-//!				Uses API elements: SetModified().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc5501.txt", EFileShareExclusive.
-//!				3. Write "test" to file.
-//!				4. Call RFile::ChangeMode() passing it EFileWrite.
-//!				5. Close RFile.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::ChangeMode() returns KErrArgument. 
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-5501-001-Replace_command005
-		COMMAND			file	Write		PBASE-F32-File-PublicApi-5501-001-Write_command006
-		COMMAND	!Error=-6	file	ChangeMode		PBASE-F32-File-PublicApi-5501-001-ChangeMode_command007
-		COMMAND			file	Close		
-		COMMAND			file	~		
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-5501-001-Delete_command011
-		COMMAND			RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-5501
-
-//
-// Set
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-3201
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-3201
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Set() neg. test - try to clear and set the same attribute.
-//!				Uses API elements: Set(), Modified(), Att().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc3201.txt", EFileShareAny.
-//!				3. Call RFile::Set() passing it 20070118:, KEntryAttReadOnly, KEntryAttReadOnly.
-//!				4. Close file
-//!				5. Delete file.
-//!				6. Close Fs session
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Panic - FSCLIENT:21.
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-3201-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-3201-001-Write_command006
-		COMMAND		file	Set		PBASE-F32-File-PublicApi-3201-001-Set_command007
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	!PanicCode=21 !PanicString="FSCLIENT panic"
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-3201-001-Delete_command011
-		COMMAND		RFs1	~
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-3201
-
-
-
-//
-// Rename 
-//
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-3401
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-3401
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function Rename() neg. test - open file in read mode and try to rename it.
-//!				Uses API elements: RFile::Rename().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc3401.txt", EFileRead.
-//!				3. Write "test" to file.
-//!				4. Call RFile::Rename() passing it string literal "test_renamed.txt".
-//!				5. Close RFile.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Rename() returns KErrAccessDenied.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini
-   		CREATE_OBJECT	RFs	RFs1
-   		CREATE_OBJECT	RFile	file
-   		COMMAND			RFs1	new		
-   		COMMAND			RFs1	Connect		
-   		COMMAND			file	new		
-   		COMMAND			file	Replace		PBASE-F32-File-PublicApi-3401-001-Replace_command005
-   		COMMAND			file	Write		PBASE-F32-File-PublicApi-3401-001-Write_command006
-   		COMMAND			file	Close		
-   		COMMAND			file	Open		PBASE-F32-File-PublicApi-3401-001-Open_command008
-   		COMMAND	!Error=-21	file	Rename		PBASE-F32-File-PublicApi-3401-001-Rename_command009
-   		COMMAND			file	Close		
-   		COMMAND			file	~	
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-3401-001-Delete_command12
-   		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-
-END_TESTCASE 		PBASE-F32-File-PublicApi-3401
-
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-3402
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-3402
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function BlockMap() negative test, replace a file and then call BlockMap on it.
-//!				Uses API elements: Open(), BlockMap().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace() passing RFs, literal "{Drives, RAMDriveTestPath}file\tc3402.txt", EFileRead. 
-//!				4. Call RFile::BlockMap().
-//!				5. Close RFile.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	BlockMap returns KErrNotSupported.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-3402-001-Replace_command003
-		COMMAND	!Error=-5	file	BlockMap
-		COMMAND			file	Close		
-		COMMAND			file	~	
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-3402-001-Delete_command007
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-3402
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-3403
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-3403
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Function BlockMap() negative test. Call BlockMap with Usage ETestDebug
-//!				Uses API elements: Open(), BlockMap().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace() to create file tc3403 with EFileWrite 
-//!				4. Call RFile::BlockMap() passing ETestDebug for usage, 0 for startPos.
-//!				5. Close RFile.
-//!				6. Delete file.
-//!				7. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	BlockMap returns KErrNotSupported.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			file	new		
-		COMMAND			file	Replace		PBASE-F32-File-PublicApi-3403-001-Replace_command003
-		COMMAND	!Error=-5	file	BlockMap	PBASE-F32-File-PublicApi-3403-001-BlockMap_command004
-		COMMAND			file	Close		
-		COMMAND			file	~	
-		COMMAND			RFs1	Delete		PBASE-F32-File-PublicApi-3403-001-Delete_command007
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-3403
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-3501
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-3501
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read(TDes8 &aDes, TInt aLength, TRequestStatus &aStatus) test. Pass 0 for length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc3501.txt", EFileWrite.
-//!				3. Call RFile::Write passing literal "Asynchronous read with length test"
-//!				4. Reset file position
-//!				4. Create TRequestStatus variable.
-//!				5. Call RFile::Read() passing TRequestStatus and 0 for length.
-//!				6. Wait until asynchronous call completes
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns empty descriptor
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-3501-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-3501-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-3501-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-3501-001-Read_command008
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-3501-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-3501
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-3502
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-3502
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Synchronous Read(TInt aPos, TDes8 &aDes, TInt aLength) test. Pass 0 for length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc3502.txt", EFileWrite
-//!				3. Write "synchronous read with length and position test" to file
-//!				4. Reset file position.
-//!				5. Call RFile::Read() passing 0 for  length and 5 for position.
-//!				6. Close RFile.
-//!				7. Delete file.
-//!				8. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns empty descriptor
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-3502-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-3502-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-3502-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-3502-001-Read_command008
-		COMMAND		file	Close		
-		COMMAND		file	~		
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-3502-001-Delete_command012
-		COMMAND		RFs1	~		
-END_TEST_BLOCK	
-END_TESTCASE 		PBASE-F32-File-PublicApi-3502
-
-
-START_TESTCASE 			PBASE-F32-File-PublicApi-3503
-//! @SYMTestCaseID		PBASE-F32-File-PublicApi-3503
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Asynchronous Read(TInt aPos, TDes8 &aDes, TInt aLength, TRequestStatus &aStatus) test. Pass 0 for length.
-//!				Uses API elements: Read().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Call RFile::Replace passing RFs, literal "{Drives, RAMDriveTestPath}file\tc3503.txt", EFileWrite.
-//!				3. Call RFile::Write passing literal "asynchronous read with length and position test"
-//!				4. Reset file position
-//!				5. Call RFile::Read() passing TRequestStatus, 0 for length and 5 for position.
-//!				6. Wait until asynchronous call completes
-//!				7. Close RFile.
-//!				8. Delete file.
-//!				9. Close RFs.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFile::Read() returns empty descriptor
-//!
-//! @SYMTestType		CIT
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	file
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		file	new		
-		COMMAND		file	Replace		PBASE-F32-File-PublicApi-3503-001-Replace_command005
-		COMMAND		file	Write		PBASE-F32-File-PublicApi-3503-001-Write_command006
-		COMMAND		file	Seek		PBASE-F32-File-PublicApi-3503-001-Seek_command007
-		COMMAND		file	Read		PBASE-F32-File-PublicApi-3503-001-Read_command008
-		OUTSTANDING
-		COMMAND		file	Close		
-		COMMAND		file	~	
-		COMMAND		RFs1	Delete		PBASE-F32-File-PublicApi-3503-001-Delete_command011
-		COMMAND		RFs1	~		
-END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-PublicApi-3503
-
-START_TESTCASE 			PBASE-F32-File-Uninstall
-//! @SYMTestCaseID		PBASE-F32-File-Uninstall
-//! @SYMAPI			RFile
-//! @SYMTestCaseDesc		Cleanup the directories created to test RFile
-//! @SYMTestActions		1. Create RFs Session.
-//!                     2. Remove the directories created using Rfs::RmDir().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	 Removes the directory created and keeps the environment clean.
-//!
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-File-PublicApi.ini
-   		CREATE_OBJECT	RFs	RFs1
-   		COMMAND			RFs1	new		
-   		COMMAND			RFs1	Connect		
-			COMMAND			RFs1	RmDir		PBASE-F32-File-PublicApi-Unistall
-   		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 		PBASE-F32-File-Uninstall
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FileMan-PublicApi-OS.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FileMan-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5202 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	CFileMan *NewL(RFs &aFs)
-//!	CFileMan *NewL(RFs &aFs, MFileManObserver *anObserver)
-//!	TAction CurrentAction()
-//!	void GetCurrentTarget(TFileName &aFile)
-//!	void GetCurrentSource(TFileName &aFile)
-//!	TInt BytesTransferredByCopyStep()
-//!	TInt Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!	TInt Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!	TInt Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite)
-//!	TInt Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus)
-//!	TInt Delete(const TDesC &aName, TUint aSwitch=0)
-//!	TInt Delete(const TDesC &aName, TUint aSwitch, TRequestStatus &aStatus)
-//!	TInt Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite)
-//!	TInt Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus)
-//!	TInt Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite)
-//!	TInt Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus)
-//!	TInt RmDir(const TDesC &aDirName)
-//!	TInt RmDir(const TDesC &aDirName, TRequestStatus &aStatus)
-//!	TInt Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches=EOverWrite)
-//!	TInt Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches, TRequestStatus &aStatus)
-//!	void SetObserver(MFileManObserver *anObserver)
-//!	const TEntry &CurrentEntry()
-//!	TPtrC AbbreviatedPath()
-//!	TPtrC FullPath()
-//!	TInt GetLastError()
-//!	TFileManError GetMoreInfoAboutError()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2000
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2000
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Setup the environent to Test CFileMan by copying the testdata.
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!             3.Call CFileMan::Copy() to copy the testdata file required for further tests.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	TestDatas copied to particular directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll 	PBASE-F32-FileMan-PublicApi-MkDirAll-Install
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-Copy-Install
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2000
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2001
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2001
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Constructor NewL(RFs &aFs) test.
-//! 				Uses API elements: NewL();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	CFileMan object is not NULL.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL	
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2001
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2002
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2002
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Constructor NewL(RFs &aFs, MFileManObserver *anObserver) test.
-//! 				Uses API elements: NewL();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs, MFileManObserver *anObserver) and connected file server session as first parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	CFileMan object is not NULL.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-2002-001-NewL_command004		
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2002
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2003
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2003
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function CurrentAction() test.
-//!											Gets action during copy process.
-//! 				Uses API elements: NewL(), CurrentAction();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::CurrentAction().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	CurrentAction() returns ECopy.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy					PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	CurrentAction	PBASE-F32-FileMan-PublicApi-2003-001-CurrentAction_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2003-001-Delete_command009
-		COMMAND		RFs1		RmDir						PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2003
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2004
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2004
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function GetCurrentTarget(TFileName &aFile) test.
-//!											Gets file target path during copy process.
-//! 				Uses API elements: NewL(), GetCurrentTarget(), SetObserver(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::GetCurrentTarget(TFileName &aFile).
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	GetCurrentTarget() returns {TestPath}fileman\Copy\Test3.txt.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy					PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	GetCurrentTarget	PBASE-F32-FileMan-PublicApi-2004-001-GetCurrentTarget_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2004-001-Delete_command009
-		COMMAND		RFs1		RmDir						PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2004
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2005
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2005
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function GetCurrentSource(TFileName &aFile) test.
-//!											Gets file source path during copy process.
-//! 				Uses API elements: NewL(), GetCurrentSource(), SetObserver(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::GetCurrentSource(TFileName &aFile).
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	GetCurrentSource() returns {TestPath}fileman\Test3.txt.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir					PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver		
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	GetCurrentSource	PBASE-F32-FileMan-PublicApi-2005-001-GetCurrentSource_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2005-001-Delete_command009
-		COMMAND		RFs1		RmDir						PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2005
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2006
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2006
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function BytesTransferredByCopyStep() test.
-//!											Gets the number of bytes transferred during a copy process.
-//! 				Uses API elements: NewL(), SetObserver(), BytesTransferredByCopyStep(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::BytesTransferredByCopyStep().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	BytesTransferredByCopyStep() returns actual size of copyed file "51192".
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir					PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	BytesTransferredByCopyStep	PBASE-F32-FileMan-PublicApi-2006-001-BytesTransferredByCopyStep_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2006-001-Delete_command009
-		COMMAND		RFs1		RmDir						PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2006
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2007
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2007
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0) test.
-//!											Sets file attributes synchronously to read-only.
-//! 				Uses API elements: NewL(), Attribs();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call RFs::Att() to check that file has KEntryAttNormal as attribute.
-//!				4.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttReadOnly as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter.
-//!				5.Call RFs::Att() to check that attribute was set to KEntryAttReadOnly
-//!				6.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter.
-//!				7.Call RFs::Att() to check that file have KEntryAttNormal as attribute.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Attribs() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		RFs1	Att		PBASE-F32-FileMan-PublicApi-2007-001-Att_command005
-		COMMAND		CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2007-001-Attribs_command006
-		COMMAND		RFs1	Att		PBASE-F32-FileMan-PublicApi-2007-001-Att_command007
-		COMMAND		CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2007-001-Attribs_command008
-		COMMAND		RFs1	Att		PBASE-F32-FileMan-PublicApi-2007-001-Att_command009
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2007
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2008
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2008
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus) test.
-//!											Sets file attributes asynchronously to read-only.
-//! 				Uses API elements: NewL(), Attribs();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call RFs::Att() to check that file has KEntryAttNormal as attribute.
-//!				4.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttReadOnly as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter
-//!				  and iStatus as fourth parameter.
-//!				5.Call RFs::Att() to check that attribute was set to KEntryAttReadOnly
-//!				6.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter
-//!				  and iStatus as fourth parameter.
-//!				7.Call RFs::Att() to check that file have KEntryAttNormal as attribute.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Attribs() returns KErrNone and second Attrib returns KErrInUse
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		RFs1	Att	PBASE-F32-FileMan-PublicApi-2008-001-Att_command005
-		COMMAND		CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2008-001-Attribs_command006
-		OUTSTANDING
-		COMMAND		RFs1	Att	PBASE-F32-FileMan-PublicApi-2008-001-Att_command007
-		COMMAND		CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2008-001-Attribs_command008
-    COMMAND !Error=-14	CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2008-001-Attribs_command008
-		OUTSTANDING
-		COMMAND		RFs1	Att	PBASE-F32-FileMan-PublicApi-2008-001-Att_command009
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2008
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2009
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2009
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Sets file attributes synchronously to normal and copies file synchronously from one directory to another.
-//! 				Uses API elements: NewL(), Attribs(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!			     	  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::EOverWrite as fifth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile		RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir			PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2009-001-Copy_command006
-		COMMAND		RFile1	Open		PBASE-F32-FileMan-PublicApi-2009-001-Open_command007
-		COMMAND		RFile1  Close
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2009-001-Delete_command008
-		COMMAND		RFs1			RmDir			PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2009
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2010
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2010
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) test.
-//!											Sets file attributes synchronously to normal and copies file asynchronously from one directory to another.
-//! 				Uses API elements: NewL(), Attribs(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, and TTime(0) as fourth parameter, 
-//!				  and CFileMan::EOverWrite as fifth parameter, 
-//!				  and iStatus as sixth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir			PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy			PBASE-F32-FileMan-PublicApi-2010-001-Copy_command006
-		OUTSTANDING
-		COMMAND		RFile1		Open			PBASE-F32-FileMan-PublicApi-2010-001-Open_command007
-		COMMAND		RFile1  	Close
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2010-001-Delete_command008
-		OUTSTANDING
-		COMMAND		RFs1			RmDir			PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2010
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2011
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2011
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Delete(const TDesC &aName, TUint aSwitch=0) test.
-//!											Copies file asynchronously from one directory to another and deletes synchronously copied file.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), and {TestPath}fileman\Test1.txt as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Delete() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy			PBASE-F32-FileMan-PublicApi-2011-001-Copy_command006
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2011-001-Delete_command007
-		COMMAND	!Error=-1	RFile1		Open		PBASE-F32-FileMan-PublicApi-2011-001-Open_command008
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFile1			~
-		COMMAND		CFileMan1		~
-		COMMAND		RFs1				~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2011
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2012
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2012
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Delete(const TDesC &aName, TUint aSwitch=0, TRequestStatus &aStatus) test.
-//!											Copies file asynchronously from one directory to another and deletes asynchronously copied file.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and iStatus as last parameter.
-//!				4.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and CFileMan::EOverWrite as second parameter,
-//!				 	and iStatus as third parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Delete() returns KErrNone and second delete returns KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new		
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir			PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy			PBASE-F32-FileMan-PublicApi-2012-001-Copy_command006
-		OUTSTANDING
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2012-001-Delete_command007
-		COMMAND !Error=-14	CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2012-001-Delete_command007
-		OUTSTANDING
-		COMMAND	!Error=-1 	RFile1	Open		PBASE-F32-FileMan-PublicApi-2012-001-Open_command008
-		COMMAND		RFs1			RmDir			PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1	~
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2012
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2013
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2013
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Moves file synchronously from one directory to another.
-//! 				Uses API elements: NewL(), Move();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).	
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).	
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter.	
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir			PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2013-001-Move_command006
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2013-001-Open_command007
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2013-001-Move_command008
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2013-001-Open_command009
-		COMMAND		RFile1		Close
-		COMMAND		RFs1			RmDir		PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2013
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2014
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2014
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) test.
-//!											Moves file asynchronously from one directory to another.
-//! 				Uses API elements: NewL(), Move();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as fourth parameter.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as fourth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir		PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL	PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2014-001-Move_command006
-		OUTSTANDING
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2014-001-Open_command007
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2014-001-Move_command008
-		OUTSTANDING
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2014-001-Open_command009
-		COMMAND		RFile1		Close
-		COMMAND		RFs1			RmDir		PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFile1		~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2014
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2015
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2015
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Renames file name synchronously.
-//! 				Uses API elements: NewL(), Rename();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Renamed.txt as second parameter.
-//!				4.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Renamed.txt as first parameter, 
-//!				  and {TestPath}fileman\Test1.txt as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Rename() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2015-001-Rename_command005
-		COMMAND		RFile1		Open			PBASE-F32-FileMan-PublicApi-2015-001-Open_command006
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2015-001-Rename_command007
-		COMMAND		RFile1		Open			PBASE-F32-FileMan-PublicApi-2015-001-Open_command008
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2015
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2016
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2016
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) test.
-//!											Renames file name asynchronously.
-//! 				Uses API elements: NewL(), Rename();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Renamed.txt as first parameter, 
-//!				  and {TestPath}fileman\Test1.txt as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as last parameter.
-//!				4.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Renamed.txt as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Rename() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new
-		COMMAND		RFs1		Connect
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2016-001-Rename_command005
-		OUTSTANDING
-		COMMAND		RFile1		Open			PBASE-F32-FileMan-PublicApi-2016-001-Open_command006
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2016-001-Rename_command007
-		OUTSTANDING
-		COMMAND		RFile1		Open			PBASE-F32-FileMan-PublicApi-2016-001-Open_command008
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2016
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2017
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2017
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName) test.
-//!											Test removes newly created directory synchronously.
-//! 				Uses API elements: NewL(), RmDir();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDir(), and {TestPath}fileman\Removable\ as parameter.
-//!				3.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				4.Call CFileMan::RmDir(const TDesC &aDirName) and {TestPath}fileman\Removable\ as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RmDir() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs			RFs1
-		CREATE_OBJECT	RDir		RDir1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new		
-		COMMAND		RFs1			Connect		
-		COMMAND		RFs1			MkDir			PBASE-F32-FileMan-PublicApi-2017-001-MkDir_command004
-		COMMAND		RDir1			new
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		RDir1			Open		PBASE-F32-FileMan-PublicApi-2017-001-Open_command006
-		COMMAND		RDir1			Close
-		COMMAND		CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2017-001-RmDir_command007
-		COMMAND	!Error=-12		RDir1			Open		PBASE-F32-FileMan-PublicApi-2017-001-Open_command008
-		COMMAND		CFileMan1	~
-		COMMAND		RDir1			~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2017
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2018
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2018
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName, TRequestStatus &aStatus) test.
-//!											Test removes newly created directory asynchronously.
-//! 				Uses API elements: NewL(), RmDir();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::MkDir(), and {TestPath}fileman\Removable\ as parameter.
-//!				3.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				4.Call CFileMan::RmDir(const TDesC &aDirName, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Removable\ as first parameter, 
-//!				  and iStatus as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	1st RmDir returns KErrNone and Second call returns KErrInUse
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RDir			RDir1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect		
-		COMMAND		RFs1			MkDir			PBASE-F32-FileMan-PublicApi-2018-001-MkDir_command004
-		COMMAND		RDir1			new
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		RDir1			Open		PBASE-F32-FileMan-PublicApi-2018-001-Open_command006
-		COMMAND		RDir1			Close
-		COMMAND		CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2018-001-RmDir_command007
-		COMMAND	!Error=-14	CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2018-001-RmDir_command007
-		OUTSTANDING
-		COMMAND	!Error=-12	RDir1			Open		PBASE-F32-FileMan-PublicApi-2018-001-Open_command008
-		COMMAND		CFileMan1	~
-		COMMAND		RDir1			~			
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2018
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2019
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2019
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches=EOverWrite) test.
-//!											Opens file then copies file content to another file synchronously.
-//! 				Uses API elements: NewL(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call RFile::Open() to open file.
-//!				4.Call CFileMan::Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches=EOverWrite),
-//!				  and RFile object as first object, 
-//!				  and {TestPath}fileman\Test1_RFs.txt as second parameter.				
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0),
-//!				  and {TestPath}fileman\Test1_RFs.txt as first parameter,
-//!				  and 0 as second parameter.
-//!				6.RFs::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	RFile		RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFile1		new
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2019-001-Open_command006
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2019-001-Copy_command008
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2019-001-Open_command009
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Delete	PBASE-F32-FileMan-PublicApi-2019-001-Delete_command010
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		Close
-		COMMAND		RFile1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2019
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2020
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2020
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches, TRequestStatus &aStatus) test.
-//!											Opens file then copies file content to another file asynchronously.
-//! 				Uses API elements: NewL(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call RFile::Open() to open file.
-//!				4.Call CFileMan::Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches, TRequestStatus &aStatus),
-//!				  and RFile object as first object, 
-//!				  and {TestPath}fileman\Test1_RFs.txt as second parameter,
-//!				  and iStatus as last parameter.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0),
-//!				  and {TestPath}fileman\Test1_RFs.txt as first parameter,
-//!				  and 0 as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	1st Copy() returns KErrNone and second returns KErrInUse
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	RFile		RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFile1		new
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2020-001-Open_command006
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2020-001-Copy_command008
-		COMMAND   !Error=-14	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2020-001-Copy_command008
-		OUTSTANDING
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2020-001-Open_command009
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2020-001-Delete_command010
-		COMMAND		CFileMan1	~		
-		COMMAND		RFile1		Close
-		COMMAND		RFile1		~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2020
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2021
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2021
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function SetObserver(MFileManObserver *anObserver) test.
-//!											Sets observer.
-//! 				Uses API elements: NewL(), SetObserver();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	No Panic and Error code returned.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver		
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2021
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2022
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2022
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function CurrentEntry() test.
-//!											Gets the entry currently being copied.
-//! 				Uses API elements: NewL(), SetObserver(), CurrentEntry(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::CurrentEntry().
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\Test3.txt as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	CurrentEntry() returns TEntry in which iName is "Test3.txt".
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir					PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy					PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	CurrentEntry	PBASE-F32-FileMan-PublicApi-2022-001-CurrentEntry_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2022-001-Delete_command009
-		COMMAND		RFs1		RmDir						PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1			~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2022
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2023
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2023
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function AbbreviatedPath() test.
-//!											Gets the abbreviated path of the file currently being copied.
-//! 				Uses API elements: NewL(), SetObserver(), AbbreviatedPath(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::AbbreviatedPath().
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\Test3.txt as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AbbreviatedPath() returns \.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy			PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	AbbreviatedPath	PBASE-F32-FileMan-PublicApi-2023-001-AbbreviatedPath_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2023-001-Delete_command009
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2023
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2024
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2024
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function FullPath() test.
-//!											Gets the full path of the file currently being copied.
-//! 				Uses API elements: NewL(), SetObserver(), FullPath(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::FullPath().
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\Test3.txt as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	FullPath() returns {TestPath}fileman\.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy			PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	FullPath	PBASE-F32-FileMan-PublicApi-2024-001-FullPath_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2024-001-Delete_command009
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2024
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2025
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2025
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function GetLastError() test.
-//!											Gets the latest error code returned during copy process
-//! 				Uses API elements: NewL(), SetObserver(), GetLastError(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::GetLastError().
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\Test3.txt as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	GetLastError() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir						PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL					PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy					PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	GetLastError	PBASE-F32-FileMan-PublicApi-2025-001-GetLastError_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2025-001-Delete_command009
-		COMMAND		RFs1		RmDir						PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2025
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2026
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2026
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function GetMoreInfoAboutError() test.
-//!											Gets additional information about the latest error returned during copy process
-//! 				Uses API elements: NewL(), SetObserver(), GetMoreInfoAboutError(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::SetObserver().
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//!				5.Call CFileMan::GetMoreInfoAboutError().
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\Test3.txt as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	GetMoreInfoAboutError() returns ENoExtraInformation.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy			PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	GetMoreInfoAboutError	PBASE-F32-FileMan-PublicApi-2026-001-GetMoreInfoAboutError_command008
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2026-001-Delete_command009
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2026
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2027
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2027
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Copy() test.
-//!											Copy File from one drive to another (RAM Drive).
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}Test3.txt as first parameter, 
-//!				  and {RamDrive}fileman\Copy\ as second parameter.
-//!				4.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {RamDrive}fileman\Copy\Test3.txt as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	File successfully copied from one drive to another.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll				PBASE-F32-FileMan-PublicApi-2027-001-MkDirAll_command004
-		COMMAND		RFile1	new
-		COMMAND		CFileMan1	NewL			PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy	PBASE-F32-FileMan-PublicApi-2027-001-Copy_command006
-		COMMAND		RFile1		Open	PBASE-F32-FileMan-PublicApi-2027-001-Open_command007
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2027-001-Delete_command008
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-2027-001-RmDir_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1	~
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2027
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2028
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2028
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Copy file with ReadOnly and Hidden atributes and check that the copied file have the same attributes.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttReadOnly|KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!				6.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly|KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				7.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\Test1.txt as parameter.
-//!				8.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly|KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File attributes unchanged after Copy().
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile		RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2028-001-Att_command006
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2028-001-Attribs_command007
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2028-001-Att_command008
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND		RFile1		Open				PBASE-F32-FileMan-PublicApi-2028-001-Open_command010
-		COMMAND		RFile1		Close
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2028-001-Att_command011
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2028-001-Attribs_command012
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2028-001-Delete_command013
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2028-001-Attribs_command014
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~		
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2028
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2029
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2029
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Set KEntryAttHidden attribute non recursivly and recursivly and then check that is was set correctly.
-//! 				Uses API elements: NewL(), Attribs(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test3.txt as second parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test\Test1.txt as second parameter.
-//!				5.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				6.Check that only for Test1.txt attribute was set.
-//!				7.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				8.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and ERecurse as fifth parameter.
-//!				9.Check that KEntryAttHidden was set for Test1.txt and for Test3.txt.
-//!				10.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and ERecurse as fifth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	All attributes are set correctly.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_Copy-Test
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2029-001-Copy_command002
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2029-001-Attribs_command003
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2029-001-Att_command004
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2029-001-Att_command005
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2029-001-Attribs_command006
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2029-001-Attribs_command007
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2029-001-Att_command008
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2029-001-Att_command009
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2029-001-Attribs_command010
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2029-001-Delete_command011
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_Copy-Test
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2029
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2030
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2030
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Set KEntryAttHidden attribute non recursivly and recursivly and then check that is was set correctly.
-//! 				Uses API elements: NewL(), Attribs(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test3.txt as second parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test\Test1.txt as second parameter.
-//!				5.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!					and iStatus.
-//!				6.Check that only for Test1.txt attribute was set.
-//!				7.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!					and iStatus.
-//!				8.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and ERecurse as fifth parameter.
-//!					and iStatus.
-//!				8.Check that KEntryAttHidden was set for Test1.txt and for Test3.txt.
-//!				10.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and ERecurse as fifth parameter.
-//!					and iStatus.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	All attributes are set correctly.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_Copy-Test
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2030-001-Copy_command002
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2030-001-Attribs_command003
-				OUTSTANDING
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2030-001-Att_command004
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2030-001-Att_command005
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2030-001-Attribs_command006
-				OUTSTANDING
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2030-001-Attribs_command007
-				OUTSTANDING
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2030-001-Att_command008
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2030-001-Att_command009
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2030-001-Attribs_command010
-				OUTSTANDING
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2030-001-Delete_command011
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_Copy-Test
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2030
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2031
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2031
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Copy files using aSwitch=0 and aSwitch=ERecursive.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\ as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter.
-//!					and aSwitch=ERecurse.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() return KErrPathNotFound when non recursive copy.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2031-001-Copy_command002
-		COMMAND !Error=-12		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2031-001-Copy_command003
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2031-001-Copy_command004
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2031-001-Delete_command005
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2031-001-Delete_command006
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2031-001-RmDir_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2031
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2032
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2032
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Copy files using aSwitch=0 and aSwitch=ERecursive.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\ as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!				  and iStatus as parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=0,
-//!				  and iStatus as parameter.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter.
-//!					and aSwitch=ERecurse,
-//!				  and iStatus as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() return KErrPathNotFound when non recursive copy.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2032-001-Copy_command002
-				OUTSTANDING
-		COMMAND !AsyncError=-12		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2032-001-Copy_command003
-				OUTSTANDING
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2032-001-Copy_command004
-				OUTSTANDING
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2032-001-Delete_command005
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2032-001-Delete_command006
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2032-001-RmDir_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2032
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2033
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2033
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Move files using aSwitch=0 and aSwitch=ERecursive.
-//! 				Uses API elements: NewL(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\ as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=0.
-//!				5.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter.
-//!					and aSwitch=ERecurse.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() return KErrPathNotFound when non recursive Move.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2033-001-Copy_command002
-		COMMAND !Error=-12		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2033-001-Move_command003
-		COMMAND		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2033-001-Move_command004
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2033-001-Delete_command005
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2033-001-RmDir_command006
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2033
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2034
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2034
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Move files using aSwitch=0 and aSwitch=ERecursive.
-//! 				Uses API elements: NewL(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\ as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!				  and iStatus as parameter.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=0,
-//!				  and iStatus as parameter.
-//!				5.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter.
-//!					and aSwitch=ERecurse,
-//!				  and iStatus as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() return KErrPathNotFound when non recursive Move.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2034-001-Copy_command002
-		COMMAND !AsyncError=-12		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2034-001-Move_command003
-				OUTSTANDING
-		COMMAND		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2034-001-Move_command004
-				OUTSTANDING
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2034-001-Delete_command005
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2034-001-RmDir_command006
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2034
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2035
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2035
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0) test.
-//!											Sets attributes for files(using wildcard) synchronously to read-only.
-//! 				Uses API elements: NewL(), Copy(), Attribs();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				5.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\* as first parameter, 
-//!				  and KEntryAttReadOnly|KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and aSwitch=0 as fifth parameter.
-//!				6.Call RFs::Att() to check that attribute was set for both files (Test1.txt, Test2.txt).
-//!				7.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\* as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly|KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and aSwitch=0 as fifth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Attribs() returns KErrNone and attributes successfuly were changed for both files.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new		
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir		PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND		CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2035-001-Attribs_command007
-		COMMAND		RFs1	Att					PBASE-F32-FileMan-PublicApi-2035-001-Att_command008
-		COMMAND		RFs1	Att					PBASE-F32-FileMan-PublicApi-2035-001-Att_command009
-		COMMAND		CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2035-001-Attribs_command010
-		COMMAND		CFileMan1	Delete	PBASE-F32-FileMan-PublicApi-2035-001-Delete_command011
-		COMMAND		RFs1			RmDir		PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2035
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2036
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2036
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus) test.
-//!											Sets attributes for files(using wildcard) synchronously to read-only.
-//! 				Uses API elements: NewL(), Copy(), Attribs();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				5.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Copy\* as first parameter, 
-//!				  and KEntryAttReadOnly|KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and aSwitch=0 as fifth parameter.
-//!				  and iStatus as fourth parameter.
-//!				6.Call RFs::Att() to check that attribute was set for both files (Test1.txt, Test2.txt).
-//!				7.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Copy\* as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly|KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and aSwitch=0 as fifth parameter.
-//!				  and iStatus as fourth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Attribs() returns KErrNone and attributes successfuly were changed for both files.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new		
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir		PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND		CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2036-001-Attribs_command007
-				OUTSTANDING
-		COMMAND		RFs1	Att					PBASE-F32-FileMan-PublicApi-2036-001-Att_command008
-		COMMAND		RFs1	Att					PBASE-F32-FileMan-PublicApi-2036-001-Att_command009
-		COMMAND		CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2036-001-Attribs_command010
-				OUTSTANDING
-		COMMAND		CFileMan1	Delete	PBASE-F32-FileMan-PublicApi-2036-001-Delete_command011
-		COMMAND		RFs1			RmDir		PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2036
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2037
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2037
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0) test.
-//!											Copy files using wildcard synchronously.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\* as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				4.Check that copied more that one file. Test1.txt and Test2.txt are exists.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Attribs() returns KErrNone and attributes successfuly were changed for both files.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir		PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2037-001-Copy_command005
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2037-001-Open_command006
-		COMMAND		RFile1		Close
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2037-001-Open_command007
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Delete	PBASE-F32-FileMan-PublicApi-2037-001-Delete_command008
-		COMMAND		RFs1			RmDir		PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2037
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2038
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2038
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0, TRequestStatus &aStatus) test.
-//!											Copy files using wildcard asynchronously.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\* as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!					and iStatus.
-//!				4.Check that copied more that one file. Test1.txt and Test2.txt are exists.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Attribs() returns KErrNone and attributes successfuly were changed for both files.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir		PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2038-001-Copy_command005
-				OUTSTANDING
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2038-001-Open_command006
-		COMMAND		RFile1		Close
-		COMMAND		RFile1		Open		PBASE-F32-FileMan-PublicApi-2038-001-Open_command007
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Delete	PBASE-F32-FileMan-PublicApi-2038-001-Delete_command008
-		COMMAND		RFs1			RmDir		PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2038
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2039
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2039
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Move files synchronously using path with trailing slash and without
-//! 				Uses API elements: NewL(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\* as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=ERecurse,
-//!				5.Check that "Copy1" contains files (Test1.txt and Test2.txt) and "Copy" doesn't.
-//!				6.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy1 as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!				7.Check that folder "Copy1" now exists only "\Copy\Copy1\"
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() return KErrPathNotFound when non recursive Move.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	RDir			RDir1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		RDir1			new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2039-001-Copy_command002
-		COMMAND 	CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2039-001-Move_command003
-		COMMAND		RFile1		Open				PBASE-F32-FileMan-PublicApi-2039-001-Open_command004
-		COMMAND		RFile1		Close
-		COMMAND		RFile1		Open				PBASE-F32-FileMan-PublicApi-2039-001-Open_command005
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2039-001-Move_command006
-		COMMAND	!Error=-12	RDir1			Open				PBASE-F32-FileMan-PublicApi-2039-001-Open_command007
-		COMMAND		RDir1			Open				PBASE-F32-FileMan-PublicApi-2039-001-Open_command008
-		COMMAND		RDir1			Close
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2039-001-Delete_command009
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2039-001-RmDir_command010
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFile1		~
-		COMMAND		RDir1			~
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2039
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2040
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2040
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Move files synchronously using path with trailing slash and without
-//! 				Uses API elements: NewL(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\* as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=ERecurse,
-//!				5.Check that "Copy1" contains files (Test1.txt and Test2.txt) and does not contains folder "Copy".
-//!				6.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy1 as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!				7.Check that folder "Copy1" was moved to "\Copy\Copy1\"
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() moves only files if trailing slash exists and whole folder if no trailing slash.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	RDir			RDir1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		RDir1			new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2040-001-Copy_command002
-		COMMAND 	CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2040-001-Move_command003
-				OUTSTANDING
-		COMMAND		RFile1		Open				PBASE-F32-FileMan-PublicApi-2040-001-Open_command004
-		COMMAND		RFile1		Close
-		COMMAND		RFile1		Open				PBASE-F32-FileMan-PublicApi-2040-001-Open_command005
-		COMMAND		RFile1		Close
-		COMMAND	!Error=-12	RDir1			Open				PBASE-F32-FileMan-PublicApi-2040-001-Open_command006
-		COMMAND		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2040-001-Move_command007
-				OUTSTANDING
-		COMMAND	!Error=-12	RDir1			Open				PBASE-F32-FileMan-PublicApi-2040-001-Open_command008
-		COMMAND		RDir1			Open				PBASE-F32-FileMan-PublicApi-2040-001-Open_command009
-		COMMAND		RDir1			Close
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2040-001-Delete_command010
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2040-001-RmDir_command011
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFile1		~
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2040
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2041
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2041
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Synchronously Move files with ReadOnly and Hidden atributes and check that the moved files have the same attributes.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test2.txt as second parameter.
-//!				5.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttReadOnly|KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				6.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch = ERecurse.
-//!				7.Check that files have the same attributes.
-//!				8.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy1\ as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly|KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy1\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File attributes unchanged after Move().
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir		
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_EOverWrite
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_EOverWrite
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2041-001-Attribs_command004
-		COMMAND		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2041-001-Move_command005
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2041-001-Att_command006
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2041-001-Att_command007
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2041-001-Attribs_command008
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2041-001-Delete_command009
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2041-001-RmDir_command010
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2041
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2042
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2042
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Asynchronously Move files with ReadOnly and Hidden atributes and check that the moved files have the same attributes.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test2.txt as second parameter.
-//!				5.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and KEntryAttReadOnly|KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				6.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch = ERecurse,
-//!					and iStatus.
-//!				7.Check that files have the same attributes.
-//!				8.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy1\ as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly|KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy1\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File attributes unchanged after Move().
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir		
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_EOverWrite
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_EOverWrite
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2042-001-Attribs_command004
-		COMMAND		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2042-001-Move_command005
-				OUTSTANDING
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2042-001-Att_command006
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2042-001-Att_command007
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2042-001-Attribs_command008
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2042-001-Delete_command009
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2042-001-RmDir_command010
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2042
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2043
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2043
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch) test.
-//!											Synchronously Rename file with ReadOnly and Hidden atributes and check that the renamed file have the same attributes.
-//! 				Uses API elements: NewL(), Copy(), Rename(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!				5.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and KEntryAttReadOnly|KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				6.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test.txt as second parameter,
-//!					and aSwitch = 0.
-//!				7.Check that files have the same attributes.
-//!				8.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\Test.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly|KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File attributes unchanged after Rename().
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir		
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_EOverWrite
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2043-001-Attribs_command004
-		COMMAND		CFileMan1	Rename			PBASE-F32-FileMan-PublicApi-2043-001-Rename_command005
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2043-001-Att_command006
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2043-001-Attribs_command007
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2043-001-Delete_command008
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2043
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2044
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2044
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) test.
-//!											Asynchronously Rename file with ReadOnly and Hidden atributes and check that the renamed file have the same attributes.
-//! 				Uses API elements: NewL(), Copy(), Rename(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!				5.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and KEntryAttReadOnly|KEntryAttHidden as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				6.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test.txt as second parameter,
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				7.Check that files have the same attributes.
-//!				8.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Copy\Test.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly|KEntryAttHidden as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File attributes unchanged after Rename().
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir		
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_EOverWrite
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2044-001-Attribs_command004
-		COMMAND		CFileMan1	Rename			PBASE-F32-FileMan-PublicApi-2044-001-Rename_command005
-					OUTSTANDING
-		COMMAND		RFs1			Att					PBASE-F32-FileMan-PublicApi-2044-001-Att_command006
-		COMMAND		CFileMan1	Attribs			PBASE-F32-FileMan-PublicApi-2044-001-Attribs_command007
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2044-001-Delete_command008
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2044
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2045
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2045
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Call asynchronous 3 Copy() functions at once.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and Opened RFile handle "{TestPath}fileman\Test1.txt" as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter,
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				4.Call CFileMan::Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and Opened RFile handle "{TestPath}fileman\Test2.txt" as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test2.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				5.Call CFileMan::Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and Opened RFile handle "{TestPath}fileman\Test3.txt" as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test3.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				6.Check that only first file was copied other copy calls return KErrInUse.
-//!				7.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults All files were copied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2045-001-Copy_command002
-		COMMAND !Error=-14 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2045-001-Copy_command003
-		COMMAND !Error=-14 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2045-001-Copy_command004
-					OUTSTANDING
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2045-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND !Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2045-001-Open_command006
-		COMMAND !Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2045-001-Open_command007
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2045-001-Delete_command008
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2045
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2046
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2046
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Call asynchronous 3 Move() functions at once.
-//! 				Uses API elements: NewL(), Cope(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test2.txt as second parameter.
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test3.txt as second parameter.
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Test\Test1.txt as second parameter,
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				7.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Test\Test2.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				8.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Test\Test3.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				9.Check that only first file was moved other Move calls return KErrInUse.
-//!				10.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				11.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults All files were moved.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND 	CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2046-001-Move_command002
-		COMMAND	!Error=-14 	CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2046-001-Move_command003
-		COMMAND	!Error=-14 	CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2046-001-Move_command004
-					OUTSTANDING
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2046-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1		RFile1		Open				PBASE-F32-FileMan-PublicApi-2046-001-Open_command006
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2046-001-Open_command007
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2046-001-Delete_command008
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2046-001-Delete_command009
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		RFile1		~
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2046
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2047
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2047
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Call asynchronous 3 Rename() functions at once.
-//! 				Uses API elements: NewL(), Cope(), Rename(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test2.txt as second parameter.
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test3.txt as second parameter.
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1_new.txt as second parameter,
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				7.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Test\Test2_new.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				8.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Test\Test3_new.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				9.Check that only first file was renamed other Rename calls return KErrInUse.
-//!				10.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults All files were moved.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new					
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND		CFileMan1	Rename			PBASE-F32-FileMan-PublicApi-2047-001-Rename_command002
-		COMMAND	!Error=-14 	CFileMan1	Rename			PBASE-F32-FileMan-PublicApi-2047-001-Rename_command003
-		COMMAND	!Error=-14 	CFileMan1	Rename			PBASE-F32-FileMan-PublicApi-2047-001-Rename_command004
-					OUTSTANDING
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2047-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2047-001-Open_command006
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2047-001-Open_command007
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2047-001-Delete_command008
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFile1		~
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2047
-
-
-
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-//////								//////
-//////		 ///////////////////////////////////		//////
-//////		 ///				 ///		//////
-//////		 ///	  NEGATIVE TESTS	 ///		//////
-//////		 ///				 ///		//////	
-//////		 ///////////////////////////////////		//////
-//////								//////
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-//ATTRIBS
-//Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2103
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2103
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0) negative test.
-//!											Try to set attribute KEntryAttDir synchronously for file!
-//!											And then check that it was not set for file
-//! 				Uses API elements: NewL(), Attribs().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and KEntryAttDir as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Attribute	KEntryAttDir wasn't set for file. 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND			CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2103-001-Attribs_command005
-		COMMAND			RFs1			Att			PBASE-F32-FileMan-PublicApi-2103-001-Att_command006
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2103
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2104
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2104
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0) negative test.
-//!											Try to set attributes synchronously with wrong file path!
-//! 				Uses API elements: NewL(), Attribs().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\\\Test2.txt as first parameter, 
-//!				  and KEntryAttReadOnly as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Attribs() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2104-001-Attribs_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2104
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-//ATTRIBS
-//Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2105
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2105
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus) 
-//!											negative test.
-//!											Try to set attribute KEntryAttDir asynchronously for file!
-//!											And then check that it was not set for file
-//! 				Uses API elements: NewL(), Attribs().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttDir as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter, 
-//!				  and iStatus as sixth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Attribute	KEntryAttDir wasn't set for file.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND			CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2105-001-Attribs_command005
-		OUTSTANDING
-		COMMAND			RFs1			Att			PBASE-F32-FileMan-PublicApi-2105-001-Att_command006
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2105
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2106
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2106
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus) 
-//!											negative test.
-//!											Try to set attributes asynchronously with wrong file path!
-//! 				Uses API elements: NewL(), Attribs().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\\\Test2.txt as first parameter, 
-//!				  and KEntryAttReadOnly as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter, 
-//!				  and iStatus as sixth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Attribs() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL								PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2106-001-Attribs_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2106
-
-
-///////////////////////////////////////////////////////////////////////
-//
-//COPY
-//Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite)
-//
-///////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2107
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2107
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Sets file attributes to normal and tries to copy non-existing file synchronously from one directory to another.
-//! 				Uses API elements: NewL(), Attribs(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test123.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-1	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2107-001-Copy_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2107
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2108
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2108
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Sets file attributes to normal and tries to copy file with wrong path name from one directory to another synchronously.
-//! 				Uses API elements: NewL(), Attribs(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\\\\\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2108-001-Copy_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2108
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2109
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2109
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Sets file attributes to normal and tries to copy file from one directory to directory with wrong path name synchronously.
-//! 				Uses API elements: NewL(), Attribs(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!			     	  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::EOverWrite as fifth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\/\/\Copy\ as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2109-001-Copy_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2109
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2110
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2110
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Sets file attributes to normal and tries to copy file from one directory to non-existing directory synchronously.
-//! 				Uses API elements: NewL(), Attribs(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!			     	  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::EOverWrite as fifth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\NotExist\ as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrPathNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-12	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2110-001-Copy_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2110
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-//
-//COPY
-//Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus)
-//
-/////////////////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2111
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2111
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Sets file attributes to normal and tries to copy non-existing file from one directory to another asynchronously.
-//! 				Uses API elements: NewL(), Attribs(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, and TTime(0) as fourth parameter, 
-//!				  and CFileMan::EOverWrite as fifth parameter, 
-//!				  and iStatus as sixth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Test123.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-1	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2111-001-Copy_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2111
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2112
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2112
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Sets file attributes to normal and tries to copy file with wrong path name from one directory to another asynchronously.
-//! 				Uses API elements: NewL(), Attribs(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, and TTime(0) as fourth parameter, 
-//!				  and CFileMan::EOverWrite as fifth parameter, 
-//!				  and iStatus as sixth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\\\\\\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2112-001-Copy_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2112
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2113
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2113
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Sets file attributes to normal and tries to copy file from one directory to directory with wrong path name asynchronously.
-//! 				Uses API elements: NewL(), Attribs(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, and TTime(0) as fourth parameter, 
-//!				  and CFileMan::EOverWrite as fifth parameter, 
-//!				  and iStatus as sixth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\/\/\Copy\ as second parameter,
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2113-001-Copy_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2113
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2114
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2114
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Sets file attributes to normal and tries to copy file from one directory to non-existing directory asynchronously.
-//! 				Uses API elements: NewL(), Attribs(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch, TRequestStatus &aStatus)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, and TTime(0) as fourth parameter, 
-//!				  and CFileMan::EOverWrite as fifth parameter, 
-//!				  and iStatus as sixth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\NotExist\ as second parameter,
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrPathNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-12	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2114-001-Copy_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2114
-
-
-//////////////////////////////////////////////
-//
-//DELETE
-//Delete(const TDesC &aName, TUint aSwitch=0)
-//
-//////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2115
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2115
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Delete(const TDesC &aName, TUint aSwitch=0) negative test.
-//!											Tries to delete non-existing file synchronously.
-//! 				Uses API elements: NewL(), Delete().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), and {TestPath}fileman\Test123.txt as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Delete() returns KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-1	CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2115-001-Delete_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2115
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2116
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2116
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Delete(const TDesC &aName, TUint aSwitch=0) negative test.
-//!											Tries to delete file with wrong path name synchronously.
-//! 				Uses API elements: NewL(), Delete().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), and {TestPath}fileman\\\\\Test3.txt as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Delete() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2116-001-Delete_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2116
-
-
-//////////////////////////////////////////////////////////////////////
-//
-//DELETE
-//Delete(const TDesC &aName, TUint aSwitch=0, TRequestStatus &aStatus)
-//
-//////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2117
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2117
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Delete(const TDesC &aName, TUint aSwitch=0, TRequestStatus &aStatus) negative test.
-//!											Tries to delete non-existing file asynchronously.
-//! 				Uses API elements: NewL(), Delete().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test123.txt as first parameter, 
-//!				  and CFileMan::EOverWrite as second parameter,
-//!				  and iStatus as third parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Delete() returns KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-1	CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2117-001-Delete_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2117
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2118
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2118
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Delete(const TDesC &aName, TUint aSwitch=0, TRequestStatus &aStatus) negative test.
-//!											Tries to delete file with wrong path name asynchronously.
-//! 				Uses API elements: NewL(), Delete().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\\\\\Test3.txt as first parameter, 
-//!				  and CFileMan::EOverWrite as second parameter,
-//!				  and iStatus as third parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Delete() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2118-001-Delete_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2118
-
-
-////////////////////////////////////////////////////////////////////////
-//
-//MOVE
-//Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite)
-//
-////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2119
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2119
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Tries to move non-existing file from one directory to another synchronously.
-//! 				Uses API elements: NewL(), Move().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).	
-//!				  and {TestPath}fileman\Test123.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.	
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-1	CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2119-001-Move_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2119
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2120
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2120
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Tries to move file with wrong path name from one directory to another synchronously.
-//! 				Uses API elements: NewL(), Move().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).	
-//!				  and {TestPath}fileman\\\\\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter.	
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2120-001-Move_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2120
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2121
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2121
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Tries to move file from one directory to directory with wrong path name synchronously.
-//! 				Uses API elements: NewL(), Move().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).	
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\\\Copy\ as second parameter.	
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2121-001-Move_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2121
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2122
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2122
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Tries to move file from one directory to non-existing directory synchronously.
-//! 				Uses API elements: NewL(), Move().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).	
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\NotExist\ as second parameter.	
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-12	CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2122-001-Move_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2122
-
-
-//////////////////////////////////////////////////////////////////////////////////////
-//
-//MOVE
-//Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus)
-//
-//////////////////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2123
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2123
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Tries to move non-existing file from one directory to another asynchronously.
-//! 				Uses API elements: NewL(), Move().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test123.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as fourth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-1	CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2123-001-Move_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2123
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2124
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2124
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Tries to move file with wrong path name from one directory to another asynchronously.
-//! 				Uses API elements: NewL(), Move().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\\\\\\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as fourth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2124-001-Move_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2124
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2125
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2125
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Tries to move file from one directory to directory with wrong path name asynchronously.
-//! 				Uses API elements: NewL(), Move().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\\\Copy\ as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as fourth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2125-001-Move_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2125
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2126
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2126
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Tries to move file from one directory to non-existing directory asynchronously.
-//! 				Uses API elements: NewL(), Move().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\NotExist\ as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as fourth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() returns KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-12	CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2126-001-Move_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2126
-
-
-//////////////////////////////////////////////////////////////////////////
-//
-//RENAME
-//Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite)
-//
-//////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2127
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2127
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Tries to rename non-existing file name synchronously.
-//! 				Uses API elements: NewL(), Rename().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test123.txt as first parameter, 
-//!				  and {TestPath}fileman\Renamed.txt as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Rename() returns KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-1	CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2127-001-Rename_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2127
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2128
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2128
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Tries to rename file with wrong path name synchronously.
-//! 				Uses API elements: NewL(), Rename().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\\\\\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Renamed.txt as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Rename() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2128-001-Rename_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2128
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2129
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2129
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) negative test.
-//!											Tries to rename file synchronously when new file path is wrong.
-//! 				Uses API elements: NewL(), Rename().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\\\Renamed.txt as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Rename() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2129-001-Rename_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2129
-
-
-////////////////////////////////////////////////////////////////////////////////////////
-//
-//RENAME
-//Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus)
-//
-////////////////////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2130
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2130
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Tries to rename non-existing file name asynchronously.
-//! 				Uses API elements: NewL(), Rename().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Test123.txt as first parameter, 
-//!				  and {TestPath}fileman\Renamed.txt as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Rename() returns KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-1	CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2130-001-Rename_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2130
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2131
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2131
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Tries to rename file with wrong path name asynchronously.
-//! 				Uses API elements: NewL(), Rename().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\\\\\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Renamed.txt as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Rename() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2131-001-Rename_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2131
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2132
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2132
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus) negative test.
-//!											Tries to rename file asynchronously when new file path is wrong.
-//! 				Uses API elements: NewL(), Rename().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus).
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\\\Renamed.txt as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter, 
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Rename() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2132-001-Rename_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2132
-
-
-//////////////////////////////
-//
-//REMOVE DIRECTORY
-//RmDir(const TDesC &aDirName)
-//
-//////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2133
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2133
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName) negative test.
-//!											Tries to remove non-existing directory synchronously.
-//! 				Uses API elements: NewL(), RmDir().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::RmDir(const TDesC &aDirName) and {TestPath}fileman\Copy123\ as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RmDir() returns KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-12	CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2133-001-RmDir_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2133
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2134
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2134
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName) negative test.
-//!											Tries to remove directory with wrong path name synchronously.
-//! 				Uses API elements: NewL(), RmDir().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::RmDir(const TDesC &aDirName) and {TestPath}fileman\\\\\Copy\ as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RmDir() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2134-001-RmDir_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2134
-
-
-////////////////////////////////////////////////////////
-//
-//REMOVE DIRECTORY
-//RmDir(const TDesC &aDirName, TRequestStatus &aStatus)
-//
-////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2135
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2135
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName, TRequestStatus &aStatus) negative test.
-//!											Tries to remove non-existing directory asynchronously.
-//! 				Uses API elements: NewL(), RmDir().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::RmDir(const TDesC &aDirName, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy123\ as first parameter, 
-//!				  and iStatus as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RmDir() returns KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-12	CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2135-001-RmDir_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2135
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2136
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2136
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName, TRequestStatus &aStatus) negative test.
-//!											Tries to remove directory with wrong path name asynchronously.
-//! 				Uses API elements: NewL(), RmDir().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::RmDir(const TDesC &aDirName, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\\\\\Copy\ as first parameter, 
-//!				  and iStatus as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RmDir() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2136-001-RmDir_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2136
-
-
-//////////////////////////////////////////////////////////////////////////
-//
-//COPY
-//Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches=EOverWrite)
-//
-//////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2137
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2137
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches=EOverWrite) negative test.
-//!											Opens file then tries to copy file content to another file with wrong path name synchronously.
-//! 				Uses API elements: NewL(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call RFile::Open() to open file.
-//!				4.Call CFileMan::Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches=EOverWrite),
-//!				  and RFile object as first object, 
-//!				  and {TestPath}fileman\\\\\test.txt as second parameter.				
-//!				5.RFs::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	RFile		RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			RFile1		new
-		COMMAND			RFile1		Open		PBASE-F32-FileMan-PublicApi-2137-001-Open_command006
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!Error=-28	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2137-001-Copy_command008
-		COMMAND			CFileMan1	~
-		COMMAND			RFile1		Close
-		COMMAND			RFile1		~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2137
-
-
-////////////////////////////////////////////////////////////////////////////////////////
-//
-//COPY
-//Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches, TRequestStatus &aStatus)
-//
-////////////////////////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2138
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2138
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches, TRequestStatus &aStatus) negative test.
-//!											Opens file then tries to copy file content to another file with wrong path name asynchronously.
-//! 				Uses API elements: NewL(), Copy().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call RFile::Open() to open file.
-//!				4.Call CFileMan::Copy(const RFile &anOld, const TDesC &aNew, TUint aSwitches, TRequestStatus &aStatus),
-//!				  and RFile object as first object, 
-//!				  and {TestPath}fileman\\\\\test.txt as second parameter,
-//!				  and iStatus as last parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	RFile		RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			RFile1		new
-		COMMAND			RFile1		Open		PBASE-F32-FileMan-PublicApi-2138-001-Open_command006
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND	!AsyncError=-28	CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2138-001-Copy_command008
-		OUTSTANDING
-		COMMAND			CFileMan1	~
-		COMMAND			RFile1		Close
-		COMMAND			RFile1		~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2138
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2139
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2139
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0) negative test.
-//!											Try to set attribute KEntryAttReadOnly and unset the same attribute KEntryAttReadOnly synchronously for file!
-//!											And then check that it was not set for file
-//! 				Uses API elements: NewL(), Attribs().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and KEntryAttReadOnly as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Attribs() returns Panic with code 21.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND			CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2139-001-Attribs_command005
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK !PanicCode=21 !PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2139
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2140
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2140
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0) negative test.
-//!											Try to set attribute KEntryAttReadOnly and unset the same attribute KEntryAttReadOnly asynchronously for file!
-//!											And then check that it was not set for file
-//! 				Uses API elements: NewL(), Attribs().
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and KEntryAttReadOnly as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and 0 as fifth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Attribs() returns Panic with code 21. 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND !AsyncError=21			CFileMan1	Attribs	PBASE-F32-FileMan-PublicApi-2140-001-Attribs_command005
-		OUTSTANDING
-		COMMAND			CFileMan1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2140
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2141
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2141
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Copy same file to the same location a three times with a different aSwitch parameter
-//! 				Uses API elements: NewL(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	After second Copy() returns KAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir			PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND !Error=-11		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_EOverWrite
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2141-001-Delete_command009
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2141
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2142
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2142
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Copy same file to the same location a three times with a different aSwitch parameter
-//! 				Uses API elements: NewL(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0 as third parameter,
-//!					and iStatus as fourth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!					and iStatus as fourth parameter.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!					and iStatus as fourth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	After second Copy() returns KAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir			PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2142-001-Copy_command006
-					OUTSTANDING
-		COMMAND !AsyncError=-11		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2142-001-Copy_command007
-					OUTSTANDING
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2142-001-Copy_command008
-					OUTSTANDING
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2142-001-Delete_command009
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2142
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2143
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2143
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Move same file to the same location a three times with a different aSwitch parameter
-//! 				Uses API elements: NewL(), Move(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Move\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Move\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!				5.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Move\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!				6.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Move\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!				7.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Move\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	After second Move() returns KAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir			PBASE-F32-FileMan-PublicApi-2143-001-MkDir_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2143-001-Move_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2143-001-Copy_command007
-		COMMAND !Error=-11		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2143-001-Move_command008
-		COMMAND		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2143-001-Move_command009
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2143-001-Copy_command010
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2143-001-Delete_command011
-		COMMAND		RFs1		RmDir		PBASE-F32-FileMan-PublicApi-2143-001-RmDir_command012
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2143
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2144
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2144
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Move same file to the same location a three times with a different aSwitch parameter
-//! 				Uses API elements: NewL(), Move(), Copy;
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Move\ as second parameter,
-//!					and aSwitch = 0 as third parameter,
-//!					and iStatus as fourth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Move\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!				5.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Move\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!					and iStatus as fourth parameter.
-//!				6.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Move\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!					and iStatus as fourth parameter.
-//!				7.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Move\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	After second Move() returns KAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-2144-001-MkDir_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2144-001-Move_command006
-					OUTSTANDING
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2144-001-Copy_command007
-		COMMAND !AsyncError=-11		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2144-001-Move_command008
-					OUTSTANDING
-		COMMAND		CFileMan1	Move		PBASE-F32-FileMan-PublicApi-2144-001-Move_command009
-					OUTSTANDING
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2144-001-Copy_command010
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2144-001-Delete_command011
-		COMMAND		RFs1		RmDir		PBASE-F32-FileMan-PublicApi-2144-001-RmDir_command012
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2144
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2145
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2145
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Rename same file to the same location a three times with a different aSwitch parameter
-//! 				Uses API elements: NewL(), Rename(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Rename\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Rename\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!				5.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Rename\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!				6.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Rename\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!				7.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Rename\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	After second Rename() returns KAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-2145-001-MkDir_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2145-001-Rename_command006
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2145-001-Copy_command007
-		COMMAND !Error=-11		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2145-001-Rename_command008
-		COMMAND		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2145-001-Rename_command009
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2145-001-Copy_command010
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2145-001-Delete_command011
-		COMMAND		RFs1		RmDir		PBASE-F32-FileMan-PublicApi-2145-001-RmDir_command012
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2145
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2146
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2146
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Rename same file to the same location a three times with a different aSwitch parameter
-//! 				Uses API elements: NewL(), Rename();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Rename\ as second parameter,
-//!					and aSwitch = 0 as third parameter,
-//!					and iStatus as fourth parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Rename\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!				5.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Rename\ as second parameter,
-//!					and aSwitch = 0 as third parameter.
-//!					and iStatus as fourth parameter.
-//!				6.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Rename\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//!					and iStatus as fourth parameter.
-//!				7.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Rename\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\ as second parameter,
-//!					and aSwitch = EOverWrite as third parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	After second Rename() returns KAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-2146-001-MkDir_command004
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2146-001-Rename_command006
-					OUTSTANDING
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2146-001-Copy_command007
-		COMMAND !AsyncError=-11		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2146-001-Rename_command008
-					OUTSTANDING
-		COMMAND		CFileMan1	Rename		PBASE-F32-FileMan-PublicApi-2146-001-Rename_command009
-					OUTSTANDING
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2146-001-Copy_command010
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2146-001-Delete_command011
-		COMMAND		RFs1		RmDir		PBASE-F32-FileMan-PublicApi-2146-001-RmDir_command012
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2146
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2147
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2147
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Delete(const TDesC &aName, TUint aSwitch=0) test.
-//!											Call synchronous delete with KNullDesC argument.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::SetSession() set session path to "{TestPath}fileman\Copy\"
-//!				3.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\*.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0),
-//!					and KNullDesC as parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults All files deleted from folder "Copy".
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir							PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1		SetSessionPath		PBASE-F32-FileMan-PublicApi-2147-001-SetSessionPath_command005
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2147-001-Copy_command007
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2147-001-Delete_command008
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2147
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2148
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2148
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function Delete(const TDesC &aName, TUint aSwitch=0, TRequestStatus &aStatus) test.
-//!											Call asynchronous delete with KNullDesC argument.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::SetSession() set session path to "{TestPath}fileman\Copy\"
-//!				3.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\*.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!				  and CFileMan::EOverWrite as third parameter.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0),
-//!					and KNullDesC as parameter
-//!					and iStatus as fourth parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults All files deleted from folder "Copy".
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir							PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1		SetSessionPath		PBASE-F32-FileMan-PublicApi-2148-001-SetSessionPath_command005
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy		PBASE-F32-FileMan-PublicApi-2148-001-Copy_command007
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-2148-001-Delete_command008
-				OUTSTANDING
-		COMMAND		RFs1		RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2148
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2149
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2149
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName) test.
-//!											Delete newly created folder with sub folders.
-//! 				Uses API elements: NewL(), RmDir();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::RmDir(const TDesC &aDirName),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//!				4.Check that folder was successfully deleted with sub folders.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults All sub folders and specified directory deleted.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	RDir	RDir1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-2149-001-MkDir_command005
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-2149-001-MkDir_command006
-		COMMAND		RDir1		new
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2149-001-RmDir_command008
-		COMMAND	!Error=-12		RDir1			Open		PBASE-F32-FileMan-PublicApi-2149-001-Open_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RDir1			~
-		COMMAND		RFs1			~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2149
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2150
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2150
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName, TRequestStatus &aStatus) test.
-//!											Delete newly created folder with sub folders asynchronously.
-//! 				Uses API elements: NewL(), RmDir();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::RmDir(const TDesC &aDirName, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\ as parameter, 
-//!					and iStatus as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults All sub folders and specified directory deleted.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RDir			RDir1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-2150-001-MkDir_command005
-		COMMAND		RFs1		MkDir		PBASE-F32-FileMan-PublicApi-2150-001-MkDir_command006
-		COMMAND		RDir1		new
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	RmDir		PBASE-F32-FileMan-PublicApi-2150-001-RmDir_command008
-			OUTSTANDING
-		COMMAND	!Error=-12	RDir1			Open		PBASE-F32-FileMan-PublicApi-2150-001-Open_command009
-		COMMAND		CFileMan1	~
-		COMMAND		RDir1			~
-		COMMAND		RFs1			~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2150
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2151
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2151
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName) test.
-//!											Delete folder in which one file is readonly.
-//! 				Uses API elements: NewL(), RmDir(), Copy(), Attribs;
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0 as third parameter.
-//!				4.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttReadOnly as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter.
-//!				5.Call CFileMan::RmDir(const TDesC &aDirName),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//!				6.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter.
-//!				7.Call CFileMan::RmDir(const TDesC &aDirName),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults RmDir() return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1		NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1		Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND		CFileMan1		Attribs	PBASE-F32-FileMan-PublicApi-2151-001-Attribs_command007
-		COMMAND !Error=-14		CFileMan1		RmDir		PBASE-F32-FileMan-PublicApi-2151-001-RmDir_command008
-		COMMAND		CFileMan1		Attribs	PBASE-F32-FileMan-PublicApi-2151-001-Attribs_command009
-		COMMAND		CFileMan1		RmDir		PBASE-F32-FileMan-PublicApi-2151-001-RmDir_command010
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2151
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2152
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2152
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName, TRequestStatus &aStatus) test.
-//!											Delete folder in which one file is readonly.
-//! 				Uses API elements: NewL(), RmDir(), Copy(), Attribs;
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0 as third parameter.
-//!				4.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttReadOnly as second parameter,
-//!				  and KEntryAttNormal as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter.
-//!				5.Call CFileMan::RmDir(const TDesC &aDirName, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//!				  and iStatus as second parameter.
-//!				6.Call CFileMan::Attribs(const TDesC &aName, TUint aSetMask, TUint aClearMask, const TTime &aTime, TUint aSwitch=0)
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and KEntryAttNormal as second parameter,
-//!				  and KEntryAttReadOnly as third parameter, 
-//!				  and TTime(0) as fourth parameter, 
-//!				  and CFileMan::ERecurse as fifth parameter.
-//!				7.Call CFileMan::RmDir(const TDesC &aDirName, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//!				  and iStatus as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults RmDir() return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1		NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1		Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND		CFileMan1		Attribs	PBASE-F32-FileMan-PublicApi-2152-001-Attribs_command007
-		COMMAND !AsyncError=-14		CFileMan1		RmDir		PBASE-F32-FileMan-PublicApi-2152-001-RmDir_command008
-			OUTSTANDING
-		COMMAND		CFileMan1		Attribs	PBASE-F32-FileMan-PublicApi-2152-001-Attribs_command009
-		COMMAND		CFileMan1		RmDir		PBASE-F32-FileMan-PublicApi-2152-001-RmDir_command010
-			OUTSTANDING
-		COMMAND		CFileMan1	~		
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2152
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2153
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2153
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName) test.
-//!											Synchronously Delete folder in which one file is opened.
-//! 				Uses API elements: NewL(), RmDir(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0 as third parameter.
-//!				4.Open File in directory which will be deleted.
-//!				5.Call CFileMan::RmDir(const TDesC &aDirName),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//!				6.Close opened file.
-//!				7.Call CFileMan::RmDir(const TDesC &aDirName),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults RmDir() return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	RFile	RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1	new		
-		COMMAND		CFileMan1		NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1		Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND		RFile1			Open		PBASE-F32-FileMan-PublicApi-2153-001-Open_command007
-		COMMAND !Error=-14		CFileMan1		RmDir		PBASE-F32-FileMan-PublicApi-2153-001-RmDir_command008
-		COMMAND		RFile1			Close	
-		COMMAND		CFileMan1		RmDir		PBASE-F32-FileMan-PublicApi-2153-001-RmDir_command010
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~	
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2153
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2154
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2154
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Function RmDir(const TDesC &aDirName, TRequestStatus &aStatus) test.
-//!											Asynchronously Delete folder in which one file is opened.
-//! 				Uses API elements: NewL(), RmDir(), Copy();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite).
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0 as third parameter.
-//!				4.Open File in directory which will be deleted.
-//!				5.Call CFileMan::RmDir(const TDesC &aDirName, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//!				  and iStatus as second parameter.
-//!				6.Close opened file.
-//!				7.Call CFileMan::RmDir(const TDesC &aDirName, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\ as parameter.
-//!				  and iStatus as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults RmDir() return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	RFile	RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFile1	new		
-		COMMAND		CFileMan1		NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1		Copy		PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND		RFile1			Open		PBASE-F32-FileMan-PublicApi-2154-001-Open_command007
-		COMMAND !AsyncError=-14		CFileMan1		RmDir		PBASE-F32-FileMan-PublicApi-2154-001-RmDir_command008
-				OUTSTANDING
-		COMMAND		RFile1			Close	
-		COMMAND		CFileMan1		RmDir		PBASE-F32-FileMan-PublicApi-2154-001-RmDir_command010
-				OUTSTANDING
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~	
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2154
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2155
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2155
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Copy files to folder where alredy exists one file from list of copied files.
-//! 				Uses API elements: NewL(), SetObserver(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\ as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!					and aSwitch=ERecurse.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() return KErrAlreadyExists when trying to copy Test1.txt.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND	!Error=-11	CFileMan1 Copy				PBASE-F32-FileMan-PublicApi-2155-001-Copy_command003
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2155-001-Delete_command004
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2155
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2156
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2156
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Move files to folder where alredy exists one file from list of moved files.
-//! 				Uses API elements: NewL(), SetObserver(), Copy(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\ as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=0.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=0.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0),
-//!				  and {TestPath}fileman\Copy1\ as first parameter, 
-//!					and aSwitch=ERecurse.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() return KErrAlreadyExists when trying to copy Test1.txt.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-2156-001-MkDir_command002
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2156-001-Copy_command003
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2156-001-Copy_command004
-		COMMAND	!Error=-11	CFileMan1 Move				PBASE-F32-FileMan-PublicApi-2156-001-Move_command005
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2156-001-Delete_command006
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2156-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2156-001-RmDir_command008
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2156
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2157
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2157
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Copy files to folder where alredy exists one file from list of copied files.
-//! 				Uses API elements: NewL(), SetObserver(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\ as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0,
-//!					and iStatus.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!					and aSwitch=ERecurse.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Copy() return KErrAlreadyExists when trying to copy Test1.txt.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND	!AsyncError=-11	CFileMan1 Copy				PBASE-F32-FileMan-PublicApi-2157-001-Copy_command003
-						OUTSTANDING
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2157-001-Delete_command004
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2157
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2158
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2158
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Move files to folder where alredy exists one file from list of moved files.
-//! 				Uses API elements: NewL(), SetObserver(), Copy(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\ as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch=0.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=0.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch=0
-//!					and iStatus.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0),
-//!				  and {TestPath}fileman\Copy1\ as first parameter, 
-//!					and aSwitch=ERecurse.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Move() return KErrAlreadyExists when trying to copy Test1.txt.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-2158-001-MkDir_command002
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2158-001-Copy_command003
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2158-001-Copy_command004
-		COMMAND	!AsyncError=-11	CFileMan1 Move				PBASE-F32-FileMan-PublicApi-2158-001-Move_command005
-				OUTSTANDING
-		COMMAND		CFileMan1	~	
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2158-001-Delete_command006
-		COMMAND		CFileMan1	Delete				PBASE-F32-FileMan-PublicApi-2158-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-2158-001-RmDir_command008
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2158
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2159
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2159
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite) test.
-//!											Synchronously try to move opened file.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch = ERecurse.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Move() return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir		
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_EOverWrite
-		COMMAND		RFile1		Open				PBASE-F32-FileMan-PublicApi-2159-001-Open_command004
-		COMMAND !Error=-14		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2159-001-Move_command005
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2159-001-Delete_command006		
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2159
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2160
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2160
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Asynchronously try to move opened file.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy as first parameter, 
-//!				  and {TestPath}fileman\Copy1\ as second parameter,
-//!					and aSwitch = ERecurse.
-//!					and iStatus.
-//!				5.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Move() return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir		
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_EOverWrite
-		COMMAND		RFile1		Open				PBASE-F32-FileMan-PublicApi-2160-001-Open_command004
-		COMMAND !AsyncError=-14		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2160-001-Move_command005
-					OUTSTANDING
-		COMMAND		RFile1		Close
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2160-001-Delete_command006		
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2160
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2161
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2161
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Call asynchronous Copy() 3 times for one file at one time.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter,
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir		
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2161-001-Copy_command002
-		COMMAND !Error=-14	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2161-001-Copy_command002
-		COMMAND !Error=-14	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2161-001-Copy_command002
-					OUTSTANDING
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2161-001-Delete_command003
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2161
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2162
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2162
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Call asynchronous Move() 3 times for one file at one time.
-//! 				Uses API elements: NewL(), Copy(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Test\Test1.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				5.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Test\Test1.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				6.Call CFileMan::Move(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Test\Test1.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				7.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third Move calls return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2162-001-Copy_command002
-		COMMAND		CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2162-001-Move_command003
-		COMMAND !Error=-14	CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2162-001-Move_command003
-		COMMAND !Error=-14	CFileMan1	Move				PBASE-F32-FileMan-PublicApi-2162-001-Move_command003
-					OUTSTANDING
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2162-001-Delete_command004
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2162
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2163
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2163
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus) test.
-//!											Call asynchronous Rename() 3 times for one file at one time.
-//! 				Uses API elements: NewL(), Copy(), Move(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1.txt as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1_new.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				5.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1_new.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				6.Call CFileMan::Rename(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite, TRequestStatus &aStatus),
-//!				  and {TestPath}fileman\Copy\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\Test1_new.txt as second parameter.
-//!					and aSwitch = 0,
-//!					and iStatus.
-//!				7.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third Rename calls return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2163-001-Copy_command002
-		COMMAND		CFileMan1	Rename				PBASE-F32-FileMan-PublicApi-2163-001-Rename_command003
-		COMMAND !Error=-14	CFileMan1	Rename				PBASE-F32-FileMan-PublicApi-2163-001-Rename_command003
-		COMMAND !Error=-14	CFileMan1	Rename				PBASE-F32-FileMan-PublicApi-2163-001-Rename_command003
-					OUTSTANDING
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2163-001-Delete_command004
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2163
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2166
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2166
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function MFileManObserver::NotifyFileManStarted() test.
-//!											Return TControl::ECancel during synchronous Copy process for one file and check that this file wasn't copied.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Test\ as second parameter,
-//!					and aSwitch = 0,
-//!					and also set to return TCOntrol::ECancel for Test2.txt in NotifyFileManStarted.
-//!				7.Check that file Test2.txt wasn't copied.
-//!				8.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File Test2.txt wasn't copied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2166-001-Copy_command002
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2166-001-Open_command003
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2166-001-Open_command004
-		COMMAND 	RFile1		Close
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2166-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2166-001-Delete_command006
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2166-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2166
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2167
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2167
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function MFileManObserver::NotifyFileManStarted() test.
-//!											Return TControl::ECancel during asynchronous Copy process for one file and check that this file wasn't copied.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Test\ as second parameter,
-//!					and aSwitch = 0,
-//!					and also set to return TCOntrol::ECancel for Test2.txt in NotifyFileManStarted.
-//!				7.Check that file Test2.txt wasn't copied.
-//!				8.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File Test2.txt wasn't copied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2167-001-Copy_command002
-				OUTSTANDING
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2167-001-Open_command003
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2167-001-Open_command004
-		COMMAND 	RFile1		Close
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2167-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2167-001-Delete_command006
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2167-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~			
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2167
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2168
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2168
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function MFileManObserver::NotifyFileManStarted() test.
-//!											Return TControl::EAbort during synchronous Copy process for one file and check that copy process is aborted.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Test\ as second parameter,
-//!					and aSwitch = 0,
-//!					and also set to return TCOntrol::EAbort for Test2.txt in NotifyFileManStarted.
-//!				7.Check that only file Test1.txt was copied. If files copied in this order, Test1.txt, Test2.txt, Test3.txt
-//!				8.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Only Test1.txt was copied. Copy returns KErrCancel.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND	!Error=-3 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2168-001-Copy_command002
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2168-001-Open_command003
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2168-001-Open_command004
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2168-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2168-001-Delete_command006
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2168-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2168
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2169
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2169
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function MFileManObserver::NotifyFileManStarted() test.
-//!											Return TControl::EAbort during asynchronous Copy process for one file and check that copy process is aborted.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Test\ as second parameter,
-//!					and aSwitch = 0,
-//!					and also set to return TCOntrol::EAbort for Test2.txt in NotifyFileManStarted.
-//!				7.Check that only file Test1.txt was copied. If files copied in this order, Test1.txt, Test2.txt, Test3.txt
-//!				8.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Only Test1.txt was copied. Copy returns KErrCancel.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND	!AsyncError=-3 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2169-001-Copy_command002
-				OUTSTANDING
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2169-001-Open_command003
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2169-001-Open_command004
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2169-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2169-001-Delete_command006
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2169-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2169
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2170
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2170
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function MFileManObserver::NotifyFileManOperation() test.
-//!											Return TControl::ECancel during synchronous Copy process for one file and check that this file wasn't copied.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Test\ as second parameter,
-//!					and aSwitch = 0,
-//!					and also set to return TCOntrol::ECancel for Test2.txt in NotifyFileManOperation.
-//!				7.Check that file Test2.txt wasn't copied.
-//!				8.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File Test2.txt wasn't copied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2170-001-Copy_command002
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2170-001-Open_command003
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2170-001-Open_command004
-		COMMAND 	RFile1		Close
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2170-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2170-001-Delete_command006
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2170-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2170
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2171
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2171
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function MFileManObserver::NotifyFileManOperation() test.
-//!											Return TControl::ECancel during asynchronous Copy process for one file and check that this file wasn't copied.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Test\ as second parameter,
-//!					and aSwitch = 0,
-//!					and also set to return TCOntrol::ECancel for Test2.txt in NotifyFileManOperation.
-//!				7.Check that file Test2.txt wasn't copied.
-//!				8.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults File Test2.txt wasn't copied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2171-001-Copy_command002
-					OUTSTANDING
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2171-001-Open_command003
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2171-001-Open_command004
-		COMMAND 	RFile1		Close
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2171-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2171-001-Delete_command006
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2171-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2171
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2172
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2172
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function MFileManObserver::NotifyFileManEnded() test.
-//!											Return TControl::EAbort during synchronous Copy process for one file and check that copy process is aborted.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Test\ as second parameter,
-//!					and aSwitch = 0,
-//!					and also set to return TCOntrol::EAbort for Test1.txt in NotifyFileManEnded.
-//!				7.Check that only file Test1.txt was copied.
-//!				8.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Only Test1.txt was copied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND	!Error=-3 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2172-001-Copy_command002
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2172-001-Open_command003
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2172-001-Open_command004
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2172-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2172-001-Delete_command006
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2172-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2172
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2173
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2173
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function MFileManObserver::NotifyFileManEnded() test.
-//!											Return TControl::EAbort during synchronous Copy process for one file and check that copy process is aborted.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test1.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test2.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				5.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Test3.txt as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				6.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\Copy\ as first parameter, 
-//!				  and {TestPath}fileman\Test\ as second parameter,
-//!					and aSwitch = 0,
-//!					and also set to return TCOntrol::EAbort for Test2.txt in NotifyFileManEnded.
-//!				7.Check that only file Test1.txt was copied.
-//!				8.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//!				9.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Test\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Only Test1.txt was copied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	RFile			RFile1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_CopyDir
-		COMMAND		RFs1			MkDir				PBASE-F32-FileMan-PublicApi-MkDir_TestDir
-		COMMAND		RFile1		new
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0
-		COMMAND 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0
-		COMMAND	!AsyncError=-3 	CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2173-001-Copy_command002
-				OUTSTANDING
-		COMMAND 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2173-001-Open_command003
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2173-001-Open_command004
-		COMMAND 	RFile1		Close
-		COMMAND	!Error=-1 	RFile1		Open				PBASE-F32-FileMan-PublicApi-2173-001-Open_command005
-		COMMAND 	RFile1		Close
-		COMMAND		CFileMan1	~
-		COMMAND		RFile1		~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2173-001-Delete_command006
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2173-001-Delete_command007
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_CopyDir
-		COMMAND		RFs1			RmDir				PBASE-F32-FileMan-PublicApi-RmDir_TestDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2173
-
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2999
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2999
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		Clenup the copied testdata.
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!             3.Call CFileMan::Delete() to delete all the files copied .
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Remove the testdata copied from particular directory
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new		
-		COMMAND		RFs1			Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	Delete		PBASE-F32-FileMan-PublicApi-Delete-Uninstall
-		COMMAND		RFs1			RmDir 	PBASE-F32-FileMan-PublicApi-RmDir-Uninstall
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2999
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FileNamesIdentical-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Jaanus Randveer, Runno Sgirka
-//! 	@SYMScriptCreationDate		27/08/2007
-//! 	@SYMScriptDescription		The test script contains API test for the FileNamesIdentical function:
-//!	FileNamesIdentical()
-
-LOAD_SUITE	T_SfSrv
-DELAY 		5000
-
-
-START_TESTCASE			PBASE-F32-FileNamesIdentical-PublicApi-3001
-//! @SYMTestCaseID		PBASE-F32-FileNamesIdentical-PublicApi-3001
-//! @SYMAPI			FileNamesIdentical
-//! @SYMTestCaseDesc		Function FileNamesIdentical(const TDesC &aFileName1, const TDesC &aFileName2) test, that compares two
-//!				identical files.
-//! 				Uses API elements: FileNamesIdentical().
-//! @SYMTestActions		1.Call FileNamesIdentical() and 
-//!				  <DRIVE>:\base\t_sfsrv\Test3.txt as first parameter, and
-//!				  <DRIVE>:\base\t_sfsrv\Test3.txt as second parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The FileNamesIdentical() method call returns ETrue. 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv		\base\PBASE-F32-FileNamesIdentical-PublicApi.ini 
-		CREATE_OBJECT	FileNamesIdentical	FileNamesIdentical1
-		COMMAND		FileNamesIdentical1	FileNamesIdentical		PBASE-F32-FileNamesIdentical-PublicApi-3001-001-FileNamesIdentical_command001
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileNamesIdentical-PublicApi-3001
-
-
-START_TESTCASE			PBASE-F32-FileNamesIdentical-PublicApi-3002
-//! @SYMTestCaseID		PBASE-F32-FileNamesIdentical-PublicApi-3002
-//! @SYMAPI			FileNamesIdentical
-//! @SYMTestCaseDesc		Function FileNamesIdentical(const TDesC &aFileName1, const TDesC &aFileName2) test, that compares two
-//!				not identical files.
-//! 				Uses API elements: FileNamesIdentical().
-//! @SYMTestActions		1.Call FileNamesIdentical() and 
-//!				  <DRIVE>:\base\t_sfsrv\Test3.txt as first parameter, and
-//!				  <DRIVE>:\base\t_sfsrv\Test2.txt as second parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The FileNamesIdentical() method call returns EFalse. 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv		\base\PBASE-F32-FileNamesIdentical-PublicApi.ini 
-		CREATE_OBJECT	FileNamesIdentical	FileNamesIdentical1
-		COMMAND		FileNamesIdentical1	FileNamesIdentical		PBASE-F32-FileNamesIdentical-PublicApi-3002-001-FileNamesIdentical_command001
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileNamesIdentical-PublicApi-3002
-
-
-START_TESTCASE			PBASE-F32-FileNamesIdentical-PublicApi-3003
-//! @SYMTestCaseID		PBASE-F32-FileNamesIdentical-PublicApi-3003
-//! @SYMAPI			FileNamesIdentical
-//! @SYMTestCaseDesc		Function FileNamesIdentical(const TDesC &aFileName1, const TDesC &aFileName2) test, that compares the same file,
-//!				but one is with absolute path and the other one with relative path.
-//! 				Uses API elements: FileNamesIdentical().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::SetSessionPath() to set new session path, passing <drive>:\ as parameter.
-//!				3.Call RFs::SessionPath() to verify previous action.
-//!				4.Call FileNamesIdentical() and 
-//!				  <DRIVE>:\base\t_sfsrv\Test3.txt as first parameter, and
-//!				  \base\t_sfsrv\Test3.txt as second parameter
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The FileNamesIdentical() method call returns EFalse. 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv		\base\PBASE-F32-FileNamesIdentical-PublicApi.ini 
-		CREATE_OBJECT	RFs			RFs1
-		CREATE_OBJECT	FileNamesIdentical	FileNamesIdentical1
-		COMMAND		RFs1			new		
-		COMMAND		RFs1			Connect		
-		COMMAND		RFs1			SetSessionPath		PBASE-F32-FileNamesIdentical-PublicApi-3003-001-SetSessionPath_command004
-		COMMAND		RFs1			SessionPath		PBASE-F32-FileNamesIdentical-PublicApi-3003-001-SessionPath_command005
-		COMMAND		FileNamesIdentical1	FileNamesIdentical	PBASE-F32-FileNamesIdentical-PublicApi-3003-001-FileNamesIdentical_command006
-		COMMAND		RFs1			~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileNamesIdentical-PublicApi-3003
-
-
-START_TESTCASE			PBASE-F32-FileNamesIdentical-PublicApi-3004
-//! @SYMTestCaseID		PBASE-F32-FileNamesIdentical-PublicApi-3004
-//! @SYMAPI			FileNamesIdentical
-//! @SYMTestCaseDesc		Function FileNamesIdentical(const TDesC &aFileName1, const TDesC &aFileName2) test, that compares the same, but
-//!				invalid path.
-//! 				Uses API elements: FileNamesIdentical().
-//! @SYMTestActions		1.Call FileNamesIdentical() using :: and :: as parameters.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The FileNamesIdentical() method call will panic (FSCLIENT Code=24). 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv		\base\PBASE-F32-FileNamesIdentical-PublicApi.ini 
-		CREATE_OBJECT	FileNamesIdentical	FileNamesIdentical1
-		COMMAND		FileNamesIdentical1	FileNamesIdentical	PBASE-F32-FileNamesIdentical-PublicApi-3004-001-FileNamesIdentical_command001
-	END_TEST_BLOCK	!PanicCode=24	!PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-FileNamesIdentical-PublicApi-3004
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FileText-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,621 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName			pbase-f32-sfsrv-publicapi-ram
-//! @SYMScriptTestEnvironment		This test script requires a basic ROM.
-//! @SYMScriptAuthor 			Dmitri Trofimov, Anton Grober, Segei Tveritin
-//! @SYMScriptDescription		The test script contains API tests for the following functions of TFileText class
-//! @SYMScriptCreationDate		08/12/2006
-//! TFileText();
-//! void Set(RFile &aFile);
-//! TInt Read(TDes &aDes);
-//! TInt Write(const TDesC &aDes);
-//! TInt Seek(TSeek aMode);
-
-LOAD_SUITE	T_SfSrv
-DELAY		5000
-
-START_TESTCASE				SETUP_FILES
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	CFileMan	CFileMan1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFs1		MkDirAll	test_dir
-			COMMAND		CFileMan1	NewL	fileman_fs
-			COMMAND		CFileMan1	Copy	test_file1
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	Copy	test_file2
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	Copy	test_file3
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	Copy	test_file4
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	Copy	test_file5
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	Copy	test_file6
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	Copy	test_file7
-			COMMAND		CFileMan1	~
-			COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE				SETUP_FILES
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0001
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0001
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			TFileText() test.
-//!						Uses API elements: TFileText()
-//! @SYMTestActions			1. Create TFileText object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Function does not leave nor panic.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0001
-
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0002
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0002
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			Set() test. This tests for successful Set() call.
-//!						Uses API elements: Set()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'filetext_read.txt' string as the second parameter, and EFileRead as the third
-//!					parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing a reference to RFile object as a parameter.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Function does not leave nor panic.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs		RFs1
-			CREATE_OBJECT	RFile		RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0002command5Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0002command8Set
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0002
-
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0004
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0004
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Read() passing a reference to a TDes descriptor with sufficient length to fit the first line of text file.
-//!						Uses API elements: Set(), Read()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'filetext_read.txt' string as the second parameter, and EFileRead as the third
-//!					 parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing a reference to RFile object as a parameter.
-//!					7. Call Read(). Expecting string 'Symbian rocks my world!'. Buffer length is 64
-//!					8. Delete TFiletext object.
-//!					9. Call Close() on RFile object.
-//!					10. Delete RFile object.
-//!					11. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority		        Critical
-//! @SYMTestExpectedResults	        Read() returns KErrNone. The string read is the same as expected.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs		RFs1
-			CREATE_OBJECT	RFile		RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0004command5Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0004command8Set
-			COMMAND		TFileText1	Read		PBASE-F32-FileText-PublicApi-0004command9Read
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0004
-
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0005
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0005
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Write() passing a reference to a TDesC descriptor containing a line of text.
-//!						Uses API elements: Set(), Write(), Read()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'filetext_read.txt' string as the second parameter, and EFileWrite as the third 
-//!					parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing a reference to RFile object as a parameter.
-//!					7. Call Write() passing a TDesC string reference as a parameter. String contains 'Symbian is the
-//!					 best!!11ONEONE'.
-//!					8. Call Seek() on TFileText passing ESeekStart as a parameter.
-//!					9. Call Read() on TFileText. Expecting string 'Symbian is the best!!11ONEONE'. Buffer length is 64
-//!					10. Delete TFileText object.
-//!					11. Call Close() on RFile object.
-//!					12. Delete RFile object.
-//!					13. Call Delete() on RFs passing a reference to TDesC file name that has been created during the test.
-//!					14. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Write() returns KErrNone. Read() returns KErrNone. The string read is the same as expected.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	RFile	RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0005command6Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0005command8Set
-			COMMAND		TFileText1	Write		PBASE-F32-FileText-PublicApi-0005command9Write
-			COMMAND		TFileText1	Seek		PBASE-F32-FileText-PublicApi-0005command10Seek
-			COMMAND		TFileText1	Read		PBASE-F32-FileText-PublicApi-0005command11Read
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFile1		~
-			COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0005
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0006
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0006
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Seek() passing a ESeekStart as a parameter.
-//!							Uses API elements: Set(), Seek(), Read().
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'filetext_read.txt' string as the second parameter, and EFileWrite as the third 
-//!					parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing a reference to RFile object as a parameter.
-//!					7. Call Seek() on TFileText passing ESeekStart as a parameter.
-//!					8. Call Read() on TFileText. Expecting string 'Symbian rocks my world!'.
-//!					9. Delete TFiletext object.
-//!					10. Call Close() on RFile object.
-//!					11. Delete RFile object.
-//!					12. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Seek() returns KErrNone. Read() returns KErrNone, the string read is the same as expected.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	RFile	RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0006command5Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0006command8Set
-			COMMAND		TFileText1	Seek		PBASE-F32-FileText-PublicApi-0006command9Seek
-			COMMAND		TFileText1	Read		PBASE-F32-FileText-PublicApi-0006command10Read
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0006
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0007
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0007
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Seek() passing a ESeekEnd as a parameter.
-//!						Uses API elements: Set(), Seek(), Read()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'filetext_read.txt' string as the second parameter, and EFileWrite as the third
-//!					parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing a reference to RFile object as a parameter.
-//!					7. Call Seek() on TFileText passing ESeekEnd as a parameter.
-//!					8. Call Read() on TFileText. No string expected. Just to get KErrEof. Buffer length is 64.
-//!					9. Delete TFiletext object.
-//!					10. Call Close() on RFile object.
-//!					11. Delete RFile object.
-//!					12. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Seek() returns KErrNone. Read() returns KErrEof.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1
-			CREATE_OBJECT		RFile		RFile1
-			CREATE_OBJECT		TFileText	TFileText1
-			COMMAND			RFs1		new
-			COMMAND			RFs1		Connect
-			COMMAND			RFile1		new
-			COMMAND			RFile1		Open		PBASE-F32-FileText-PublicApi-0007command5Open
-			COMMAND			TFileText1	new
-			COMMAND			TFileText1	Set		PBASE-F32-FileText-PublicApi-0007command8Set
-			COMMAND			TFileText1	Seek		PBASE-F32-FileText-PublicApi-0007command9Seek
-			COMMAND	!Error=-25	TFileText1	Read
-			COMMAND			TFileText1	~
-			COMMAND			RFile1		Close
-			COMMAND			RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0007
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0008
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0008
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Write() trying to write in file opened in read-mode.
-//!						Uses API elements: Set(), Write()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'new_file.txt' string as the second parameter, and EFileRead as the third parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing RFile object instance as parameter.
-//!					7. Call Write() on TFileText. Passing string 'Writing in read-mode' as TDesC parameter.
-//!					8. Delete TFiletext object.
-//!					9. Call Close() on RFile object.
-//!					10. Delete RFile object.
-//!					11. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Write() returns KErrAccessDenied.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1
-			CREATE_OBJECT		RFile		RFile1
-			CREATE_OBJECT		TFileText	TFileText1
-			COMMAND			RFs1		new
-			COMMAND			RFs1		Connect
-			COMMAND			RFile1		new
-			COMMAND			RFile1		Open		PBASE-F32-FileText-PublicApi-0008command5Open
-			COMMAND			TFileText1	new
-			COMMAND			TFileText1	Set		PBASE-F32-FileText-PublicApi-0008command8Set
-			COMMAND	!Error=-21	TFileText1	Write		PBASE-F32-FileText-PublicApi-0008command9Write
-			COMMAND			TFileText1	~
-			COMMAND			RFile1		Close
-			COMMAND			RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0008
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0009
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0009
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Read() returns KErrNone reading string more than 256 symbols in length .
-//!						Uses API elements: Set(), Read()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'big_line.txt' string as the second parameter, and EFileRead as the third parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing RFile object instance as parameter.
-//!					7. Call Read(). String in file has more than 256 symbols.
-//!					8. Delete TFiletext object.
-//!					9. Call Close() on RFile object.
-//!					10. Delete RFile object.
-//!					11. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Read() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	RFile	RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0009command5Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0009command8Set
-			COMMAND		TFileText1	Read		big_buffer
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFile1		~
-			COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0009
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0010
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0010
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Read() returns KErrTooBig error because of too small buffer.
-//!						Uses API elements: Set(), Read()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'big_line.txt' string as the second parameter, and EFileRead as the third parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing RFile object instance as parameter.
-//!					7. Call Read(). String in file has more than 256 symbols. Buffer is 32.
-//!					8. Delete TFiletext object.
-//!					9. Call Close() on RFile object.
-//!					10. Delete RFile object.
-//!					11. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Read() returns KErrTooBig.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1
-			CREATE_OBJECT		RFile		RFile1
-			CREATE_OBJECT		TFileText	TFileText1
-			COMMAND			RFs1		new
-			COMMAND			RFs1		Connect
-			COMMAND			RFile1		new
-			COMMAND			RFile1		Open		PBASE-F32-FileText-PublicApi-0010command5Open
-			COMMAND			TFileText1	new
-			COMMAND			TFileText1	Set		PBASE-F32-FileText-PublicApi-0010command8Set
-			COMMAND	!Error=-40	TFileText1	Read		PBASE-F32-FileText-PublicApi-0010command9Read
-			COMMAND			TFileText1	~
-			COMMAND			RFile1		Close
-			COMMAND			RFile1		~
-			COMMAND			RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0010
-
-
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0011
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0011
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Read() returns KErrTooBig error because of too small buffer.
-//!						Uses API elements: Set(), Read(), Write()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Replace() on RFile object passing a reference to RFs object as the first parameter, a TDesC
-//!					 containing path to file  'multiline.txt' string as the second parameter, and EFileWrite as the
-//!					 third parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing RFile object instance as parameter.
-//!					7. Call Write(). String parameter is is 'First string'. Buffer is 64.
-//!					8. Call Write(). String parameter is is 'Second string'. Buffer is 64.
-//!					9. Call Write(). String parameter is is 'Third string'. Buffer is 64.
-//!					10. Delete TFiletext object.
-//!					11. Call Close() on RFile object.
-//!					12. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC file name 
-//!					reference as the second parameter, and EFileRead as the third parameter. The file opened named
-//!					 'multiline.txt' and contains three lines of text.
-//!					13. Create TFileText object.
-//!					14. Call Set() passing RFile object instance as parameter.
-//!					15. Call Read(). String in file expected as  'First string'. Buffer is 64.
-//!					16. Call Read(). String in file expected as 'Second string'. Buffer is 64.
-//!					15. Call Read(). String in file expected as 'Third string'. Buffer is 64.
-//!					17. Delete TFiletext object.
-//!					18. Call Close() on RFile object.
-//!					19. Delete RFile object.
-//!					20. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Write() returns KErrNone. Read() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs		RFs1
-			CREATE_OBJECT	RFile		RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Replace		PBASE-F32-FileText-PublicApi-0011command5Replace
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0011command8Set
-			COMMAND		TFileText1	Write		PBASE-F32-FileText-PublicApi-0011command9Write
-			COMMAND		TFileText1	Write		PBASE-F32-FileText-PublicApi-0011command10Write
-			COMMAND		TFileText1	Write		PBASE-F32-FileText-PublicApi-0011command11Write
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0011command15Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0011command18Set
-			COMMAND		TFileText1	Read		PBASE-F32-FileText-PublicApi-0011command19Read
-			COMMAND		TFileText1	Read		PBASE-F32-FileText-PublicApi-0011command20Read
-			COMMAND		TFileText1	Read		PBASE-F32-FileText-PublicApi-0011command21Read
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0011
-
-
-
-
-
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0012
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0012
-//! @SYMCreationDate			08/08/2007
-//! @SYMTestCaseDesc			Write() appending a string. Read() checking if it is added to the end of file.
-//!						Uses API elements: Set(), Read(), Write()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					path to file  'oneliner.txt' string as the second parameter, and EFileWrite as the third
-//!					parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing RFile object instance as parameter.
-//!					7. Call Write(). String parameter is is 'Appended string'. Buffer is 64.
-//!					8. Call Close() on RFile object.
-//!					9. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC containing
-//!					 path to file  'oneliner.txt' string as the second parameter, and EFileRead as the third parameter.
-//!					10. Create TFileText object. And set the position to the beginning of file using Seek().
-//!					11. Call Set() passing RFile object instance as parameter.
-//!					12. Call Read(). String in file expected as  'First string'. Buffer is 64. (File contained this string
-//!					before any modifications. So it's have to be first one.)
-//!					13. Call Read(). String in file expected as  'Appended string'. Buffer is 64.
-//!					14. Delete TFiletext object.
-//!					15. Call Close() on RFile object.
-//!					16. Delete RFile object.
-//!					17. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Write() returns KErrNone. Read() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	RFile	RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0012command5Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0012command8Set
-			COMMAND		TFileText1	Write		PBASE-F32-FileText-PublicApi-0012command9Write
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0012command13Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0012command16Set
-			COMMAND		TFileText1	Read		PBASE-F32-FileText-PublicApi-0012command18Read
-			COMMAND		TFileText1	Read		PBASE-F32-FileText-PublicApi-0012command19Read
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0012
-
-
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0013
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0013
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Seek() passing a ESeekAddress as a parameter.
-//!						Uses API elements: Set(), Seek().
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC file name
-//!					reference as the second parameter, and EFileWrite as the third parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing a reference to RFile object as a parameter.
-//!					7. Call Seek() on TFileText passing ESeekAddress as a parameter.
-//!					8. Delete TFiletext object.
-//!					9. Call Close() on RFile object.
-//!					10. Delete RFile object.
-//!					11. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Seek() panics with code FSCLIENT-5.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	RFile	RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0013command5Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0013command8Set
-			COMMAND		TFileText1	Seek		PBASE-F32-FileText-PublicApi-0013command9Seek
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFs1		~
-	END_TEST_BLOCK	!PanicCode=5	!PanicString="FSCLIENT panic"
-
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0013
-
-START_TESTCASE 				PBASE-F32-FileText-PublicApi-0014
-//! @SYMTestCaseID			PBASE-F32-FileText-PublicApi-0014
-//! @SYMAPI				TFileText
-//! @SYMTestCaseDesc			Seek() passing a ESeekCurrent as a parameter.
-//!							Uses API elements: Set(), Seek().
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create RFile object.
-//!					4. Call Open() on RFile object passing a reference to RFs object as the first parameter, a TDesC file name
-//!					 reference as the second parameter, and EFileWrite as the third parameter.
-//!					5. Create TFileText object.
-//!					6. Call Set() passing a reference to RFile object as a parameter.
-//!					7. Call Seek() on TFileText passing ESeekCurrent as a parameter.
-//!					8. Delete TFiletext object.
-//!					9. Call Close() on RFile object.
-//!					10. Delete RFile object.
-//!					11. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Seek() panics with code FSCLIENT-5.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs		RFs1
-			CREATE_OBJECT	RFile		RFile1
-			CREATE_OBJECT	TFileText	TFileText1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		PBASE-F32-FileText-PublicApi-0014command5Open
-			COMMAND		TFileText1	new
-			COMMAND		TFileText1	Set		PBASE-F32-FileText-PublicApi-0014command8Set
-			COMMAND		TFileText1	Seek		PBASE-F32-FileText-PublicApi-0014command9Seek
-			COMMAND		TFileText1	~
-			COMMAND		RFile1		Close
-			COMMAND		RFs1		~
-	END_TEST_BLOCK	!PanicCode=5	!PanicString="FSCLIENT panic"
-END_TESTCASE				PBASE-F32-FileText-PublicApi-0014
-
-
-START_TESTCASE				REMOVE_FILES
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FileText-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	CFileMan	CFileMan1
-			COMMAND		RFs1	new
-			COMMAND		RFs1	Connect
-			COMMAND		CFileMan1	NewL	fileman_fs
-			COMMAND		CFileMan1	Delete	all_test_files
-			COMMAND		RFs1		RmDir	test_dir
-			COMMAND		CFileMan1	new
-			COMMAND		CFileMan1	~
-			COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE				REMOVE_FILES
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FindFile-PublicApi-OS.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,829 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName			pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment		This test script requires a basic ROM.
-//! @SYMScriptAuthor 			Dmitri Trofimov
-//! @SYMScriptDescription		The test script contains API tests for the following functions of TFindFile class:
-//! @SYMCreationDate			17/12/2006 
-//! TFindFile(RFs &aFs);
-//! TInt FindByPath(const TDesC &aFileName, const TDesC *aPathList);
-//! TInt FindByDir(const TDesC &aFileName, const TDesC &aDirPath);
-//! TInt FindWildByPath(const TDesC &aFileName, const TDesC *aPathList, CDir *&aDirList);
-//! TInt FindWildByDir(const TDesC &aFileName, const TDesC &aDirPath, CDir *&aDir);
-//! TInt Find();
-//! TInt FindWild(CDir *&aDirList);
-//! const TDesC &File() const;
-
-LOAD_SUITE				T_SfSrv
-DELAY					5000
-
-
-START_TESTCASE				SETUP_FILES
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	CFileMan	CFileMan1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		RFs1		MkDirAll	test_dir
-			COMMAND		RFs1		MkDirAll	test_dir1
-			COMMAND		RFs1		MkDirAll	test_dir2
-			COMMAND		CFileMan1	NewL	fileman_fs
-			COMMAND		CFileMan1	Copy	test_file1
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	Copy	test_file2
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	Copy	test_file3
-			COMMAND		CFileMan1	Close
-			COMMAND		CFileMan1	~
-			COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE				SETUP_FILES
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0001
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0001
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			TFindFile() passing a reference to a connected file session as a parameter. This tests for successful object creation and initialization.
-//!					Uses API elements: TFindFile()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Function does not leave nor panic
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TFindFile	TFindFile1	
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0001-command4new
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0001
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0002
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0002
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByPath() test. This tests for successful finding of a file.
-//!					Uses API elements: FindByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath()  passing file name "Test1.txt" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByPath returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1	
-			CREATE_OBJECT		TEntry		TEntry1
-			CREATE_OBJECT		CDir		CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0002-command4new
-			COMMAND			TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0002-command5FindByPath
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0002
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0003
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0003
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByPath() negative test. This tests for function returning KErrNotFound when the file cannot be found.
-//!					Uses API elements: FindByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath() passing file name "Test3.txt" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByPath returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1		new			
-			COMMAND			RFs1		Connect			
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0003-command4new
-			COMMAND	!Error=-1	TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0003-command5FindByPath
-			COMMAND			TFindFile1	~			
-			COMMAND			RFs1		~			
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0003
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0004
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0004
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByPath() negative test. This test for function returning KErrArgument when filename is empty.
-//!					Uses API elements: FindByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath() passing file empty name and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByPath returns KErrArgument.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs	RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1	new		
-			COMMAND			RFs1	Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0004-command4new
-			COMMAND	!Error=-6	TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0004-command5FindByPath
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0004
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0005
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0005
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByPath() negative test. This test for function returning KErrArgument when filename and path is empty.
-//!					Uses API elements: FindByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath() passing file empty name and empty path as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByPath returns KErrArgument.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0005-command4new
-			COMMAND	!Error=-6	TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0005-command5FindByPath
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0005
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0006
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0006
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByPath() negative test where filename has wildcard and other characters.
-//!					Uses API elements: FindByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath() passing file name "$%&?*" and path "\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByPath returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs	RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir		CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0006-command4new
-			COMMAND	!Error=-1	TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0006-command5FindByPath
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0006
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0007
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0007
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByPath() negative test where path has wildcard and other characters.
-//!					Uses API elements: FindByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath() passing file name "a" and path "$%&*?" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByPath returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs	RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0007-command4new
-			COMMAND	!Error=-1	TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0007-command5FindByPath
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0007
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0008
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0008
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByDir() test. This test for successful finding of file.
-//!					Uses API elements: FindByDir()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByDir() passing file name "Test1.txt" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByDir() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TFindFile	TFindFile1	
-			CREATE_OBJECT	TEntry	TEntry1
-			CREATE_OBJECT	CDir	CDir1
-			COMMAND		RFs1	new		
-			COMMAND		RFs1	Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0008-command4new
-			COMMAND		TFindFile1	FindByDir	PBASE-F32-FindFile-PublicApi-0008-command5FindByDir
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0008
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0009
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0009
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByDir() negative test. This tests for function returning KErrNotFound when the file cannot be found. 
-//!					Uses API elements: FindByDir()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByDir() passing file name "Test3.txt" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByDir() returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs	RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1	new		
-			COMMAND			RFs1	Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0009-command4new
-			COMMAND	!Error=-1	TFindFile1	FindByDir	PBASE-F32-FindFile-PublicApi-0009-command5FindByDir
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0009
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0010
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0010
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByDir() negative test. This tests for function returning KErrArgument when file name is empty.
-//!					Uses API elements: FindByDir()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByDir() passing file empty name and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindByDir() returns KErrArgument.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs	RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1	new		
-			COMMAND			RFs1	Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0010-command4new
-			COMMAND	!Error=-6	TFindFile1	FindByDir	PBASE-F32-FindFile-PublicApi-0010-command5FindByDir
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0010
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0011
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0011
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWildByPath() test. This tests for successful finding of file with wildcard.
-//!					Uses API elements: FindWildByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindWildByPath() passing file name "Test?.*" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWildByPath() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs		RFs1	
-			CREATE_OBJECT	TFindFile	TFindFile1	
-			CREATE_OBJECT	TEntry		TEntry1
-			CREATE_OBJECT	CDir		CDir1
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0011-command4new
-			COMMAND		TFindFile1	FindWildByPath	PBASE-F32-FindFile-PublicApi-0011-command5FindWildByPath
-			//!//!COMMAND		TFindFile1	cleanup		
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0011
-
-
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0012
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0012
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWildByPath() negative test. This tests for function returning KErrNotFound when the file cannot be found.
-//!					Uses API elements: FindWildByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindWildByPath() passing file name "?ester.*" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWildByPath() returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir		CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0012-command4new
-			COMMAND	!Error=-1	TFindFile1	FindWildByPath	PBASE-F32-FindFile-PublicApi-0012-command5FindWildByPath
-			//!//!COMMAND			TFindFile1	cleanup		
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0012
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0013
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0013
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWildByPath() negative test. This tests for function returning KErrArgument when the file cannot be found.
-//!					Uses API elements: FindWildByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindWildByPath() passing file empry name and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWildByPath() returns KErrArgument.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1	
-			CREATE_OBJECT		CDir		CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0013-command4new
-			COMMAND	!Error=-6	TFindFile1	FindWildByPath	PBASE-F32-FindFile-PublicApi-0013-command5FindWildByPath
-			//!COMMAND			TFindFile1	cleanup		
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0013
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0014
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0014
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWildByDir() test. This tests for successful finding of file with wildcard in name.
-//!					Uses API elements: FindWildByDir()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to a connected file session as a parameter.
-//!					4. Call FindWildByDir() passing file name "Test?.*" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWildByDir() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TFindFile	TFindFile1	
-			CREATE_OBJECT	TEntry	TEntry1
-			CREATE_OBJECT	CDir	CDir1
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0014-command4new
-			COMMAND		TFindFile1	FindWildByDir	PBASE-F32-FindFile-PublicApi-0014-command5FindWildByDir	
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0014
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0015
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0015
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWildByDir() negative test. This test for function returning KErrNotFound when the file cannont be found.
-//!					Uses API elements: FindWildByDir()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to a connected file session as a parameter.
-//!					4. Call FindWildByDir() passing file name "?ester.*" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWildByDir() returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs	RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0015-command4new
-			COMMAND	!Error=-1	TFindFile1	FindWildByDir	PBASE-F32-FindFile-PublicApi-0015-command5FindWildByDir
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0015
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0016
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0016
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWildByDir() negative test. This tests function returning KErrArgument when the file name is empty.
-//!					Uses API elements: FindWildByDir()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to a connected file session as a parameter.
-//!					4. Call FindWildByDir() passing file empty name and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWildByDir() returns KErrArgument.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1	
-			COMMAND			RFs1		new
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0016-command4new
-			COMMAND	!Error=-6	TFindFile1	FindWildByDir	PBASE-F32-FindFile-PublicApi-0016-command5FindWildByDir
-			//!COMMAND		TFindFile1	cleanup		
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0016
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0017
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0017
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			Find() test. This tests for successful finding of file after FindByPath() call.
-//!					Uses API elements: FindByPath(), Find()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath() passing file name "Test1.txt" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!					5. Call Find().
-//!					6. Call File() with checking that value is '\base\t_sfsrv\t_findfile\test2\Test1.txt'
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Find() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs		RFs1	
-			CREATE_OBJECT	TFindFile	TFindFile1	
-			CREATE_OBJECT	TEntry		TEntry1
-			CREATE_OBJECT	CDir		CDir1
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0017-command4new
-			COMMAND		TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0017-command5FindByPath
-			COMMAND		TFindFile1	Find		
-			COMMAND		TFindFile1	File		correct_file_path2
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0017
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0018
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0018
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			Find() negative test. This tests for function returning KErrNotFound when file cannot be found after FindByPath() call.
-//!					Uses API elements: FindByPath(), Find()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath() passing file name "Test2.txt" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!					5. Call Find().
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Find() returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1	
-			COMMAND			RFs1		new
-			CREATE_OBJECT		CDir		CDir1
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0018-command4new
-			COMMAND			TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0018-command5FindByPath
-			COMMAND	!Error=-1	TFindFile1	Find		
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0018
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0020
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0020
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			Find() negative test. This tests for function returning KErrNotFound when file cannot be found after
-//!					FindByDir() call.
-//!					Uses API elements: FindByDir(), Find()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Create RFile object
-//!					3. Call Rfs::Connect().
-//!					4. Call RFile::Create() and pass name "temp.txt" as parameter.
-//!					5. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					6. Call FindByDir() passing file name "temp.txt" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!					7. Call Find().
-//!					8. Call RFs::Delete() and pass name "temp.txt" as parameter.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Second Find() returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1
-			CREATE_OBJECT		RFile		RFile1
-			CREATE_OBJECT		TFindFile	TFindFile1
-			CREATE_OBJECT		CDir		CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFile1		new
-			COMMAND			RFs1		Connect	
-			COMMAND			RFile1		Create		PBASE-F32-FindFile-PublicApi-0020-command1Create
-			COMMAND			RFile1		Close
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0020-command4new
-			COMMAND			TFindFile1	FindByDir	PBASE-F32-FindFile-PublicApi-0020-command5FindByDir
-			COMMAND	!Error=-1	TFindFile1	Find
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1		Delete		PBASE-F32-FindFile-PublicApi-0020-command6Delete
-			COMMAND			RFile1		~
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0020
-
-
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0021
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0021
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWild() test. This test for successful finding of file ather FindWildByPath() call.
-//!					Uses API elements: FindWildByPath(), FindWild()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindWildByPath() passing file name "Test1.*" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!					5. Call FindWild()
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWild() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TFindFile	TFindFile1
-			CREATE_OBJECT	TEntry	TEntry1
-			CREATE_OBJECT	CDir	CDir1			
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0021-command4new
-			COMMAND		TFindFile1	FindWildByPath	PBASE-F32-FindFile-PublicApi-0021-command5FindWildByPath
-			COMMAND		TFindFile1	FindWild	common_dir_wrapper	
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0021
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0022
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0022
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWild() negative test. This test for function returning KErrNotFound if file cannot be found after FindWildByPath() call.
-//!					Uses API elements: FindWildByPath(), FindWild()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindWildByPath() passing file name "Test2.txt" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!					5. Call FindWild()
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWild() returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1	
-			CREATE_OBJECT		TFindFile	TFindFile1	
-			CREATE_OBJECT		CDir	CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFs1		Connect		
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0022-command4new
-			COMMAND			TFindFile1	FindWildByPath	PBASE-F32-FindFile-PublicApi-0022-command5FindWildByPath
-			COMMAND	!Error=-1	TFindFile1	FindWild	common_dir_wrapper	
-			COMMAND			TFindFile1	~		
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0022
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0024
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0024
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWild() negative test. This test for function returning KErrNotFound if file cannot be found after FindWildByDir() call.
-//!					Uses API elements: FindWildByDir(), FindWild()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Create RFile object
-//!					3. Call Connect().
-//!					4. Call RFile::Create() and pass name "temp.txt" as parameter.
-//!					5. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					6. Call FindWildByDir() passing file name "temp.*" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!					7. Call FindWild()
-//!					8. Call RFs::Delete() and pass name "temp.txt" as parameter.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Both FindWild() returns KErrNotFound.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT		RFs		RFs1
-			CREATE_OBJECT		RFile		RFile1
-			CREATE_OBJECT		TFindFile	TFindFile1	
-			CREATE_OBJECT		TEntry		TEntry1
-			CREATE_OBJECT		CDir		CDir1
-			COMMAND			RFs1		new		
-			COMMAND			RFile1		new
-			COMMAND			RFs1		Connect
-			COMMAND			RFile1		Create		PBASE-F32-FindFile-PublicApi-0024-command1Create
-			COMMAND			RFile1		Close
-			COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0024-command4new
-			COMMAND			TFindFile1	FindWildByDir	PBASE-F32-FindFile-PublicApi-0024-command5FindWildByDir
-			COMMAND	!Error=-1	TFindFile1	FindWild	common_dir_wrapper	
-			COMMAND			TFindFile1	~
-			COMMAND			RFs1		Delete		PBASE-F32-FindFile-PublicApi-0024-command6Delete
-			COMMAND			RFile1		~
-			COMMAND			RFs1	~		
-	END_TEST_BLOCK 
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0024
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0025
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0025
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByPath() test. This tests for function to return correct data.
-//!					Uses API elements: FindByPath(), File()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByPath() passing file name "Test1.txt" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!					5. Call File() with checking that value is '\base\t_sfsrv\t_findfile\test1\Test1.txt'
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		File returns "\base\t_sfsrv\t_findfile\test1\Test1.txt".
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs		RFs1
-			CREATE_OBJECT	TFindFile	TFindFile1
-			CREATE_OBJECT	TEntry		TEntry1
-			CREATE_OBJECT	CDir		CDir1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0025-command4new
-			COMMAND		TFindFile1	FindByPath	PBASE-F32-FindFile-PublicApi-0025-command5FindByPath
-			COMMAND		TFindFile1	File		correct_file_path
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0025
-
-
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0027
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0027
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWildByDir() test. This tests for successful finding of file without wildcard in name.
-//!					Uses API elements: FindWildByDir()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to a connected file session as a parameter.
-//!					4. Call FindWildByDir() passing file name "Test1.txt" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!					5. Call File() with checking that value is '\base\t_sfsrv\t_findfile\test1\Test1.txt'
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWildByDir() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs		RFs1	
-			CREATE_OBJECT	TFindFile	TFindFile1	
-			CREATE_OBJECT	TEntry		TEntry1
-			CREATE_OBJECT	CDir		CDir1
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0027-command4new
-			COMMAND		TFindFile1	FindWildByDir	PBASE-F32-FindFile-PublicApi-0027-command5FindWildByDir
-			COMMAND		TFindFile1	File	correct_file_path
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0027
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0028
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0028
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWildByPath() test. This tests for successful finding of file without wildcard in name.
-//!					Uses API elements: FindWildByPath()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindWildByPath() passing file name "Test1.txt" and path "\base\t_sfsrv\t_findfile\test1\;\base\t_sfsrv\t_findfile\test2\" as arguments.
-//!					5. Call File() with checking that value is '\base\t_sfsrv\t_findfile\test1\Test1.txt'
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWildByPath() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TFindFile	TFindFile1
-			CREATE_OBJECT	TEntry		TEntry1
-			CREATE_OBJECT	CDir		CDir1
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0028-command4new
-			COMMAND		TFindFile1	FindWildByPath	PBASE-F32-FindFile-PublicApi-0028-command5FindWildByPath
-			COMMAND		TFindFile1	File		correct_file_path
-			COMMAND		TFindFile1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0028
-
-
-START_TESTCASE				REMOVE_FILES
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-FindFile-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1
-			CREATE_OBJECT	CFileMan	CFileMan1
-			COMMAND		RFs1		new
-			COMMAND		RFs1		Connect
-			COMMAND		CFileMan1	NewL	fileman_fs
-			COMMAND		CFileMan1	Delete	all_files1
-			COMMAND		CFileMan1	Delete	all_files2
-			COMMAND		RFs1		RmDir	test_dir1
-			COMMAND		RFs1		RmDir	test_dir2
-			COMMAND		RFs1		RmDir	test_dir
-			COMMAND		CFileMan1	~
-			COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE				REMOVE_FILES
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-FindFile-PublicApi-REM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName			pbase-f32-sfsrv-publicapi-rem
-//! @SYMScriptTestEnvironment		This test script requires a basic ROM.
-//! @SYMScriptAuthor 			Dmitri Trofimov
-//! @SYMScriptDescription		The test script contains API tests for the following functions of TFindFile class:
-//! @SYMCreationDate			17/12/2006 
-//! TFindFile(RFs &aFs);
-//! TInt FindByDir(const TDesC &aFileName, const TDesC &aDirPath);
-//! TInt FindWildByDir(const TDesC &aFileName, const TDesC &aDirPath, CDir *&aDir);
-//! TInt Find();
-//! TInt FindWild(CDir *&aDirList);
-//! const TDesC &File() const;
-//! TInt SetFindMask(TUint aMask);
-
-LOAD_SUITE				T_SfSrv
-DELAY					5000
-
-
-START_TESTCASE				SETUP_FILES
-	START_TEST_BLOCK	100		T_SfSrv		\base\PBASE-F32-FindFile-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll	test_dir
-		COMMAND		RFs1		MkDirAll	test_dir1
-		COMMAND		RFs1		MkDirAll	test_rem_dir
-		COMMAND		RFs1		MkDirAll	test_rem_dir1
-		COMMAND		CFileMan1	NewL		fileman_fs
-		COMMAND		CFileMan1	Copy		test_file1
-		COMMAND		CFileMan1	Close
-		COMMAND		CFileMan1	Copy		test_rem_file1
-		COMMAND		CFileMan1	Close
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE				SETUP_FILES
-
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0019
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0019
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			Find() test. This tests for successful finding of file after FindByDir() call.
-//!					Uses API elements: FindByDir(), Find(), File()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Create RDir object.
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindByDir() passing file name "Test1.txt" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!					5. Call File() with checking that value is '\base\t_sfsrv\t_findfile\test1\Test1.txt'
-//!					60.Call Find().
-//!					71.Call File() with checking that value is 'x:\base\t_sfsrv\t_findfile\test1\Test1.txt'
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Find() returns KErrNone.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100		T_SfSrv		\base\PBASE-F32-FindFile-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	RDir		RDir1		
-		CREATE_OBJECT	TFindFile	TFindFile1	
-		COMMAND		RFs1		new
-		COMMAND		RDir1		new
-		COMMAND		RFs1		Connect
-		COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0019-command4new
-		COMMAND		TFindFile1	FindByDir	PBASE-F32-FindFile-PublicApi-0019-command5FindByDir
-		COMMAND		TFindFile1	File		correct_file_path
-		COMMAND		TFindFile1	Find		
-		COMMAND		TFindFile1	File		rem_correct_file_path
-		COMMAND		TFindFile1	~
-		COMMAND		RDir1		~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0019
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0023
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0023
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindWild() test. This test for successful finding of file ather FindWildByDir() call.
-//!					Uses API elements: FindWildByDir(), FindWild()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					4. Call FindWildByDir() passing file name "Test1.*" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!					5. Call FindWild().
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		FindWild() returns KErrNone. FindWild find file on another RAM drive.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100		T_SfSrv		\base\PBASE-F32-FindFile-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1	
-		CREATE_OBJECT	TFindFile	TFindFile1
-		CREATE_OBJECT	TEntry		TEntry1
-		CREATE_OBJECT	CDir		CDir1
-		COMMAND		RFs1		new		
-		COMMAND		RFs1		Connect		
-		COMMAND		TFindFile1	new		PBASE-F32-FindFile-PublicApi-0023-command4new
-		COMMAND		TFindFile1	FindWildByDir	PBASE-F32-FindFile-PublicApi-0023-command5FindWildByDir
-		COMMAND		TFindFile1	FindWild	common_dir_wrapper
-		COMMAND		TFindFile1	~		
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0023
-
-START_TESTCASE 				PBASE-F32-FindFile-PublicApi-0026
-//! @SYMTestCaseID			PBASE-F32-FindFile-PublicApi-0026
-//! @SYMAPI				TFindFile
-//! @SYMTestCaseDesc			FindByDir() test. This tests for function to return correct data.
-//!					Uses API elements: FindByDir(), SetFindMask(), File()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect().
-//!					3. Call SetFindMask() with invalid parameter .
-//!                 4. Call SetFindMask() KDriveAttRemovable as passed parameter.
-//!					5. Create TFindFile object passing a reference to the connected file session as a parameter.
-//!					6. Call FindByDir() passing file name "Test1.txt" and path "\base\t_sfsrv\t_findfile\test1\" as arguments.
-//!					7. Call Find() to switch path to removable drive
-//!					8. Call File() with checking that value is 'X:\base\t_sfsrv\t_findfile\test1\Test1.txt'
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		SetFindMask() with invalid parameter returns KErrArgument. and File returns a path on removable drive.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv		\base\PBASE-F32-FindFile-PublicApi.ini
-		CREATE_OBJECT		RFs		RFs1	
-		CREATE_OBJECT		TFindFile	TFindFile1	
-		CREATE_OBJECT		TEntry		TEntry1
-		CREATE_OBJECT		CDir		CDir1
-		COMMAND			RFs1		new			
-		COMMAND			RFs1		Connect		
-		COMMAND			TFindFile1	new		PBASE-F32-FindFile-PublicApi-0026-command4new
-		COMMAND	!Error=-6	TFindFile1	SetFindMask     PBASE-F32-FindFile-PublicApi-0026__mask_params
-		COMMAND			TFindFile1	SetFindMask	find_mask_params
-		COMMAND			TFindFile1	FindByDir	PBASE-F32-FindFile-PublicApi-0026-command5FindByDir
-		COMMAND			TFindFile1	Find			
-		COMMAND			TFindFile1	~		
-		COMMAND			RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-FindFile-PublicApi-0026
-
-
-START_TESTCASE				REMOVE_FILES
-	START_TEST_BLOCK	100		T_SfSrv		\base\PBASE-F32-FindFile-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		fileman_fs
-		COMMAND		CFileMan1	Delete		all_files1
-		COMMAND		CFileMan1	Delete		all_rem_files1
-		COMMAND		RFs1		RmDir		test_dir1
-		COMMAND		RFs1		RmDir		test_dir
-		COMMAND		RFs1		RmDir		test_rem_dir1
-		COMMAND		RFs1		RmDir		test_rem_dir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK
-END_TESTCASE				REMOVE_FILES
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Format-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Alvar Udras, Runno Sgirka
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of RFormat class:
-//!	TInt Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount);
-//!	void Close();
-
-LOAD_SUITE	t_sfsrv
-DELAY 5000
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-1004
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-1004
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) test. Call Open() with invalid
-//!				drive letter value.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   "InvalidDriveLetter", EQuickFormat, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -28 (KErrBadName).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			format1	new
-		COMMAND	!Error=-28	format1	Open		PBASE-F32-Format-PublicApi-1004-001-Open_command05
-		COMMAND			format1	Close
-		COMMAND			format1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-1004
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-1006
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-1006
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Function Close() test. Call Close() without calling Open() first.
-//!				Uses API elements: Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Close() to close the RFormat instance.
-//!				4. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Close() method call will complete without errors.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-1006
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-1011
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-1011
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) test. Call Open() with
-//!				not mounted drive letter value.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   "NotMountedDriveChar", EQuickFormat, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -18 (KErrNotReady).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			format1	new
-		COMMAND	!Error=-18	format1	Open		PBASE-F32-Format-PublicApi-1011-001-Open_command05
-		COMMAND			format1	Close
-		COMMAND			format1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-1011
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Format-PublicApi-REM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,445 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-rem
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Alvar Udras, Runno Sgirka
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of RFormat class:
-//!	TInt Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount);
-//!	TInt Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount, const TDesC8 &anInfo);
-//!	void Close();
-//!	TInt Next(TInt &aStep);
-//!	void Next(TPckgBuf< TInt > &aStep, TRequestStatus &aStatus);
-
-LOAD_SUITE	t_sfsrv
-DELAY 5000
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0001
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Functions Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) and Close() test. Open a removable device
-//!				using EQuickFormat as format mode and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, EQuickFormat, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-Format-PublicApi-0001-001-Open_command05
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0002
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Functions Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) and Close() test. Open a removable device
-//!				using EHighDensity as format mode and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, EHighDensity, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-Format-PublicApi-0002-001-Open_command05
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0002
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0003
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Functions Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) and Close() test. Open a removable device
-//!				using ELowDensity as format mode and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, ELowDensity, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-Format-PublicApi-0003-001-Open_command05
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0003
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0004
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0004
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Functions Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) and Close() test. Open a removable device
-//!				using EFullFormat as format mode and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, EFullFormat, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-Format-PublicApi-0004-001-Open_command05
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0004
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0005
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Functions Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) and Close() test. Open a removable device
-//!				using ESpecialFormat as format mode and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, ESpecialFormat, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	So we are getting -21(access denied ) for formatting a disk with invalid parameter.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			format1	new
-		COMMAND			format1	Open		PBASE-F32-Format-PublicApi-1005-001-Open_command05
-		COMMAND	!AsyncError=-21	format1	Next		PBASE-F32-Format-PublicApi-1005-001-Next_command06
-		OUTSTANDING
-		COMMAND			format1	Close
-		COMMAND			format1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0005
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0006
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount, const TDesC8 &anInfo) test. Open
-//!				a device and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount, const TDesC8 &anInfo) method,
-//!				   passing the RFs session, removable drive letter, EQuickFormat, aCount, special format information s as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-Format-PublicApi-0006-001-Open_command05
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0006
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0007
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Function Next(TInt &aStep) test. Open a removable device, execute the next format steps and close the device.
-//!				Uses API elements: Open(), Next(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, EHighDensity, aCount as parameters.
-//!				4. Call Next(TInt &aStep) method, passing aCount as parameter and loop it until aCount reaches 0.
-//!				5. Call Close() to close the RFormat instance.
-//!				6. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Next() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-Format-PublicApi-0007-001-Open_command05
-		COMMAND		format1	Next
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0007
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0008
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Function Next(TPckgBuf< TInt > &aStep, TRequestStatus &aStatus) test. Open a removable device, execute the next format
-//!				steps and close the device.
-//!				Uses API elements: Open(), Next(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, EHighDensity, aCount as parameters.
-//!				4. Call Next(TPckgBuf< TInt > &aStep, TRequestStatus &aStatus) method, passing aCount,
-//!				   activeListener -> iStatus as parameters and loop it until aCount reaches 0.
-//!				5. Call Close() to close the RFormat instance.
-//!				6. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Next() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-Format-PublicApi-0008-001-Open_command05
-		COMMAND		format1	Next		PBASE-F32-Format-PublicApi-0008-001-Next_command06
-		OUTSTANDING	
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0008
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-0009
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Functions Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) and Close() test. Open a removable device
-//!				using EForceErase as format mode and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, EForceErase, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		format1	new
-		COMMAND		format1	Open		PBASE-F32-Format-PublicApi-0009-001-Open_command05
-		COMMAND		format1	Close
-		COMMAND		format1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-0009
-
-
-// 	************************
-//	***  NEGATIVE TESTS  ***
-// 	************************
-
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-1005
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-1005
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) test. Call Open() with invalid
-//!				format mode value.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, -1, aCount as parameters.
-//!				4. Call Next(TPckgBuf< TInt > &aStep, TRequestStatus &aStatus) method, passing aCount,
-//!				   activeListener -> iStatus as parameters and loop it until aCount reaches 0.
-//!				5. Call Close() to close the RFormat instance.
-//!				6. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -21 (Access denied).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			format1	new
-		COMMAND			format1	Open		PBASE-F32-Format-PublicApi-1005-001-Open_command05
-		COMMAND	!AsyncError=-21	format1	Next		PBASE-F32-Format-PublicApi-1005-001-Next_command06
-		OUTSTANDING
-		COMMAND			format1	Close
-		COMMAND			format1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-1005
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-1009
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-1009
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Functions Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) test. Open a removable device
-//!				using EQuickFormat as format mode after opening a file on it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Create an RFile instance.
-//!				4. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, EQuickFormat, aCount as parameters.
-//!				5. Call Close() to close the RFormat instance.
-//!				6. Close RFile instance.
-//!				7. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -14 (KErrInUse).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFile	file
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			file	new
-		COMMAND			file	Create		PBASE-F32-Format-PublicApi-1009-001-Create_command05
-		COMMAND			format1	new
-		COMMAND	!Error=-14	format1	Open		PBASE-F32-Format-PublicApi-1009-001-Open_command08
-		COMMAND			format1	Close
-		COMMAND			format1	~
-		COMMAND			file	Close
-		COMMAND			file	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-1009
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-1010
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-1010
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		A test which stops the format in the middle and tries to create a RFs instance after that.
-//!				Uses API elements: Open(), Next(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   removable drive letter, EHighDensity, aCount as parameters.
-//!				4. Call Next(TPckgBuf< TInt > &aStep, TRequestStatus &aStatus) method, passing aCount,
-//!				   activeListener -> iStatus as parameters and loop it.
-//!				5. Call Close() to close the RFormat instance, without calling outstanding first.
-//!				6. Create an RFile instance.
-//!				7. Close RFile instance.
-//!				8. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method to format the disk for future
-//!				   usage, passing the RFs session, removable drive letter, EHighDensity, aCount as parameters.
-//!				9. Call Next(TInt &aStep) method, passing aCount as parameter and loop it until aCount reaches 0.
-//!				10. Call Close() to close the RFormat instance.
-//!				11. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The RFs create method call will return error -20 (KErrCorrupt).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		CREATE_OBJECT	RFile	file
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			format1	new
-		COMMAND			format1	Open		PBASE-F32-Format-PublicApi-1010-001-Open_command05
-		COMMAND			format1	Next		PBASE-F32-Format-PublicApi-1010-001-Next_command06
-		ASYNC_DELAY 10
-		COMMAND			format1	Close
-		COMMAND			format1	~
-		COMMAND			file	new
-		COMMAND	!Error=-20	file	Create		PBASE-F32-Format-PublicApi-1010-001-Create_command10
-		COMMAND			file	Close
-		COMMAND			file	~
-		COMMAND			format1	new
-		COMMAND			format1	Open		PBASE-F32-Format-PublicApi-1010-001-Open_command14
-		COMMAND			format1	Next
-		COMMAND			format1	Close
-		COMMAND			format1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-1010
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Format-PublicApi-ROM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-rom
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Alvar Udras, Runno Sgirka
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of RFormat class:
-//!	TInt Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount);
-//!	void Close();
-
-LOAD_SUITE	t_sfsrv
-DELAY 5000
-
-
-START_TESTCASE 			PBASE-F32-Format-PublicApi-1002
-//! @SYMTestCaseID		PBASE-F32-Format-PublicApi-1002
-//! @SYMAPI			RFormat
-//! @SYMTestCaseDesc		Functions Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) and Close() test. Open a ROM device
-//!				using EQuickFormat as format mode and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount) method, passing the RFs session,
-//!				   ROM drive letter, EQuickFormat, aCount as parameters.
-//!				4. Call Close() to close the RFormat instance.
-//!				5. Close RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -14 (KErrInUse).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-Format-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			format1	new
-		COMMAND	!Error=-14	format1	Open		PBASE-F32-Format-PublicApi-1002-001-Open_command05
-		COMMAND			format1	Close
-		COMMAND			format1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-Format-PublicApi-1002
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-OpenFileScan-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,351 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//!	@file
-//!	@SYMTestSuiteName			pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment		This test script requires a basic ROM.
-//!	@SYMScriptAuthor 			Dmitri Trofimov, Anton Grober
-//!	@SYMScriptCreationDate			17/12/2006 
-//!	@SYMScriptDescription			The test script contains API tests for the following functions of TOpenFileScan class
-//!	TOpenFileScan(RFs &aFs);
-//!	void NextL(CFileList *&aFileList);
-//!	TThreadId ThreadId() const;
-
-LOAD_SERVER	T_SfSrv –SharedData 
-DELAY		5000
-
-START_TESTCASE 				PBASE-F32-OpenFileScan-PublicApi-0001
-//! @SYMTestCaseID			PBASE-F32-OpenFileScan-PublicApi-0001
-//! @SYMAPI				TOpenFileScan
-//! @SYMTestCaseDesc			TOpenFileScan() passing a reference to an open RFs object as a parameter
-//!					Uses API elements: TOpenFileScan()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect on RFs.
-//!					3. Create TOpenFileScan object passing a reference to the RFs object as a parameter.
-//!					4. Delete TOpenFileScan object.
-//!					5. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Function does not leave nor panic.
-//!
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll	PathToRamDir
-		COMMAND		CFileMan1	NewL		RFs1Used
-		COMMAND		CFileMan1	Copy		CopyTest1
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	RFile	RFile1	
-			CREATE_OBJECT	TOpenFileScan	TOpenFileScan1	
-			COMMAND		RFs1	new		
-			COMMAND		RFs1	Connect		
-			COMMAND		RFile1	new
-			COMMAND		RFile1	Open		filename1
-			COMMAND		RFile1	Close
-			COMMAND		TOpenFileScan1	new	PBASE-F32-OpenFileScan-PublicApi-0001command4new
-			COMMAND		TOpenFileScan1	~		
-			COMMAND		RFs1	~		
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		RFs1Used
-		COMMAND		CFileMan1	Delete		DeleteRamFiles
-		COMMAND		RFs1		RmDir		PathToRamDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE				PBASE-F32-OpenFileScan-PublicApi-0001
-
-START_TESTCASE 				PBASE-F32-OpenFileScan-PublicApi-0002
-//! @SYMTestCaseID			PBASE-F32-OpenFileScan-PublicApi-0002
-//! @SYMAPI				TOpenFileScan
-//! @SYMTestCaseDesc			NextL()
-//!					Uses API elements: NextL()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect() on RFs.
-//!					3. Create TOpenFileScan object passing a reference to th RFs object as a parameter.
-//!					4. Call NextL() on TOpenFileScan passing CFileList pointer as a parameter.
-//!					5. Delete TOpenFileScan object.
-//!					6. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		NextL() doest not leave nor panic.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TOpenFileScan	TOpenFileScan1	
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		TOpenFileScan1	new		PBASE-F32-OpenFileScan-PublicApi-0002command4new
-			COMMAND		TOpenFileScan1	NextL		
-			COMMAND		TOpenFileScan1	~		
-			COMMAND		RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-OpenFileScan-PublicApi-0002
-
-START_TESTCASE 				PBASE-F32-OpenFileScan-PublicApi-0003
-//! @SYMTestCaseID			PBASE-F32-OpenFileScan-PublicApi-0003
-//! @SYMAPI				TOpenFileScan
-//! @SYMTestCaseDesc			ThreadId() test.
-//!					Uses API elements: NextL(), ThreadId()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect() on RFs.
-//!					3. Call Open() on RFile to open file name in test dir 'Test1.txt'.
-//!					4. Create TOpenFileScan object passing a reference to the RFs object as a parameter.
-//!					5. Call NextL(). Call with parameter expected_file to make this function loop until neccessary file found in
-//!					 CFileList being returned by function.
-//!					6. Call ThreadId() on TOpenFileScan and compare it with returned by CT_FsData::ThreadId() function.
-//!					7. Delete TOpenFileScan object.
-//!					8. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		ThreadId() returns same value as got from CT_FsData suite using ThreadId() function.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll	PathToRamDir
-		COMMAND		CFileMan1	NewL		RFs1Used
-		COMMAND		CFileMan1	Copy		CopyTest1
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TOpenFileScan	TOpenFileScan1	
-			CREATE_OBJECT	RFile	RFile1	
-			COMMAND		RFs1	new		
-			COMMAND		RFs1	Connect		
-			COMMAND		RFile1	new
-			COMMAND		RFile1	Open			filename1
-			COMMAND		TOpenFileScan1	new		PBASE-F32-OpenFileScan-PublicApi-0003command4new
-			COMMAND		TOpenFileScan1	NextL		look_for_file1
-			COMMAND		TOpenFileScan1	ThreadId	filesession_for_thread1
-			COMMAND		TOpenFileScan1	~		
-			COMMAND		RFs1	~		
-			COMMAND		RFile1	Close
-			COMMAND		RFile1	~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		RFs1Used
-		COMMAND		CFileMan1	Delete		DeleteRamFiles
-		COMMAND		RFs1		RmDir		PathToRamDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE				PBASE-F32-OpenFileScan-PublicApi-0003
-
-START_TESTCASE 				PBASE-F32-OpenFileScan-PublicApi-0004
-//! @SYMTestCaseID			PBASE-F32-OpenFileScan-PublicApi-0004
-//! @SYMAPI				TOpenFileScan
-//! @SYMTestCaseDesc			TOpenFileScan() passing a reference to an open RFs object as a parameter
-//!					Uses API elements: TOpenFileScan()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Create TOpenFileScan object passing a reference to the RFs object as a parameter.
-//!					3. Delete TOpenFileScan object.
-//!					4. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		Function does not leave nor panic.
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TOpenFileScan	TOpenFileScan1	
-			COMMAND		RFs1		new		
-			COMMAND		TOpenFileScan1	new		PBASE-F32-OpenFileScan-PublicApi-0004command3new
-			COMMAND		TOpenFileScan1	~		
-			COMMAND		RFs1		~		
-	END_TEST_BLOCK
-END_TESTCASE				PBASE-F32-OpenFileScan-PublicApi-0004
-
-
-
-START_TESTCASE 				PBASE-F32-OpenFileScan-PublicApi-0005
-//! @SYMTestCaseID			PBASE-F32-OpenFileScan-PublicApi-0005
-//! @SYMAPI				TOpenFileScan
-//! @SYMTestCaseDesc			ThreadId() test with 2 simulateonus threads.
-//!					Uses API elements: NextL(), ThreadId()
-//! @SYMTestActions			For thread 1.
-//!					1. Create RFs object.
-//!					2. Call Connect() on RFs.
-//!					3. Call Open() on RFile to open file name 'Test1.txt' in test directory.
-//!					4. Create TOpenFileScan object passing a reference to the RFs object as a parameter.
-//!					5. Call NextL(). Call with parameter expected_file to make this function loop until neccessary file found in
-//!					 CFileList being returned by function.
-//!					6. Call ThreadId() on TOpenFileScan.
-//!					7. Delete TOpenFileScan object.
-//!					8. Delete RFs object.
-//!
-//!					For thread 2:
-//!					1. Create RFs object.
-//!					2. Call Connect() on RFs.
-//!					3. Call Open() on RFile to open file name 'Test2.txt' in test directory.
-//!					4. Create TOpenFileScan object passing a reference to the RFs object as a parameter.
-//!					5. Call NextL(). Call with parameter expected_file to make this function loop until neccessary file found in 
-//!					CFileList being returned by function.
-//!					6. Call ThreadId() on TOpenFileScan.
-//!					7. Delete TOpenFileScan object.
-//!					8. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		ThreadId() returns same value as got from CT_FsData suite using ThreadId() function for each thread.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll	PathToRamDir
-		COMMAND		CFileMan1	NewL		RFs1Used
-		COMMAND		CFileMan1	Copy		CopyTest1
-		COMMAND		CFileMan1	Copy		CopyTest2
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	CONCURRENT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TOpenFileScan	TOpenFileScan1	
-			CREATE_OBJECT	RFile		RFile1	
-			COMMAND		RFs1		new		
-			COMMAND		RFs1		Connect		
-			COMMAND		RFile1		new
-			COMMAND		RFile1		Open		filename1
-			COMMAND		TOpenFileScan1	new		PBASE-F32-OpenFileScan-PublicApi-0003command4new
-			COMMAND		TOpenFileScan1	NextL		look_for_file1
-			COMMAND		TOpenFileScan1	ThreadId	filesession_for_thread1
-			COMMAND		TOpenFileScan1	~		
-			COMMAND		RFs1		~		
-			COMMAND		RFile1		Close
-			COMMAND		RFile1		~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs2	
-			CREATE_OBJECT	TOpenFileScan	TOpenFileScan2	
-			CREATE_OBJECT	RFile	RFile2	
-			COMMAND		RFs2	new		
-			COMMAND		RFs2	Connect		
-			COMMAND		RFile2	new
-			COMMAND		RFile2	Open			filename2
-			COMMAND		TOpenFileScan2	new		OpenFileScanNew
-			COMMAND		TOpenFileScan2	NextL		look_for_file2
-			COMMAND		TOpenFileScan2	ThreadId	filesession_for_thread2
-			COMMAND		TOpenFileScan2	~		
-			COMMAND		RFs2	~		
-			COMMAND		RFile2	Close
-			COMMAND		RFile2	~
-	END_TEST_BLOCK
-	CONSECUTIVE
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		RFs1Used
-		COMMAND		CFileMan1	Delete		DeleteRamFiles
-		COMMAND		RFs1		RmDir		PathToRamDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE				PBASE-F32-OpenFileScan-PublicApi-0005
-
-START_TESTCASE 				PBASE-F32-OpenFileScan-PublicApi-0006
-//! @SYMTestCaseID			PBASE-F32-OpenFileScan-PublicApi-0006
-//! @SYMAPI				TOpenFileScan
-//! @SYMTestCaseDesc			ThreadId() test.
-//!					Uses API elements: NextL(), ThreadId()
-//! @SYMTestActions			1. Create RFs object.
-//!					2. Call Connect() on RFs.
-//!					3. Call Open() on RFile1 to open file named 'Test1.txt' in test directory.
-//!					4. Call Open() on RFile2 to open file named 'Test2.txt' in test directory.
-//!					5. Create TOpenFileScan object passing a reference to the RFs object as a parameter.
-//!					6. Call NextL(). Call with parameter expected_file to make this function loop until neccessary file found in CFileList being returned by function. 
-//!					
-//!					7. Call ThreadId() on TOpenFileScan.
-//!					8. Delete RFile1 object
-//!					9. Delete RFile2 object.
-//!					8. Delete TOpenFileScan object.
-//!					9. Delete RFs object.
-//!
-//! @SYMTestStatus			Implemented
-//! @SYMTestPriority			Critical
-//! @SYMTestExpectedResults		ThreadId() returns same value as got from CT_FsData suite using ThreadId() function.
-//! @SYMTestType			CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		RFs1		MkDirAll	PathToRamDir
-		COMMAND		CFileMan1	NewL		RFs1Used
-		COMMAND		CFileMan1	Copy		CopyTest1
-		COMMAND		CFileMan1	Copy		CopyTest2
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-			CREATE_OBJECT	RFs	RFs1	
-			CREATE_OBJECT	TOpenFileScan	TOpenFileScan1	
-			CREATE_OBJECT	RFile	RFile1	
-			CREATE_OBJECT	RFile	RFile2	
-			COMMAND		RFs1	new		
-			COMMAND		RFs1	Connect		
-			COMMAND		RFile1	new
-			COMMAND		RFile2	new
-			COMMAND		RFile1	Open			filename1
-			COMMAND		RFile2	Open			filename3
-			COMMAND		TOpenFileScan1	new		PBASE-F32-OpenFileScan-PublicApi-0003command4new
-			COMMAND		TOpenFileScan1	NextL		look_for_many_files
-			COMMAND		TOpenFileScan1	ThreadId	filesession_for_thread1
-			COMMAND		TOpenFileScan1	~		
-			COMMAND		RFs1	~		
-			COMMAND		RFile1	Close
-			COMMAND		RFile1	~
-			COMMAND		RFile2	Close
-			COMMAND		RFile2	~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-OpenFileScan-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1		new			
-		COMMAND		RFs1		Connect
-		COMMAND		CFileMan1	NewL		RFs1Used
-		COMMAND		CFileMan1	Delete		DeleteRamFiles
-		COMMAND		RFs1		RmDir		PathToRamDir
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE				PBASE-F32-OpenFileScan-PublicApi-0006
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Parse-Inherited-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1074 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//!	@file
-//!	@SYMTestSuiteName			pbase-f32-sfsrv-publicapi-any
-//!	@SYMScriptTestEnvironment		This test script requires a basic ROM.
-//!	@SYMScriptAuthor 			Dmitri Trofimov, Sergei Tveritin
-//!	@SYMCreationDate			11/12/2006
-//!	@SYMScriptDescription			The test script contains API tests for the following functions of T_Parse class:
-//!	T_Parse();
-//!	TInt PopDir();
-//!	TInt AddDir(const TDesC &aName);
-//!	const TDesC &FullName() const;
-//!	TPtrC Drive() const;
-//!	TPtrC Path() const;
-//!	TPtrC DriveAndPath() const;
-//!	TPtrC Name() const;
-//!	TPtrC Ext() const;
-//!	TPtrC NameAndExt() const;
-//!	TBool DrivePresent() const;
-//!	TBool PathPresent() const;
-//!	TBool NamePresent() const;
-//!	TBool ExtPresent() const;
-//!	TBool NameOrExtPresent() const;
-//!	TBool IsRoot() const;
-//!	TBool IsWild() const;
-//!	TBool IsKMatchOne() const;
-//!	TBool IsKMatchAny() const;
-//!	TBool IsNameWild() const;
-//!	TBool IsExtWild() const;
-
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0001
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		FullName() test. 
-//!				Uses API elements: Set(),  FullName()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call FullName(). Expecting 'c:\dir1\dir2\filename.ext'
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The value returned by FullName() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0001command2Set
-			COMMAND		TParse1	FullName	PBASE-F32-ParseBase-PublicApi-0001command3FullName
-			COMMAND		TParse1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0002
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Drive() test where drive is present.
-//!				Uses API elements: Set(),  Drive()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Drive(). Expecting 'c:' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Drive() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0002command2Set
-			COMMAND		TParse1	Drive		PBASE-F32-ParseBase-PublicApi-0002command3Drive
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0002
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0003
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Drive() test where drive is not present.
-//!				Uses API elements: Set(),  Drive()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'filename.ext'.
-//!				2. Call Drive(). Expecting empty string.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Drive() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0003command2Set
-			COMMAND		TParse1	Drive		PBASE-F32-ParseBase-PublicApi-0003command3Drive
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0003
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0005
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Path() test where path is present.
-//!				Uses API elements: {USE_SET} Path()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Path(). Expecting '\dir1\dir2\' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Path() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0005command2Set
-			COMMAND		TParse1	Path		PBASE-F32-ParseBase-PublicApi-0005command3Path
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0005
-
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0006
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Path() test where path is not present.
-//!				Uses API elements: Set(),  Path()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'filename.ext'.
-//!				2. Call Path(). Expecting ''(empty string) on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Path() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0006command2Set
-			COMMAND		TParse1	Path		PBASE-F32-ParseBase-PublicApi-0006command3Path
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0006
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0007
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		DriveAndPath() test where passing full path with drive and filename.
-//!							Uses API elements: Set(),  DriveAndPath()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call DriveAndPath(). Expecting 'c:\dir1\dir2\' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0007command2Set
-			COMMAND		TParse1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0007command3DriveAndPath
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0007
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0008
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		DriveAndPath() test with passing only filename.
-//!					Uses API elements: Set(),  DriveAndPath()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'filename.ext'.
-//!				2. Call DriveAndPath(). Expecting empty string.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0008command2Set
-			COMMAND		TParse1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0008command3DriveAndPath
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0008
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0009
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		DriveAndPath() test with passing  path and filename, but without drive letter.
-//!					Uses API elements: Set(),  DriveAndPath()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing '\dir1\filename.ext'.
-//!				2. Call DriveAndPath(). Expecting '\dir1\' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0009command2Set
-			COMMAND		TParse1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0009command3DriveAndPath
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0009
-
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0010
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0010
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Name() test passing complete path with filename and drive letter.
-//!				Uses API elements: Set(),  Name()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Name(). Expecting 'filename' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Name() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0010command2Set
-			COMMAND		TParse1	Name		PBASE-F32-ParseBase-PublicApi-0010command3Name
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0010
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0011
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0011
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Name() test on path without filename.
-//!				Uses API elements: Set(),  Name()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\'.
-//!				2. Call Name(). Expecting ''(empty string) on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Name() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0011command2Set
-			COMMAND		TParse1	Name		PBASE-F32-ParseBase-PublicApi-0011command3Name
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0011
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0012
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0012
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Ext() test passing complete path with filename with extension and drive letter.
-//!				Uses API elements: Set(),  Ext()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Ext(). Expecting '.ext' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0012command2Set
-			COMMAND		TParse1	Ext		PBASE-F32-ParseBase-PublicApi-0012command3Ext
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0012
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0013
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0013
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Ext() test passing complete path with filename without extension.
-//!				Uses API elements: Set(),  Ext()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename'.
-//!				2. Call Ext(). Expecting '' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0013command2Set
-			COMMAND		TParse1	Ext		PBASE-F32-ParseBase-PublicApi-0013command3Ext
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0013
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0014
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0014
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		Ext() test passing complete path without filename and extension.
-//!				Uses API elements: Set(),  Ext()
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\'.
-//!				2. Call Ext(). Expecting '' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0014command2Set
-			COMMAND		TParse1	Ext		PBASE-F32-ParseBase-PublicApi-0014command3Ext
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0014
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0015
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0015
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NameAndExt() test where name and extension is present.
-//!				Uses API elements: Set(),  NameAndExt().
-//! @SYMTestActions		1. Create TParse object. Call Set()   passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call NameAndExt(). Expecting 'filename.ext' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0015command2Set
-			COMMAND		TParse1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0015command3NameAndExt
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0015
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0016
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0016
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NameAndExt() test where name and extension is not present.
-//!				Uses API elements: Set(),  NameAndExt().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\'.
-//!				2. Call NameAndExt(). Expecting ''(empty string) on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0016command2Set
-			COMMAND		TParse1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0016command3NameAndExt
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0016
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0017
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0017
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NameAndExt() test with full path and filename, but without extension
-//!				Uses API elements: Set(),  NameAndExt().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename'.
-//!				2. Call NameAndExt(). Expecting 'filename' on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0017command2Set
-			COMMAND		TParse1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0017command3NameAndExt
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0017
-
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0018
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0018
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		DrivePresent() test where drive is present.
-//!				Uses API elements: Set(),  DrivePresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call DrivePresent(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DrivePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0018command2Set
-			COMMAND		TParse1	DrivePresent	PBASE-F32-ParseBase-PublicApi-0018command3DrivePresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0018
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0019
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0019
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		DrivePresent() test, where drive is not present.
-//!				Uses API elements: DrivePresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing '\dir1\dir2\filename.ext'.
-//!				2. Call DrivePresent(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DrivePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0019command2Set
-			COMMAND		TParse1	DrivePresent	PBASE-F32-ParseBase-PublicApi-0019command3DrivePresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0019
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0020
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0020
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		PathPresent() test, where path is present.
-//!				Uses API elements: Set(),  PathPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call PathPresent(). Expecting TRUE on return .
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0020command2Set
-			COMMAND		TParse1	PathPresent	PBASE-F32-ParseBase-PublicApi-0020command3PathPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0020
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0021
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0021
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		PathPresent() test, where path is not present.
-//!				Uses API elements: PathPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'filename.ext'.
-//!				2. Call PathPresent(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0021command2Set
-			COMMAND		TParse1	PathPresent	PBASE-F32-ParseBase-PublicApi-0021command2PathPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0021
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0022
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0022
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		PathPresent() test with wildcard as path
-//!				Uses API elements: Set(),  PathPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing '*\filename.ext'.
-//!				2. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT		TParse	TParse1	
-			COMMAND			TParse1	new		
-			COMMAND	!Error=-28	TParse1	Set	PBASE-F32-ParseBase-PublicApi-0022command2Set
-			COMMAND			TParse1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0022
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0023
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0023
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NamePresent() test, where name is present.
-//!				Uses API elements: Set(),  NamePresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call NamePresent(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0023command2Set
-			COMMAND		TParse1	NamePresent	PBASE-F32-ParseBase-PublicApi-0023command3NamePresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0023
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0024
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0024
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NamePresent() test, where name is not present.
-//!				Uses API elements: NamePresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\'
-//!				2. Call NamePresent(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0024command2Set
-			COMMAND		TParse1	NamePresent	PBASE-F32-ParseBase-PublicApi-0024command2NamePresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0024
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0025
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0025
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NamePresent() test with wildcards in name.
-//!				Uses API elements: Set(),  NamePresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\*.ext'.
-//!				2. Call NamePresent(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0025command2Set
-			COMMAND		TParse1	NamePresent	PBASE-F32-ParseBase-PublicApi-0025command3NamePresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0025
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0026
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0026
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		ExtPresent() test, where extension is present.
-//!				Uses API elements: Set(),  ExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call ExtPresent(). Expecting TRUE on return.
-//!				3 Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0026command2Set
-			COMMAND		TParse1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0026command3ExtPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0026
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0027
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0027
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		ExtPresent() test where extension is not present.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0027command2Set
-			COMMAND		TParse1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0027command2ExtPresent
-			COMMAND		TParse1	~	
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0027
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0028
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0028
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		ExtPresent() test with wildcards in name.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0028command2Set
-			COMMAND		TParse1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0028command3ExtPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0028
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0029
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0029
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		ExtPresent() test with wildcards in extension.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.*'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0029command2Set
-			COMMAND		TParse1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0029command3ExtPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0029
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0030
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0030
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NameOrExtPresent() test where name and extension present.
-//!					Uses API elements: Set(),  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set			PBASE-F32-ParseBase-PublicApi-0030command2Set
-			COMMAND		TParse1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0030command3NameOrExtPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0030
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0031
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0031
-//! @SYMAPI			T_Parse
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NameOrExtPresent() test where name and extension is not present.
-//!				Uses API elements: Set(),  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\'
-//!				2. Call NameOrExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set			PBASE-F32-ParseBase-PublicApi-0031command2Set
-			COMMAND		TParse1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0031command2NameOrExtPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0031
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0032
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0032
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NameOrExtPresent() test with wildcards in name.
-//!				Uses API elements: Set(),  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set			PBASE-F32-ParseBase-PublicApi-0032command2Set
-			COMMAND		TParse1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0032command3NameOrExtPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0032
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0033
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0033
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NameOrExtPresent() test with wildcards in extension.
-//!				Uses API elements: Set(),  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.*'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set			PBASE-F32-ParseBase-PublicApi-0033command2Set
-			COMMAND		TParse1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0033command3NameOrExtPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0033
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0034
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0034
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		NameOrExtPresent() test whre wildcard as filename and extension.
-//!				Uses API elements: Set(),  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\*'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set			PBASE-F32-ParseBase-PublicApi-0034command2Set
-			COMMAND		TParse1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0034command3NameOrExtPresent
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0034
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0035
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0035
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsRoot() test where path is root.
-//!				Uses API elements: Set(),  IsRoot().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\'
-//!				2. Call IsRoot(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsRoot() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0035command2Set
-			COMMAND		TParse1	IsRoot		PBASE-F32-ParseBase-PublicApi-0035command3IsRoot
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0035
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0036
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0036
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsRoot() test where path is not root.
-//!				Uses API elements: Set(),  IsRoot().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\'
-//!				2. Call IsRoot(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsRoot() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0036command2Set
-			COMMAND		TParse1	IsRoot		PBASE-F32-ParseBase-PublicApi-0036command3IsRoot
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0036
-
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0037
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0037
-//! @SYMAPI					T_Parse
-//! @SYMTestCaseDesc		IsWild() test where path has a wildcard.
-//!					Uses API elements: Set(),  IsWild().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dri1\dir2\*.ext'
-//!				2. Call IsWild(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0037command2Set
-			COMMAND		TParse1	IsWild		PBASE-F32-ParseBase-PublicApi-0037command3IsWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0037
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0038
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0038
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsWild() test where path has not a wildcard.
-//!					Uses API elements: Set(),  IsWild().
-//! @SYMTestActions		1. Create TParse object. Call Set()   passing 'c:\dir1\dir2\nowildcras.ext'
-//!				2. Call IsWild(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0038command2Set
-			COMMAND		TParse1	IsWild		PBASE-F32-ParseBase-PublicApi-0038command3IsWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0038
-
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0039
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0039
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsKMatchOne() test where the name contains a question mark wildcard.
-//!				Uses API elements: Set(),  IsKMatchOne().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\?.ext'
-//!				2. Call IsKMatchOne(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchOne() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0039command2Set
-			COMMAND		TParse1	IsKMatchOne	PBASE-F32-ParseBase-PublicApi-0039command3IsKMatchOne
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0039
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0040
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0040
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsKMatchOne() test where name of file contains asterisk wildcard.
-//!				Uses API elements: Set(),  IsKMatchOne().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call IsKMatchOne(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchOne() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0040command2Set
-			COMMAND		TParse1	IsKMatchOne	PBASE-F32-ParseBase-PublicApi-0040command3IsKMatchOne
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0040
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0041
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0041
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsKMatchAny() test where name of file contains asterisk wildcard.
-//!				Uses API elements: Set(),  IsKMatchAny().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call IsKMatchAny(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchAny() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0041command2Set
-			COMMAND		TParse1	IsKMatchAny	PBASE-F32-ParseBase-PublicApi-0041command3IsKMatchAny
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0041
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0042
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0042
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsKMatchAny() test where name contains a question mark wildcard.
-//!				Uses API elements: Set(),  IsKMatchAny().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\?.ext'
-//!				2. Call IsKMatchAny(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchAny() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0042command2Set
-			COMMAND		TParse1	IsKMatchAny	PBASE-F32-ParseBase-PublicApi-0042command3IsKMatchAny
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0042
-
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0043
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0043
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsNameWild() test where name contains asterisk wildcard.
-//!				Uses API elements: Set(),  IsNameWild().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\*.ext'.
-//!				2. Call IsNameWild(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsNameWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0043command2Set
-			COMMAND		TParse1	IsNameWild	PBASE-F32-ParseBase-PublicApi-0043command3IsNameWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0043
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0044
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0044
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsNameWild() test where name not contains a wildcard.
-//!				Uses API elements: Set(),  IsNameWild().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call IsNameWild(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsNameWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0044command2Set
-			COMMAND		TParse1	IsNameWild	PBASE-F32-ParseBase-PublicApi-0044command3IsNameWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0044
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0045
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0045
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsExtWild() test where extension contains asterisk wildcard.
-//!				Uses API elements: Set(),  IsExtWild().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passed  'c:\dir1\dir2\filename.*'
-//!				2. Call IsExtWild(). Expecting TRUE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsExtWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0045command2Set
-			COMMAND		TParse1	IsExtWild	PBASE-F32-ParseBase-PublicApi-0045command3IsExtWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0045
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0046
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0046
-//! @SYMAPI			T_Parse
-//! @SYMTestCaseDesc		IsExtWild() test where extension not contains a wildcard.
-//!				Uses API elements: Set(),  IsExtWild().
-//! @SYMTestActions		1. Create TParse object. Call Set()  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call IsExtWild(). Expecting FALSE on return.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsExtWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-ParseBase-PublicApi-0046command2Set
-			COMMAND		TParse1	IsExtWild	PBASE-F32-ParseBase-PublicApi-0046command3IsExtWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0046
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Parse-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,389 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//!	@file
-//!	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-any
-//!	@SYMScriptTestEnvironment	This test script requires a basic ANY.
-//!	@SYMScriptAuthor 		Dmitri Trofimov
-//!	@SYMCreationDate		10/04/2007  
-//!	@SYMScriptDescription		The test script contains API tests for the following functions of TParse class:
-//!	TParse();
-//!	TInt Set(const TDesC &aName, const TDesC *aRelated, const TDesC *aDefault);
-//!	TInt SetNoWild(const TDesC &aName, const TDesC *aRelated, const TDesC *aDefault);
-//!	TDes &NameBuf();
-//!	const TDesC &NameBufC() const;
-
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0047
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0047
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		TParse() test or successful object creation.
-//!				Uses API elements: TParse()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0047
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0048
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0048
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		Set() test for successful setting up the TParse object. 
-//!					Uses API elements: TParse(), Set()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call Set() passing "test.txt" The file specification to be parsed. 
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Set() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-Parse-PublicApi-0002command2Set
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0048
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0049
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0049
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		Set() test for setting up the TParse object with wildcard in filename. 
-//!					Uses API elements: TParse(), Set()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call Set() passing "test.*" The file specification to be parsed. 
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Set() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-Parse-PublicApi-0003command2Set
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0049
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0050
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0050
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		Set() test for setting up the TParse object with wildcard in filename. 
-//!					Uses API elements: TParse(), Set()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call Set() passing "test.???" The file specification to be parsed. 
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Set() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-Parse-PublicApi-0004command2Set
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0050
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0051
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0051
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		SetNoWild() test for successful setting up the TParse object.
-//!					Uses API elements: SetNoWild()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call SetNoWild() passing "test.txt" as name, "b:\rel" as related file specification, "c:\def\test.txt" as default file specification.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SetNoWild() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	SetNoWild		PBASE-F32-Parse-PublicApi-0005command2SetNoWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0051
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0052
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0052
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		SetNoWild() negative test where file specification to be parsed contain wildcard.
-//!					Uses API elements: SetNoWild()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call SetNoWild() passing "c:\base\file.*" as parameter of file specification and check that the function return KErrBadName.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SetNoWild() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND	!Error=-28		TParse1	SetNoWild		PBASE-F32-Parse-PublicApi-0006command2SetNoWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0052
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0053
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0053
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		SetNoWild() negative test where file specification to be parsed contain wildcard.
-//!						Uses API elements: SetNoWild()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call SetNoWild() passing "c:\base\file.tx?" as parameter of file specification and check that ne function eturn KErrBadName
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SetNoWild() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND	!Error=-28		TParse1	SetNoWild		PBASE-F32-Parse-PublicApi-0007command2SetNoWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0053
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0054
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0054
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		SetNoWild() negative test where related file name specification to be parsed contain wildcard.
-//!					Uses API elements: SetNoWild()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call SetNoWild() passing "c:file" as name, "c:\base\file.*" as related file specification.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SetNoWild() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND	!Error=-28		TParse1	SetNoWild		PBASE-F32-Parse-PublicApi-0008command2SetNoWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0054
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0055
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0055
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		SetNoWild() negative test where related file name specification to be parsed contain wildcard.
-//!					Uses API elements: SetNoWild()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call SetNoWild() passing "c:file" as name, "c:\base\file.ex?" as related file specification.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SetNoWild() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND	!Error=-28		TParse1	SetNoWild		PBASE-F32-Parse-PublicApi-0009command2SetNoWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0055
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0056
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0056
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		SetNoWild() negative test where default file name specification to be parsed contain wildcard.
-//!					Uses API elements: SetNoWild()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call SetNoWild() passing "c:file" as name, "c:\base\file.*" as default file specification.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SetNoWild() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND	!Error=-28		TParse1	SetNoWild		PBASE-F32-Parse-PublicApi-0010command2SetNoWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0056
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0057
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0057
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		SetNoWild() negative test where default file name specification to be parsed contain wildcard.
-//!					Uses API elements: SetNoWild()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call SetNoWild() passing "c:file" as name, "c:\base\file.ex?" as default file specification.
-//!				3. Delete TParse object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SetNoWild() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse		TParse1	
-			COMMAND		TParse1		new		
-			COMMAND	!Error=-28		TParse1	SetNoWild		PBASE-F32-Parse-PublicApi-0011command2SetNoWild
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0057
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0058
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0058
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		PopDir() test. This test for successful removal of the last directory from the path.
-//!					Uses API elements:  PopDir()
-//! @SYMTestActions		1. Create TParse object  '. 
-//!				2. Call Set() for setting up the  following path name: "c\dir1\dir2\filename.ext"
-//!				3. Call PopDir().
-//!				4. Call FullName(). Expecting 'c:\dir1\filename.ext'
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	PopDir() returns KErrNone. The value returned by FullName() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1 Set		PBASE-F32-Parse-PublicApi-0012command2Set
-			COMMAND		TParse1	PopDir			
-			COMMAND		TParse1	FullName	PBASE-F32-Parse-PublicApi-0012command4FullName
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0058
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0059
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0059
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		AddDir() test. This tests for successful adding of directory to the end of path.
-//!					Uses API elements:  AddDir()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call Set() setting path to "c:\dir1\filename.ext"
-//!				3. Call AddDir() passing "dir2" string.
-//!				4. Call FullName(). Expecting 'c:\dir1\dir2\filename.ext'
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AddDir() returns KErrNone. The value returned by FullName() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1	Set		PBASE-F32-Parse-PublicApi-0013command2Set
-			COMMAND		TParse1	AddDir		PBASE-F32-Parse-PublicApi-0013command3AddDir
-			COMMAND		TParse1	FullName	PBASE-F32-Parse-PublicApi-0013command4FullName
-			COMMAND		TParse1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0059
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0060
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0060
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		AddDir() negative test. This tests for the function to return error KErrBadName in case the directory to add begins with slash "\".
-//!				ses API elements:  AddDir()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call Set() setting path to "c:\dir1\dir2\filename.ext"
-//!				3. Call AddDir() passing "\dir3" string.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AddDir() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT		TParse	TParse1	
-			COMMAND			TParse1	new
-			COMMAND			TParse1 Set	PBASE-F32-Parse-PublicApi-0014command2Set
-			COMMAND	!Error=-28	TParse1	AddDir	PBASE-F32-Parse-PublicApi-0014command3AddDir
-			COMMAND			TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0060
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0061
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0061
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		AddDir() test, where name of directory contains the wildcard.
-//!					Uses API elements:  AddDir()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call Set() setting path to "c:\dir1\dir2\filename.ext"
-//!				3. Call AddDir() passing a "dir*" string.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AddDir() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT	TParse	TParse1	
-			COMMAND		TParse1	new		
-			COMMAND		TParse1 Set		PBASE-F32-Parse-PublicApi-0015command2Set
-			COMMAND		TParse1	AddDir		PBASE-F32-Parse-PublicApi-0015command3AddDir
-			COMMAND		TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0061
-
-
-START_TESTCASE 			PBASE-F32-Parse-PublicApi-0062
-//! @SYMTestCaseID		PBASE-F32-Parse-PublicApi-0062
-//! @SYMAPI			TParse
-//! @SYMTestCaseDesc		AddDir() negative test, where name of directory ended with a "\".
-//!					Uses API elements:  AddDir()
-//! @SYMTestActions		1. Create TParse object.
-//!				2. Call Set() setting path to "c:\dir1\dir2\filename.ext"
-//!				3. Call AddDir() passing name of directory ended with a "dir\".
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AddDir() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-Parse-PublicApi.ini
-			CREATE_OBJECT		TParse	TParse1	
-			COMMAND			TParse1	new
-			COMMAND			TParse1 Set	PBASE-F32-Parse-PublicApi-0016command2Set
-			COMMAND	!Error=-28	TParse1	AddDir	PBASE-F32-Parse-PublicApi-0016command3AddDir
-			COMMAND			TParse1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-Parse-PublicApi-0062
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1029 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//!	@file
-//!	@SYMTestSuiteName			pbase-f32-sfsrv-publicapi-any
-//!	@SYMScriptTestEnvironment		This test script requires a basic ROM.
-//!	@SYMScriptAuthor 			Dmitri Trofimov, Sergei Tveritin
-//!	@SYMCreationDate			11/12/2006
-//!	@SYMScriptDescription			The test script contains API tests for the following functions of T_ParsePtr class:
-//!	T_ParsePtr();
-//!	TInt PopDir();
-//!	TInt AddDir(const TDesC &aName);
-//!	const TDesC &FullName() const;
-//!	TPtrC Drive() const;
-//!	TPtrC Path() const;
-//!	TPtrC DriveAndPath() const;
-//!	TPtrC Name() const;
-//!	TPtrC Ext() const;
-//!	TPtrC NameAndExt() const;
-//!	TBool DrivePresent() const;
-//!	TBool PathPresent() const;
-//!	TBool NamePresent() const;
-//!	TBool ExtPresent() const;
-//!	TBool NameOrExtPresent() const;
-//!	TBool IsRoot() const;
-//!	TBool IsWild() const;
-//!	TBool IsKMatchOne() const;
-//!	TBool IsKMatchAny() const;
-//!	TBool IsNameWild() const;
-//!	TBool IsExtWild() const;
-
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0001
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		FullName() test. 
-//!				Uses API elements:  FullName()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call FullName(). Expecting 'c:\dir1\dir2\filename.ext'
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The value returned by FullName() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0001command2Set
-			COMMAND		TParsePtr1	FullName	PBASE-F32-ParseBase-PublicApi-0001command3FullName
-			COMMAND		TParsePtr1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0002
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Drive() test where drive is present.
-//!				Uses API elements:  Drive()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Drive(). Expecting 'c:' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Drive() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0002command2Set
-			COMMAND		TParsePtr1	Drive		PBASE-F32-ParseBase-PublicApi-0002command3Drive
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0002
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0003
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Drive() test where drive is not present.
-//!				Uses API elements:  Drive()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'filename.ext'.
-//!				2. Call Drive(). Expecting empty string.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Drive() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0003command2Set
-			COMMAND		TParsePtr1	Drive		PBASE-F32-ParseBase-PublicApi-0003command3Drive
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0003
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0005
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Path() test where path is present.
-//!				Uses API elements: {USE_SET} Path()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Path(). Expecting '\dir1\dir2\' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Path() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0005command2Set
-			COMMAND		TParsePtr1	Path		PBASE-F32-ParseBase-PublicApi-0005command3Path
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0005
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0006
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Path() test where path is not present.
-//!				Uses API elements:  Path()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'filename.ext'.
-//!				2. Call Path(). Expecting ''(empty string) on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Path() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0006command2Set
-			COMMAND		TParsePtr1	Path		PBASE-F32-ParseBase-PublicApi-0006command3Path
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0006
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0007
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		DriveAndPath() test where passing full path with drive and filename.
-//!							Uses API elements:  DriveAndPath()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call DriveAndPath(). Expecting 'c:\dir1\dir2\' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0007command2Set
-			COMMAND		TParsePtr1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0007command3DriveAndPath
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0007
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0008
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		DriveAndPath() test with passing only filename.
-//!					Uses API elements:  DriveAndPath()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'filename.ext'.
-//!				2. Call DriveAndPath(). Expecting empty string.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0008command2Set
-			COMMAND		TParsePtr1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0008command3DriveAndPath
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0008
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0009
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		DriveAndPath() test with passing  path and filename, but without drive letter.
-//!					Uses API elements:  DriveAndPath()
-//! @SYMTestActions		1. Create TParsePtr object  passing '\dir1\filename.ext'.
-//!				2. Call DriveAndPath(). Expecting '\dir1\' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0009command2Set
-			COMMAND		TParsePtr1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0009command3DriveAndPath
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0009
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0010
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0010
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Name() test passing complete path with filename and drive letter.
-//!				Uses API elements:  Name()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Name(). Expecting 'filename' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Name() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0010command2Set
-			COMMAND		TParsePtr1	Name		PBASE-F32-ParseBase-PublicApi-0010command3Name
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0010
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0011
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0011
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Name() test on path without filename.
-//!				Uses API elements:  Name()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\'.
-//!				2. Call Name(). Expecting ''(empty string) on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Name() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0011command2Set
-			COMMAND		TParsePtr1	Name		PBASE-F32-ParseBase-PublicApi-0011command3Name
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0011
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0012
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0012
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Ext() test passing complete path with filename with extension and drive letter.
-//!				Uses API elements:  Ext()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Ext(). Expecting '.ext' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0012command2Set
-			COMMAND		TParsePtr1	Ext		PBASE-F32-ParseBase-PublicApi-0012command3Ext
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0012
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0013
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0013
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Ext() test passing complete path with filename without extension.
-//!				Uses API elements:  Ext()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename'.
-//!				2. Call Ext(). Expecting '' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0013command2Set
-			COMMAND		TParsePtr1	Ext		PBASE-F32-ParseBase-PublicApi-0013command3Ext
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0013
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0014
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0014
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		Ext() test passing complete path without filename and extension.
-//!				Uses API elements:  Ext()
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\'.
-//!				2. Call Ext(). Expecting '' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0014command2Set
-			COMMAND		TParsePtr1	Ext		PBASE-F32-ParseBase-PublicApi-0014command3Ext
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0014
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0015
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0015
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NameAndExt() test where name and extension is present.
-//!				Uses API elements:  NameAndExt().
-//! @SYMTestActions		1. Create TParsePtr object   passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call NameAndExt(). Expecting 'filename.ext' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0015command2Set
-			COMMAND		TParsePtr1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0015command3NameAndExt
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0015
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0016
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0016
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NameAndExt() test where name and extension is not present.
-//!				Uses API elements:  NameAndExt().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\'.
-//!				2. Call NameAndExt(). Expecting ''(empty string) on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0016command2Set
-			COMMAND		TParsePtr1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0016command3NameAndExt
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0016
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0017
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0017
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NameAndExt() test with full path and filename, but without extension
-//!				Uses API elements:  NameAndExt().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename'.
-//!				2. Call NameAndExt(). Expecting 'filename' on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0017command2Set
-			COMMAND		TParsePtr1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0017command3NameAndExt
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0017
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0018
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0018
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		DrivePresent() test where drive is present.
-//!				Uses API elements:  DrivePresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call DrivePresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DrivePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0018command2Set
-			COMMAND		TParsePtr1	DrivePresent	PBASE-F32-ParseBase-PublicApi-0018command3DrivePresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0018
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0019
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0019
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		DrivePresent() test, where drive is not present.
-//!				Uses API elements: DrivePresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing '\dir1\dir2\filename.ext'.
-//!				2. Call DrivePresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DrivePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0019command2Set
-			COMMAND		TParsePtr1	DrivePresent	PBASE-F32-ParseBase-PublicApi-0019command3DrivePresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0019
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0020
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0020
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		PathPresent() test, where path is present.
-//!				Uses API elements:  PathPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call PathPresent(). Expecting TRUE on return .
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0020command2Set
-			COMMAND		TParsePtr1	PathPresent	PBASE-F32-ParseBase-PublicApi-0020command3PathPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0020
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0021
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0021
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		PathPresent() test, where path is not present.
-//!				Uses API elements: PathPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'filename.ext'.
-//!				2. Call PathPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0021command2Set
-			COMMAND		TParsePtr1	PathPresent	PBASE-F32-ParseBase-PublicApi-0021command2PathPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0021
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0022
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0022
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		PathPresent() test with wildcard as path
-//!				Uses API elements:  PathPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing '*\filename.ext'.
-//!				2. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT		TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new	PBASE-F32-ParseBase-PublicApi-0022command2Set
-			COMMAND			TParsePtr1	~		
-	END_TEST_BLOCK	!PanicCode=24 !PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0022
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0023
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0023
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NamePresent() test, where name is present.
-//!				Uses API elements:  NamePresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call NamePresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0023command2Set
-			COMMAND		TParsePtr1	NamePresent	PBASE-F32-ParseBase-PublicApi-0023command3NamePresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0023
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0024
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0024
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NamePresent() test, where name is not present.
-//!				Uses API elements: NamePresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\'
-//!				2. Call NamePresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0024command2Set
-			COMMAND		TParsePtr1	NamePresent	PBASE-F32-ParseBase-PublicApi-0024command2NamePresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0024
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0025
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0025
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NamePresent() test with wildcards in name.
-//!				Uses API elements:  NamePresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\*.ext'.
-//!				2. Call NamePresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0025command2Set
-			COMMAND		TParsePtr1	NamePresent	PBASE-F32-ParseBase-PublicApi-0025command3NamePresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0025
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0026
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0026
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		ExtPresent() test, where extension is present.
-//!				Uses API elements:  ExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call ExtPresent(). Expecting TRUE on return.
-//!				3 Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0026command2Set
-			COMMAND		TParsePtr1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0026command3ExtPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0026
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0027
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0027
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		ExtPresent() test where extension is not present.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0027command2Set
-			COMMAND		TParsePtr1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0027command2ExtPresent
-			COMMAND		TParsePtr1	~	
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0027
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0028
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0028
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		ExtPresent() test with wildcards in name.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0028command2Set
-			COMMAND		TParsePtr1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0028command3ExtPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0028
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0029
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0029
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		ExtPresent() test with wildcards in extension.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.*'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0029command2Set
-			COMMAND		TParsePtr1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0029command3ExtPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0029
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0030
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0030
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NameOrExtPresent() test where name and extension present.
-//!					Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new			PBASE-F32-ParseBase-PublicApi-0030command2Set
-			COMMAND		TParsePtr1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0030command3NameOrExtPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0030
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0031
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0031
-//! @SYMAPI			T_ParsePtr
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NameOrExtPresent() test where name and extension is not present.
-//!				Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\'
-//!				2. Call NameOrExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new			PBASE-F32-ParseBase-PublicApi-0031command2Set
-			COMMAND		TParsePtr1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0031command2NameOrExtPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0031
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0032
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0032
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NameOrExtPresent() test with wildcards in name.
-//!				Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new			PBASE-F32-ParseBase-PublicApi-0032command2Set
-			COMMAND		TParsePtr1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0032command3NameOrExtPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0032
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0033
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0033
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NameOrExtPresent() test with wildcards in extension.
-//!				Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.*'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new			PBASE-F32-ParseBase-PublicApi-0033command2Set
-			COMMAND		TParsePtr1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0033command3NameOrExtPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0033
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0034
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0034
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		NameOrExtPresent() test whre wildcard as filename and extension.
-//!				Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\*'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new			PBASE-F32-ParseBase-PublicApi-0034command2Set
-			COMMAND		TParsePtr1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0034command3NameOrExtPresent
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0034
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0035
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0035
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsRoot() test where path is root.
-//!				Uses API elements:  IsRoot().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\'
-//!				2. Call IsRoot(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsRoot() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0035command2Set
-			COMMAND		TParsePtr1	IsRoot		PBASE-F32-ParseBase-PublicApi-0035command3IsRoot
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0035
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0036
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0036
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsRoot() test where path is not root.
-//!				Uses API elements:  IsRoot().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\'
-//!				2. Call IsRoot(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsRoot() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0036command2Set
-			COMMAND		TParsePtr1	IsRoot		PBASE-F32-ParseBase-PublicApi-0036command3IsRoot
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0036
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0037
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0037
-//! @SYMAPI					T_ParsePtr
-//! @SYMTestCaseDesc		IsWild() test where path has a wildcard.
-//!					Uses API elements:  IsWild().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dri1\dir2\*.ext'
-//!				2. Call IsWild(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0037command2Set
-			COMMAND		TParsePtr1	IsWild		PBASE-F32-ParseBase-PublicApi-0037command3IsWild
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0037
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0038
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0038
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsWild() test where path has not a wildcard.
-//!					Uses API elements:  IsWild().
-//! @SYMTestActions		1. Create TParsePtr object   passing 'c:\dir1\dir2\nowildcras.ext'
-//!				2. Call IsWild(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0038command2Set
-			COMMAND		TParsePtr1	IsWild		PBASE-F32-ParseBase-PublicApi-0038command3IsWild
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0038
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0039
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0039
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsKMatchOne() test where the name contains a question mark wildcard.
-//!				Uses API elements:  IsKMatchOne().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\?.ext'
-//!				2. Call IsKMatchOne(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchOne() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0039command2Set
-			COMMAND		TParsePtr1	IsKMatchOne	PBASE-F32-ParseBase-PublicApi-0039command3IsKMatchOne
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0039
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0040
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0040
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsKMatchOne() test where name of file contains asterisk wildcard.
-//!				Uses API elements:  IsKMatchOne().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call IsKMatchOne(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchOne() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0040command2Set
-			COMMAND		TParsePtr1	IsKMatchOne	PBASE-F32-ParseBase-PublicApi-0040command3IsKMatchOne
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0040
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0041
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0041
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsKMatchAny() test where name of file contains asterisk wildcard.
-//!				Uses API elements:  IsKMatchAny().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call IsKMatchAny(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchAny() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0041command2Set
-			COMMAND		TParsePtr1	IsKMatchAny	PBASE-F32-ParseBase-PublicApi-0041command3IsKMatchAny
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0041
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0042
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0042
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsKMatchAny() test where name contains a question mark wildcard.
-//!				Uses API elements:  IsKMatchAny().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\?.ext'
-//!				2. Call IsKMatchAny(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchAny() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0042command2Set
-			COMMAND		TParsePtr1	IsKMatchAny	PBASE-F32-ParseBase-PublicApi-0042command3IsKMatchAny
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0042
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0043
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0043
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsNameWild() test where name contains asterisk wildcard.
-//!				Uses API elements:  IsNameWild().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\*.ext'.
-//!				2. Call IsNameWild(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsNameWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0043command2Set
-			COMMAND		TParsePtr1	IsNameWild	PBASE-F32-ParseBase-PublicApi-0043command3IsNameWild
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0043
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0044
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0044
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsNameWild() test where name not contains a wildcard.
-//!				Uses API elements:  IsNameWild().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call IsNameWild(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsNameWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0044command2Set
-			COMMAND		TParsePtr1	IsNameWild	PBASE-F32-ParseBase-PublicApi-0044command3IsNameWild
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0044
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0045
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0045
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsExtWild() test where extension contains asterisk wildcard.
-//!				Uses API elements:  IsExtWild().
-//! @SYMTestActions		1. Create TParsePtr object  passed  'c:\dir1\dir2\filename.*'
-//!				2. Call IsExtWild(). Expecting TRUE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsExtWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0045command2Set
-			COMMAND		TParsePtr1	IsExtWild	PBASE-F32-ParseBase-PublicApi-0045command3IsExtWild
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0045
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0046
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0046
-//! @SYMAPI			T_ParsePtr
-//! @SYMTestCaseDesc		IsExtWild() test where extension not contains a wildcard.
-//!				Uses API elements:  IsExtWild().
-//! @SYMTestActions		1. Create TParsePtr object  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call IsExtWild(). Expecting FALSE on return.
-//!				3. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsExtWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParseBase-PublicApi-0046command2Set
-			COMMAND		TParsePtr1	IsExtWild	PBASE-F32-ParseBase-PublicApi-0046command3IsExtWild
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0046
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-ParsePtr-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,216 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//!	@file
-//!	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-any
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//!	@SYMScriptAuthor 		Dmitri Trofimov, Sergei Tveritin.
-//!	@SYMCreationDate		11/11/2007  
-//!	@SYMScriptDescription		The test script contains API tests for the following functions of TParsePtr class:
-//!	TParsePtr(TDes &aName);
-//!	TDes &NameBuf();
-//!	const TDesC &NameBufC() const;
-
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0047
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0047
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		TParsePtr() test.
-//!				Uses API elements: TParsePtr()
-//! @SYMTestActions		1. Create TParsePtr object passing "c:\path1\path2\file.ext" as parameter.
-//!				2. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0001command1new
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0047
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0048
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0048
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		TParsePtr() test, where name passed in constructor are NUUL.
-//!				Uses API elements: TParsePtr()
-//! @SYMTestActions		1. Create TParsePtr object passing "0" as parameter.
-//!				2. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0002command1new
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0048
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0049
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0049
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		TParsePtr() negative test, where name passed in constructor contain illegal path construction.
-//!				Uses API elements: TParsePtr()
-//! @SYMTestActions		1. Create TParsePtr object passing "c::\file.ext" as parameter.
-//!				2. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function return panic code FSCLIENT=24.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0003command1new
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK	!PanicCode=24 !PanicString="FSCLIENT panic"	
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0049
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0050
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0050
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		TParsePtr() test, where name passed in constructor contain wildcards.
-//!				Uses API elements: TParsePtr()
-//! @SYMTestActions		1. Create TParsePtr object passing "c:\file?.*" as parameter.
-//!				2. Delete TParsePtr object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0004command1new
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0050
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0051
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0051
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		PopDir() test. This test for successful removal of the last directory from the path.
-//!					Uses API elements:  PopDir()
-//! @SYMTestActions		1. Create TParsePtr object setting up the  following path name: "c\dir\filename.ext". 
-//!				2. Call PopDir().
-//!				3. Call FullName(). Expecting 'c:\dir1\filename.ext'
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	PopDir() returns KErrNone. The value returned by FullName() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0005command2Set
-			COMMAND		TParsePtr1	PopDir			
-			COMMAND		TParsePtr1	FullName	PBASE-F32-ParsePtr-PublicApi-0005command4FullName
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0051
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0052
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0052
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		AddDir() test. This tests for successful adding of directory to the end of path.
-//!					Uses API elements:  AddDir()
-//! @SYMTestActions		1. Create TParsePtr object setting path to "c:\dir1\dir2\filename.ext".
-//!				2. Call AddDir() passing "dir3" string.
-//!				3. Call FullName(). Expecting 'c:\dir1\dir2\dir3\filename.ext'
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AddDir() returns KErrNone. The value returned by FullName() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0006command2Set
-			COMMAND		TParsePtr1	AddDir		PBASE-F32-ParsePtr-PublicApi-0006command3AddDir
-			COMMAND		TParsePtr1	FullName	PBASE-F32-ParsePtr-PublicApi-0006command4FullName
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0052
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0053
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0053
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		AddDir() negative test. This tests for the function to return error KErrBadName in case the directory to add begins with slash "\".
-//!				ses API elements:  AddDir()
-//! @SYMTestActions		1. Create TParsePtr object  setting path to "c:\dir1\dir2\filename.ext".
-//!				2. Call AddDir() passing "\dir3" string.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AddDir() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT		TParsePtr	TParsePtr1	
-			COMMAND			TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0007command2Set
-			COMMAND	!Error=-28	TParsePtr1	AddDir		PBASE-F32-ParsePtr-PublicApi-0007command3AddDir
-			COMMAND			TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0053
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0054
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0054
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		AddDir() test, where name of directory contains the wildcard.
-//!					Uses API elements:  AddDir()
-//! @SYMTestActions		1. Create TParsePtr object  setting path to "c:\dir1\dir2\filename.ext".
-//!				2. Call AddDir() passing a "dir*"
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AddDir() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT	TParsePtr	TParsePtr1	
-			COMMAND		TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0008command2Set
-			COMMAND		TParsePtr1	AddDir		PBASE-F32-ParsePtr-PublicApi-0008command3AddDir
-			COMMAND		TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0054
-
-
-START_TESTCASE 			PBASE-F32-ParsePtr-PublicApi-0055
-//! @SYMTestCaseID		PBASE-F32-ParsePtr-PublicApi-0055
-//! @SYMAPI			TParsePtr
-//! @SYMTestCaseDesc		AddDir() negative test, where name of directory ended with a "\".
-//!					Uses API elements:  AddDir()
-//! @SYMTestActions		1. Create TParsePtr object  setting path to "c:\dir1\dir2\filename.ext".
-//!				2. Call AddDir() passing  "dir3\".
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	AddDir() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtr-PublicApi.ini
-			CREATE_OBJECT		TParsePtr	TParsePtr1	
-			COMMAND			TParsePtr1	new		PBASE-F32-ParsePtr-PublicApi-0009command2Set
-			COMMAND	!Error=-28	TParsePtr1	AddDir		PBASE-F32-ParsePtr-PublicApi-0009command3AddDir
-			COMMAND			TParsePtr1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtr-PublicApi-0055
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1029 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//!	@file
-//!	@SYMTestSuiteName			pbase-f32-sfsrv-publicapi-any
-//!	@SYMScriptTestEnvironment		This test script requires a basic ROM.
-//!	@SYMScriptAuthor 			Dmitri Trofimov, Sergei Tveritin
-//!	@SYMCreationDate			11/12/2006
-//!	@SYMScriptDescription			The test script contains API tests for the following functions of T_ParsePtrC class:
-//!	T_ParsePtrC();
-//!	TInt PopDir();
-//!	TInt AddDir(const TDesC &aName);
-//!	const TDesC &FullName() const;
-//!	TPtrC Drive() const;
-//!	TPtrC Path() const;
-//!	TPtrC DriveAndPath() const;
-//!	TPtrC Name() const;
-//!	TPtrC Ext() const;
-//!	TPtrC NameAndExt() const;
-//!	TBool DrivePresent() const;
-//!	TBool PathPresent() const;
-//!	TBool NamePresent() const;
-//!	TBool ExtPresent() const;
-//!	TBool NameOrExtPresent() const;
-//!	TBool IsRoot() const;
-//!	TBool IsWild() const;
-//!	TBool IsKMatchOne() const;
-//!	TBool IsKMatchAny() const;
-//!	TBool IsNameWild() const;
-//!	TBool IsExtWild() const;
-
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0001
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		FullName() test. 
-//!				Uses API elements:  FullName()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call FullName(). Expecting 'c:\dir1\dir2\filename.ext'
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The value returned by FullName() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0001command2Set
-			COMMAND		TParsePtrC1	FullName	PBASE-F32-ParseBase-PublicApi-0001command3FullName
-			COMMAND		TParsePtrC1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0002
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Drive() test where drive is present.
-//!				Uses API elements:  Drive()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Drive(). Expecting 'c:' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Drive() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0002command2Set
-			COMMAND		TParsePtrC1	Drive		PBASE-F32-ParseBase-PublicApi-0002command3Drive
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0002
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0003
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Drive() test where drive is not present.
-//!				Uses API elements:  Drive()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'filename.ext'.
-//!				2. Call Drive(). Expecting empty string.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Drive() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0003command2Set
-			COMMAND		TParsePtrC1	Drive		PBASE-F32-ParseBase-PublicApi-0003command3Drive
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0003
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0005
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Path() test where path is present.
-//!				Uses API elements: {USE_SET} Path()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Path(). Expecting '\dir1\dir2\' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Path() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0005command2Set
-			COMMAND		TParsePtrC1	Path		PBASE-F32-ParseBase-PublicApi-0005command3Path
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0005
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0006
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Path() test where path is not present.
-//!				Uses API elements:  Path()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'filename.ext'.
-//!				2. Call Path(). Expecting ''(empty string) on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Path() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0006command2Set
-			COMMAND		TParsePtrC1	Path		PBASE-F32-ParseBase-PublicApi-0006command3Path
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0006
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0007
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		DriveAndPath() test where passing full path with drive and filename.
-//!							Uses API elements:  DriveAndPath()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call DriveAndPath(). Expecting 'c:\dir1\dir2\' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0007command2Set
-			COMMAND		TParsePtrC1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0007command3DriveAndPath
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0007
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0008
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		DriveAndPath() test with passing only filename.
-//!					Uses API elements:  DriveAndPath()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'filename.ext'.
-//!				2. Call DriveAndPath(). Expecting empty string.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0008command2Set
-			COMMAND		TParsePtrC1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0008command3DriveAndPath
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0008
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0009
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		DriveAndPath() test with passing  path and filename, but without drive letter.
-//!					Uses API elements:  DriveAndPath()
-//! @SYMTestActions		1. Create TParsePtrC object  passing '\dir1\filename.ext'.
-//!				2. Call DriveAndPath(). Expecting '\dir1\' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DriveAndPath() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0009command2Set
-			COMMAND		TParsePtrC1	DriveAndPath	PBASE-F32-ParseBase-PublicApi-0009command3DriveAndPath
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0009
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0010
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0010
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Name() test passing complete path with filename and drive letter.
-//!				Uses API elements:  Name()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Name(). Expecting 'filename' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Name() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0010command2Set
-			COMMAND		TParsePtrC1	Name		PBASE-F32-ParseBase-PublicApi-0010command3Name
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0010
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0011
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0011
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Name() test on path without filename.
-//!				Uses API elements:  Name()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\'.
-//!				2. Call Name(). Expecting ''(empty string) on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Name() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0011command2Set
-			COMMAND		TParsePtrC1	Name		PBASE-F32-ParseBase-PublicApi-0011command3Name
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0011
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0012
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0012
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Ext() test passing complete path with filename with extension and drive letter.
-//!				Uses API elements:  Ext()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call Ext(). Expecting '.ext' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0012command2Set
-			COMMAND		TParsePtrC1	Ext		PBASE-F32-ParseBase-PublicApi-0012command3Ext
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0012
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0013
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0013
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Ext() test passing complete path with filename without extension.
-//!				Uses API elements:  Ext()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename'.
-//!				2. Call Ext(). Expecting '' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0013command2Set
-			COMMAND		TParsePtrC1	Ext		PBASE-F32-ParseBase-PublicApi-0013command3Ext
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0013
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0014
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0014
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		Ext() test passing complete path without filename and extension.
-//!				Uses API elements:  Ext()
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\'.
-//!				2. Call Ext(). Expecting '' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by Ext() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0014command2Set
-			COMMAND		TParsePtrC1	Ext		PBASE-F32-ParseBase-PublicApi-0014command3Ext
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0014
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0015
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0015
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NameAndExt() test where name and extension is present.
-//!				Uses API elements:  NameAndExt().
-//! @SYMTestActions		1. Create TParsePtrC object   passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call NameAndExt(). Expecting 'filename.ext' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0015command2Set
-			COMMAND		TParsePtrC1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0015command3NameAndExt
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0015
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0016
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0016
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NameAndExt() test where name and extension is not present.
-//!				Uses API elements:  NameAndExt().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\'.
-//!				2. Call NameAndExt(). Expecting ''(empty string) on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0016command2Set
-			COMMAND		TParsePtrC1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0016command3NameAndExt
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0016
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0017
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0017
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NameAndExt() test with full path and filename, but without extension
-//!				Uses API elements:  NameAndExt().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename'.
-//!				2. Call NameAndExt(). Expecting 'filename' on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameAndExt() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0017command2Set
-			COMMAND		TParsePtrC1	NameAndExt	PBASE-F32-ParseBase-PublicApi-0017command3NameAndExt
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0017
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0018
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0018
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		DrivePresent() test where drive is present.
-//!				Uses API elements:  DrivePresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call DrivePresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DrivePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0018command2Set
-			COMMAND		TParsePtrC1	DrivePresent	PBASE-F32-ParseBase-PublicApi-0018command3DrivePresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0018
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0019
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0019
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		DrivePresent() test, where drive is not present.
-//!				Uses API elements: DrivePresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing '\dir1\dir2\filename.ext'.
-//!				2. Call DrivePresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by DrivePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0019command2Set
-			COMMAND		TParsePtrC1	DrivePresent	PBASE-F32-ParseBase-PublicApi-0019command3DrivePresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0019
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0020
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0020
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		PathPresent() test, where path is present.
-//!				Uses API elements:  PathPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call PathPresent(). Expecting TRUE on return .
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0020command2Set
-			COMMAND		TParsePtrC1	PathPresent	PBASE-F32-ParseBase-PublicApi-0020command3PathPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0020
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0021
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0021
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		PathPresent() test, where path is not present.
-//!				Uses API elements: PathPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'filename.ext'.
-//!				2. Call PathPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0021command2Set
-			COMMAND		TParsePtrC1	PathPresent	PBASE-F32-ParseBase-PublicApi-0021command2PathPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0021
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0022
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0022
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		PathPresent() test with wildcard as path
-//!				Uses API elements:  PathPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing '*\filename.ext'.
-//!				2. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by PathPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT		TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new	PBASE-F32-ParseBase-PublicApi-0022command2Set
-			COMMAND			TParsePtrC1	~		
-	END_TEST_BLOCK	!PanicCode=24 !PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0022
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0023
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0023
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NamePresent() test, where name is present.
-//!				Uses API elements:  NamePresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'.
-//!				2. Call NamePresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0023command2Set
-			COMMAND		TParsePtrC1	NamePresent	PBASE-F32-ParseBase-PublicApi-0023command3NamePresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0023
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0024
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0024
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NamePresent() test, where name is not present.
-//!				Uses API elements: NamePresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\'
-//!				2. Call NamePresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0024command2Set
-			COMMAND		TParsePtrC1	NamePresent	PBASE-F32-ParseBase-PublicApi-0024command2NamePresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0024
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0025
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0025
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NamePresent() test with wildcards in name.
-//!				Uses API elements:  NamePresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\*.ext'.
-//!				2. Call NamePresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NamePresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0025command2Set
-			COMMAND		TParsePtrC1	NamePresent	PBASE-F32-ParseBase-PublicApi-0025command3NamePresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0025
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0026
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0026
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		ExtPresent() test, where extension is present.
-//!				Uses API elements:  ExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call ExtPresent(). Expecting TRUE on return.
-//!				3 Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0026command2Set
-			COMMAND		TParsePtrC1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0026command3ExtPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0026
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0027
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0027
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		ExtPresent() test where extension is not present.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0027command2Set
-			COMMAND		TParsePtrC1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0027command2ExtPresent
-			COMMAND		TParsePtrC1	~	
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0027
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0028
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0028
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		ExtPresent() test with wildcards in name.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0028command2Set
-			COMMAND		TParsePtrC1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0028command3ExtPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0028
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0029
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0029
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		ExtPresent() test with wildcards in extension.
-//!					Uses API elements: ExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.*'
-//!				2. Call ExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by ExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0029command2Set
-			COMMAND		TParsePtrC1	ExtPresent	PBASE-F32-ParseBase-PublicApi-0029command3ExtPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0029
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0030
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0030
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NameOrExtPresent() test where name and extension present.
-//!					Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new			PBASE-F32-ParseBase-PublicApi-0030command2Set
-			COMMAND		TParsePtrC1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0030command3NameOrExtPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0030
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0031
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0031
-//! @SYMAPI			T_ParsePtrC
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NameOrExtPresent() test where name and extension is not present.
-//!				Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\'
-//!				2. Call NameOrExtPresent(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new			PBASE-F32-ParseBase-PublicApi-0031command2Set
-			COMMAND		TParsePtrC1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0031command2NameOrExtPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0031
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0032
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0032
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NameOrExtPresent() test with wildcards in name.
-//!				Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new			PBASE-F32-ParseBase-PublicApi-0032command2Set
-			COMMAND		TParsePtrC1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0032command3NameOrExtPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0032
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0033
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0033
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NameOrExtPresent() test with wildcards in extension.
-//!				Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.*'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new			PBASE-F32-ParseBase-PublicApi-0033command2Set
-			COMMAND		TParsePtrC1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0033command3NameOrExtPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0033
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0034
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0034
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		NameOrExtPresent() test whre wildcard as filename and extension.
-//!				Uses API elements:  NameOrExtPresent().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\*'
-//!				2. Call NameOrExtPresent(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by NameOrExtPresent() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new			PBASE-F32-ParseBase-PublicApi-0034command2Set
-			COMMAND		TParsePtrC1	NameOrExtPresent	PBASE-F32-ParseBase-PublicApi-0034command3NameOrExtPresent
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0034
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0035
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0035
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsRoot() test where path is root.
-//!				Uses API elements:  IsRoot().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\'
-//!				2. Call IsRoot(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsRoot() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0035command2Set
-			COMMAND		TParsePtrC1	IsRoot		PBASE-F32-ParseBase-PublicApi-0035command3IsRoot
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0035
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0036
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0036
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsRoot() test where path is not root.
-//!				Uses API elements:  IsRoot().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\'
-//!				2. Call IsRoot(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsRoot() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0036command2Set
-			COMMAND		TParsePtrC1	IsRoot		PBASE-F32-ParseBase-PublicApi-0036command3IsRoot
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0036
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0037
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0037
-//! @SYMAPI					T_ParsePtrC
-//! @SYMTestCaseDesc		IsWild() test where path has a wildcard.
-//!					Uses API elements:  IsWild().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dri1\dir2\*.ext'
-//!				2. Call IsWild(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0037command2Set
-			COMMAND		TParsePtrC1	IsWild		PBASE-F32-ParseBase-PublicApi-0037command3IsWild
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0037
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0038
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0038
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsWild() test where path has not a wildcard.
-//!					Uses API elements:  IsWild().
-//! @SYMTestActions		1. Create TParsePtrC object   passing 'c:\dir1\dir2\nowildcras.ext'
-//!				2. Call IsWild(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0038command2Set
-			COMMAND		TParsePtrC1	IsWild		PBASE-F32-ParseBase-PublicApi-0038command3IsWild
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0038
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0039
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0039
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsKMatchOne() test where the name contains a question mark wildcard.
-//!				Uses API elements:  IsKMatchOne().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\?.ext'
-//!				2. Call IsKMatchOne(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchOne() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0039command2Set
-			COMMAND		TParsePtrC1	IsKMatchOne	PBASE-F32-ParseBase-PublicApi-0039command3IsKMatchOne
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0039
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0040
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0040
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsKMatchOne() test where name of file contains asterisk wildcard.
-//!				Uses API elements:  IsKMatchOne().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call IsKMatchOne(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchOne() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0040command2Set
-			COMMAND		TParsePtrC1	IsKMatchOne	PBASE-F32-ParseBase-PublicApi-0040command3IsKMatchOne
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0040
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0041
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0041
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsKMatchAny() test where name of file contains asterisk wildcard.
-//!				Uses API elements:  IsKMatchAny().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\*.ext'
-//!				2. Call IsKMatchAny(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchAny() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0041command2Set
-			COMMAND		TParsePtrC1	IsKMatchAny	PBASE-F32-ParseBase-PublicApi-0041command3IsKMatchAny
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0041
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0042
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0042
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsKMatchAny() test where name contains a question mark wildcard.
-//!				Uses API elements:  IsKMatchAny().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\?.ext'
-//!				2. Call IsKMatchAny(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsKMatchAny() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0042command2Set
-			COMMAND		TParsePtrC1	IsKMatchAny	PBASE-F32-ParseBase-PublicApi-0042command3IsKMatchAny
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0042
-
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0043
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0043
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsNameWild() test where name contains asterisk wildcard.
-//!				Uses API elements:  IsNameWild().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\*.ext'.
-//!				2. Call IsNameWild(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsNameWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0043command2Set
-			COMMAND		TParsePtrC1	IsNameWild	PBASE-F32-ParseBase-PublicApi-0043command3IsNameWild
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0043
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0044
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0044
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsNameWild() test where name not contains a wildcard.
-//!				Uses API elements:  IsNameWild().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call IsNameWild(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsNameWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0044command2Set
-			COMMAND		TParsePtrC1	IsNameWild	PBASE-F32-ParseBase-PublicApi-0044command3IsNameWild
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0044
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0045
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0045
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsExtWild() test where extension contains asterisk wildcard.
-//!				Uses API elements:  IsExtWild().
-//! @SYMTestActions		1. Create TParsePtrC object  passed  'c:\dir1\dir2\filename.*'
-//!				2. Call IsExtWild(). Expecting TRUE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsExtWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0045command2Set
-			COMMAND		TParsePtrC1	IsExtWild	PBASE-F32-ParseBase-PublicApi-0045command3IsExtWild
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0045
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0046
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0046
-//! @SYMAPI			T_ParsePtrC
-//! @SYMTestCaseDesc		IsExtWild() test where extension not contains a wildcard.
-//!				Uses API elements:  IsExtWild().
-//! @SYMTestActions		1. Create TParsePtrC object  passing 'c:\dir1\dir2\filename.ext'
-//!				2. Call IsExtWild(). Expecting FALSE on return.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Value returned by IsExtWild() is the same as expected.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParseBase-PublicApi-0046command2Set
-			COMMAND		TParsePtrC1	IsExtWild	PBASE-F32-ParseBase-PublicApi-0046command3IsExtWild
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0046
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-ParsePtrC-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,214 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//!	@file
-//!	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-any
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//!	@SYMScriptAuthor 		Dmitri Trofimov, Sergei Tveritin.
-//!	@SYMCreationDate		11/11/2007 
-//!	@SYMScriptDescription		The test script contains API tests for the following functions of TParsePtrC class:
-//!	TParsePtrC(TDes &aName);
-//!	TDes &NameBuf();
-//!	const TDesC &NameBufC() const;
-
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0047
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0047
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() test.
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing a reference to a TDes file name as a parameter.
-//!				2. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0001command1new
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0047
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0048
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0048
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() test, where name passed in constructor are NUUL.
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing "0" as parameter.
-//!				2. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0002command1new
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0048
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0049
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0049
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() negative test, where name passed in constructor contain illegal path construction.
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing "c::\file.ext" as parameter.
-//!				2. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function return panic code FSCLIENT=24.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0003command1new
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK	!PanicCode=24 !PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0049
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0050
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0050
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() test, where name passed in constructor contain wildcards.
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing "c:\file?.*" as parameter.
-//!				2. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0004command1new
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0050
-
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0051
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0051
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() negative test, where calls the function of base class  AddDir().
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing "c:\file.txt" as parameter.
-//!				2. Call AddDir() and passsing "dir" as name of directory to be added.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function return FSCLIENT panic Code = 26.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0005command1new
-			COMMAND		TParsePtrC1	AddDir		PBASE-F32-ParsePtrC-PublicApi-0005command2AddDir
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK	!PanicCode=26 !PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0051
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0052
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0052
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() negative test, where calls the function of base class  AddDir() and pass empty parameter.
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing "c:\file.txt" as parameter.
-//!				2. Call AddDir() and passsing empty string as name of directory to be added.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0006command1new
-			COMMAND		TParsePtrC1	AddDir		PBASE-F32-ParsePtrC-PublicApi-0006command2AddDir
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0052
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0053
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0053
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() negative test, where calls the function of base class  AddDir() and pass illegal characters.
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing "c:\file.txt" as parameter.
-//!				2. Call AddDir() and passsing "$%#" as name of directory to be added.
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function return FSCLIENT panic Code = 26. 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT	TParsePtrC	TParsePtrC1	
-			COMMAND		TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0007command1new
-			COMMAND		TParsePtrC1	AddDir		PBASE-F32-ParsePtrC-PublicApi-0007command2AddDir
-			COMMAND		TParsePtrC1	~		
-	END_TEST_BLOCK	!PanicCode=26 !PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0053
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0054
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0054
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() negative test, where calls the function of base class  PopDir(), where filename contains only root directory.
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing "c:\file.txt" as parameter.
-//!				2. Call PopDir().
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function PopDir() return error code KErrGeneral.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT		TParsePtrC	TParsePtrC1	
-			COMMAND			TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0008command1new
-			COMMAND	!Error=-2	TParsePtrC1	PopDir		
-			COMMAND			TParsePtrC1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0054
-
-START_TESTCASE 			PBASE-F32-ParsePtrC-PublicApi-0055
-//! @SYMTestCaseID		PBASE-F32-ParsePtrC-PublicApi-0055
-//! @SYMAPI			TParsePtrC
-//! @SYMTestCaseDesc		TParsePtrC() negative test, where calls the function of base class  PopDir(), where filename contains subdirectory.
-//!				Uses API elements: TParsePtrC()
-//! @SYMTestActions		1. Create TParsePtrC object passing "c:\base\file.txt" as parameter.
-//!				2. Call PopDir().
-//!				3. Delete TParsePtrC object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function PopDir() FSCLIENT panic Code = 26.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-ParsePtrC-PublicApi.ini
-			CREATE_OBJECT		TParsePtrC	TParsePtrC1	
-			COMMAND			TParsePtrC1	new		PBASE-F32-ParsePtrC-PublicApi-0009command1new
-			COMMAND			TParsePtrC1	PopDir		
-			COMMAND			TParsePtrC1	~		
-	END_TEST_BLOCK !PanicCode=26 !PanicString="FSCLIENT panic"
-END_TESTCASE			PBASE-F32-ParsePtrC-PublicApi-0055
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RDir-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,595 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Jaanus Randveer, Runno Sgirka
-//! 	@SYMScriptCreationDate		31/08/2007
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of RDir class:
-//!	TInt Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType)
-//!	TInt Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask)
-//!	void Close()
-//!	TInt Read(TEntryArray &anArray)
-//!	void Read(TEntryArray &anArray, TRequestStatus &aStatus)
-//!	TInt Read(TEntry &anEntry)
-//!	void Read(TPckg< TEntry > &anEntry, TRequestStatus &aStatus)	
-	
-
-LOAD_SUITE	T_SfSrv
-DELAY		5000
-
-
-START_TESTCASE			PBASE-F32-RDir-CopyFiles
-//! @SYMTestCaseID		PBASE-F32-RDir-CopyFiles
-//! @SYMAPI			CFileMan
-//! @SYMTestCaseDesc		SetupTestCase to test RDir Apis
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2. Use CFileMan to copy the files on to relavent directories.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The CFileMan::Copy() copies the testdata files properly on to specific directories.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100		T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini
-		CREATE_OBJECT	RFs		RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND         RFs1		new    
-		COMMAND         RFs1		Connect
-		COMMAND		CFileMan1	NewL		PBASE-F32-RDir-PublicApi-NewL
-		COMMAND		RFs1		MkDirAll	PBASE-F32-RDir-PublicApi-001-RamDiskPath
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_Any
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_Bigline
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_FtEof
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_FtRead
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_MLine
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_NewFile
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_Oneliner
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_Test1
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_Test2
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_Test3
-		COMMAND		CFileMan1	Copy		PBASE-F32-RDir-PublicApi-001-Copy_Test
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-CopyFiles
-
-
-
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5001
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5001
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType) and 
-//!				function Close() test, that opens a directory using the NULL UIDs.
-//! 				Uses API elements: Open(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ as second parameter, 
-//!				  and empty TUidType as third parameter.
-//!				3.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RDir	RDir1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RDir1	new
-		COMMAND		RDir1	Open		PBASE-F32-RDir-PublicApi-5001-001-Open_command005
-		COMMAND		RDir1	Close
-		COMMAND		RDir1	~
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5001
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5002
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5002
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask) test, that opens a directory using
-//!				an attribute bitmask to filter the directory entry types.
-//! 				Uses API elements: Open(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ as second parameter, 
-//!				  and KEntryAttNormal as third parameter.
-//!				3.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RDir	RDir1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RDir1	new
-		COMMAND		RDir1	Open		PBASE-F32-RDir-PublicApi-5002-001-Open_command005
-		COMMAND		RDir1	Close
-		COMMAND		RDir1	~		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5002
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5003
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5003
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Read(TEntryArray &anArray) test, that reads all filtered directory entries into the
-//!				specified array synchronously.
-//! 				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ (containing 14 files: 1mb, 
-//!				  any.txt, big_line.txt, filetext_eof.txt, filetext_read.txt, multiline.txt, new_file.txt, 
-//!				  oneliner_tmp.txt, test_rom.txt, test.txt, Test1.txt, Test2.txt, 
-//!				  Test3.txt, USBLOAD.ZIP) as second parameter, and KEntryAttNormal
-//!				  as third parameter.
-//!				3.Call RDir::Read(TEntryArray &anArray) to read all filtered directory entries into the
-//!				  specified array synchronously.
-//!				4.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Read() method call is completed returning KErrEof.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs		RFs1
-		CREATE_OBJECT		RDir		RDir1
-		CREATE_OBJECT		TEntryArray	TEntryArray1
-		CREATE_OBJECT		TEntry		TEntry1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect
-		COMMAND			TEntryArray1	new		
-		COMMAND			RDir1		new
-		COMMAND			RDir1		Open		PBASE-F32-RDir-PublicApi-5003-001-Open_command005
-		COMMAND !Error=-25	RDir1		Read		PBASE-F32-RDir-PublicApi-5003-001-Read_command006
-		COMMAND			RDir1		Close
-		COMMAND			TEntry1		~
-		COMMAND			TEntryArray1	~
-		COMMAND			RDir1		~
-		COMMAND			RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5003
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5004
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5004
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Read(TEntryArray &anArray, TRequestStatus &aStatus) test, that reads all filtered directory
-//!				entries into the specified array asynchronously.
-//! 				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ (containing 14 files: 1mb, 
-//!				  any.txt, big_line.txt, filetext_eof.txt, filetext_read.txt, multiline.txt, new_file.txt, 
-//!				  oneliner_tmp.txt, test_rom.txt, test.txt, Test1.txt, Test2.txt, 
-//!				  Test3.txt, USBLOAD.ZIP) as second parameter, and KEntryAttNormal
-//!				  as third parameter.
-//!				3.Call RDir::Read(TEntryArray &anArray, TRequestStatus &aStatus) to read all filtered directory
-//!				  entries into the specified array asynchronously.
-//!				4.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Read() method call is completed returning KErrEof.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs		RFs1
-		CREATE_OBJECT		RDir		RDir1
-		CREATE_OBJECT		TEntryArray	TEntryArray1
-		CREATE_OBJECT		TEntry		TEntry1
-		COMMAND			RFs1		new		
-		COMMAND			RFs1		Connect	
-		COMMAND			TEntryArray1	new	
-		COMMAND			RDir1		new
-		COMMAND			RDir1		Open		PBASE-F32-RDir-PublicApi-5004-001-Open_command005
-		COMMAND !AsyncError=-25	RDir1		Read		PBASE-F32-RDir-PublicApi-5004-001-Read_command006
-		OUTSTANDING
-		COMMAND			RDir1		Close
-		COMMAND			TEntry1		~
-		COMMAND			TEntryArray1	~
-		COMMAND			RDir1		~
-		COMMAND			RFs1		~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5004
-
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5007
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5007
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Read(TEntry &anEntry) test, that calls multiple iterations of Read() and checks the values returned.
-//! 				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ (containing 14 files: 1mb, 
-//!				  any.txt, big_line.txt, filetext_eof.txt, filetext_read.txt, multiline.txt, new_file.txt, 
-//!				  oneliner_tmp.txt, test_rom.txt, test.txt, Test1.txt, Test2.txt, 
-//!				  Test3.txt, USBLOAD.ZIP) as second parameter, and KEntryAttNormal
-//!				  as third parameter.
-//!				3.Call multiple RDir::Read(TEntry &anEntry) methods to read the contents of the entire directory.
-//!				4.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The first six Read() method calls are completed returning KErrNone, the last returns error -25 (KErrEof) as there
-//!				are no more entries. All verifications with expected values pass.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RDir	RDir1
-		CREATE_OBJECT		TEntry	TEntry1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RDir1	new
-		COMMAND			RDir1	Open		PBASE-F32-RDir-PublicApi-5007-001-Open_command005
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-5007-001-Read_command006
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND	!Error=-25	RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Close
-		COMMAND			TEntry1	~
-		COMMAND			RDir1	~		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5007
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5008
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5008
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Read(TPckg<TEntry> &anEntry, TRequestStatus &aStatus) test, that calls multiple iterations of Read() and
-//!				checks the values returned.
-//! 				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ (containing 14 files: 1mb, 
-//!				  any.txt, big_line.txt, filetext_eof.txt, filetext_read.txt, multiline.txt, new_file.txt, 
-//!				  oneliner_tmp.txt, test_rom.txt, test.txt, Test1.txt, Test2.txt, 
-//!				  Test3.txt, USBLOAD.ZIP) as second parameter, and KEntryAttNormal
-//!				  as third parameter.
-//!				3.Call multiple RDir::Read(TPckg<TEntry> &anEntry, TRequestStatus &aStatus) methods to read the contents of the
-//!				  entire directory asynchronously.
-//!				4.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The first six Read() method calls are completed returning KErrNone, the last returns error -25 (KErrEof) as there
-//!				are no more entries. All verifications with expected values pass.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RDir	RDir1
-		CREATE_OBJECT		TEntry	TEntry1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RDir1	new
-		COMMAND			RDir1	Open	PBASE-F32-RDir-PublicApi-5008-001-Open_command005
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-5008-001-Read_command006
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND	!AsyncError=-25	RDir1	Read	PBASE-F32-RDir-PublicApi-global-001-Read_compare_async
-		OUTSTANDING
-		COMMAND			RDir1	Close
-		COMMAND			TEntry1	~
-		COMMAND			RDir1	~		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5008
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5009
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5009
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask) test, that checks that Open() makes it
-//!				possible to filter entries by attributes.
-//! 				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RFs::setAtt, to set some attributes of the files in <DRIVE>:\base\t_sfsrv\.
-//!				3.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ (containing 14 files: 1mb, 
-//!				  any.txt, big_line.txt, filetext_eof.txt, filetext_read.txt, multiline.txt, new_file.txt, 
-//!				  oneliner_tmp.txt, test_rom.txt, test.txt, Test1.txt, Test2.txt, 
-//!				  Test3.txt, USBLOAD.ZIP) as second parameter, and
-//!				  KEntryAttReadOnly|KEntryAttMatchExclusive as third parameter.
-//!				4.Call multiple RDir::Read(TEntry &anEntry) methods to read the contents of the entire directory.
-//!				5.Set previously set attributes back to normal.
-//!				6.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The first two Read() method calls are completed returning KErrNone, the last returns error -25 (KErrEof) as there
-//!				are no more entries (only two read-only files - Test2.txt and USBLOAD.ZIP). All verifications with expected values
-//!				pass.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RDir	RDir1
-		CREATE_OBJECT		TEntry	TEntry1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect	
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command005
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command006
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command008
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command009
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command010
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command011
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command012
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command013
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command014
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command016
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command020
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command021
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command015
-		COMMAND			RDir1	new
-		COMMAND			RDir1	Open		PBASE-F32-RDir-PublicApi-5009-001-Open_command013
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-5009-001-Read_command014
-		COMMAND			TEntry1	=		PBASE-F32-RDir-PublicApi-global-001-assign_Test1
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-5009-001-Read_command015
-		COMMAND			TEntry1	=		PBASE-F32-RDir-PublicApi-global-001-assign_Test3
-		COMMAND	!Error=-25	RDir1	Read		PBASE-F32-RDir-PublicApi-5009-001-Read_command016
-		COMMAND			TEntry1	=		PBASE-F32-RDir-PublicApi-global-001-assign_EOF
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command017
-		COMMAND			RFs1	SetAtt		PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command019
-		COMMAND			RDir1	Close	
-		COMMAND			TEntry1	~
-		COMMAND			RDir1	~		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5009
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5010
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5010
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType) test, that checks that Open() works fine
-//!				with * wildcard.
-//! 				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ (containing 14 files: 1mb, 
-//!				  any.txt, big_line.txt, filetext_eof.txt, filetext_read.txt, multiline.txt, new_file.txt, 
-//!				  oneliner_tmp.txt, test_rom.txt, test.txt, Test1.txt, Test2.txt, 
-//!				  Test3.txt, USBLOAD.ZIP) as second parameter, and empty TUidType as
-//!				  third parameter.
-//!				3.Call RDir::Read(TEntry &anEntry) to read a single directory entry synchronously.
-//!				4.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone. The last Read() method call returns KErrEof as there are 
-//!				only 5 *.txt files (test.txt, Test1.txt, Test2.txt, Test3.txt, test_rom.txt). All other verifications pass.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RDir	RDir1
-		CREATE_OBJECT		TEntry	TEntry1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RDir1	new
-		COMMAND			RDir1	Open		PBASE-F32-RDir-PublicApi-5010-001-Open_command005
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-5010-001-Read_command007
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND	!Error=-25	RDir1	Read		PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync
-		COMMAND			RDir1	Close
-		COMMAND			TEntry1	~
-		COMMAND			RDir1	~
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5010
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5011
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5011
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask) test, that checks that Open() works fine
-//!				with ? wildcard.
-//! 				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\ (containing 14 files: 1mb, 
-//!				  any.txt, big_line.txt, filetext_eof.txt, filetext_read.txt, multiline.txt, new_file.txt, 
-//!				  oneliner_tmp.txt, test_rom.txt, test.txt, Test1.txt, Test2.txt, 
-//!				  Test3.txt, USBLOAD.ZIP) as second parameter, and 
-//!				  KEntryAttNormal as third parameter.
-//!				3.Call RDir::Read(TEntry &anEntry) to read a single directory entry synchronously.
-//!				4.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone. The last Read() method call returns KErrEof as there are 
-//!				only 3 Test?.txt files (Test1.txt, Test2.txt, Test3.txt). All other verifications pass.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RDir	RDir1
-		CREATE_OBJECT		TEntry	TEntry1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RDir1	new
-		COMMAND			RDir1	Open		PBASE-F32-RDir-PublicApi-5011-001-Open_command005
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-5011-001-Read_command006
-		COMMAND			TEntry1	=		PBASE-F32-RDir-PublicApi-global-001-assign_Test1
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-5011-001-Read_command006
-		COMMAND			TEntry1	=		PBASE-F32-RDir-PublicApi-global-001-assign_Test2
-		COMMAND			RDir1	Read		PBASE-F32-RDir-PublicApi-5011-001-Read_command008
-		COMMAND			TEntry1	=		PBASE-F32-RDir-PublicApi-global-001-assign_Test3
-		COMMAND	!Error=-25	RDir1	Read		PBASE-F32-RDir-PublicApi-5011-001-Read_command009
-		COMMAND			TEntry1	=		PBASE-F32-RDir-PublicApi-global-001-assign_EOF
-		COMMAND			RDir1	Close
-		COMMAND			TEntry1	~
-		COMMAND			RDir1	~		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5011
-
-
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-//////								//////
-//////		 ///////////////////////////////////		//////
-//////		 ///				 ///		//////
-//////		 ///	  NEGATIVE TESTS	 ///		//////
-//////		 ///				 ///		//////	
-//////		 ///////////////////////////////////		//////
-//////								//////
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-
-
-////////////////////////////////////////////////////////////////////
-//
-//OPEN
-//Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType)
-//
-////////////////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5101
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5101
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType) negative test, that tries to open
-//!				a directory which not exist and using the NULL UIDs.
-//! 				Uses API elements: Open(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\NotExist\ as second parameter, 
-//!				  and empty TUidType as third parameter. 
-//!				3.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -12 (KErrPathNotFound).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RDir	RDir1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RDir1	new
-		COMMAND	!Error=-12	RDir1	Open		PBASE-F32-RDir-PublicApi-5101-001-Open_command005
-		COMMAND			RDir1	Close
-		COMMAND			RDir1	~		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5101
-
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5102
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5102
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType) negative test, that tries to open
-//!				a directory using the NULL UIDs when directory path is not correct.
-//! 				Uses API elements: Open(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, const TUidType &aUidType),
-//!				  and RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\\\\as second parameter, 
-//!				  and empty TUidType as third parameter.
-//!				3.Call RDir::Close(). 
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -28 (KErrBadName).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RDir	RDir1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RDir1	new
-		COMMAND	!Error=-28	RDir1	Open		PBASE-F32-RDir-PublicApi-5102-001-Open_command005
-		COMMAND			RDir1	Close
-		COMMAND			RDir1	~		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5102
-
-
-//////////////////////////////////////////////////////////
-//
-//OPEN
-//Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask)
-//
-//////////////////////////////////////////////////////////
-
-START_TESTCASE			PBASE-F32-RDir-PublicApi-5103
-//! @SYMTestCaseID		PBASE-F32-RDir-PublicApi-5103
-//! @SYMAPI			RDir
-//! @SYMTestCaseDesc		Function Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask) test, that tries to open a directory
-//!				when directory path is not correct.
-//! 				Uses API elements: Open(), Close().
-//! @SYMTestActions		1.Call Create a RFs session and call it's Connect() function.
-//!				2.Call RDir::Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask),
-//!				  and empty RFs session as first parameter, and <DRIVE>:\base\t_sfsrv\\\\ as second parameter, 
-//!				  and KEntryAttNormal as third parameter.
-//!				3.Call RDir::Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -28 (KErrBadName).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini 
-		CREATE_OBJECT		RFs	RFs1
-		CREATE_OBJECT		RDir	RDir1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RDir1	new
-		COMMAND !Error=-28	RDir1	Open		PBASE-F32-RDir-PublicApi-5103-001-Open_command005
-		COMMAND			RDir1	Close
-		COMMAND			RDir1	~		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-RDir-PublicApi.ini
-   		CREATE_OBJECT		RFs		RFs1
-		CREATE_OBJECT		CFileMan	CFileMan1
-   		COMMAND			RFs1		new		
-   		COMMAND			RFs1		Connect
-		COMMAND			CFileMan1	NewL		PBASE-F32-RDir-PublicApi-NewL
-		COMMAND			CFileMan1	Delete		PBASE-F32-RDir-PublicApi-001-Delete
-		COMMAND			RFs1		RmDir		PBASE-F32-RDir-PublicApi-001-RmDir
-		COMMAND			CFileMan1	~
-   		COMMAND			RFs1		~		
-END_TEST_BLOCK
-
-END_TESTCASE			PBASE-F32-RDir-PublicApi-5103
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Drives-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,669 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Drives-PublicApi-ANY
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Anton Grober
-//! @SYMScriptDescription	The test script contains API drives & volumes related tests for RFs functions that don't depend on any special type of test drive.
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1001
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1001
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		21/08/2006
-//! @SYMTestCaseDesc		DriveList() test.
-//!				Uses API elements: DriveList().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call DriveList() passing TDriveList as a reference.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	DriveList() completes with KErrNone and returns at least C and Z drives.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	DriveList		PBASE-F32-RFS-PublicApi-1001-001-DriveList_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1001
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1007
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1007
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		CharToDrive() and DriveToChar() tests. Passing exisiting drive and character representing that drive in both cases.
-//!				Uses API elements: CharToDrive(), DriveToChar()
-//! @SYMTestActions		1. Call CharToDrive() passing 'X' as first parameter and TInt reference as second parameter.
-//!				2. Call DriveToChar() passing EdriveX as first parameter and TChar reference as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function CharToDrive() returns EDriveX through reference parameter and returns KErrNone. Fucntion DriveToChar returns 'X' through reference parameter and returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	CharToDrive		PBASE-F32-RFS-PublicApi-1007-001-CharToDrive_command01
-		COMMAND		RFs1	DriveToChar		PBASE-F32-RFS-PublicApi-1007-001-DriveToChar_command02
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1007
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1015
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1015
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		2/10/2006
-//! @SYMTestCaseDesc		Drive() negative test. Passing incorrect drive number as parameter.
-//!				Uses API elements: Drive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Drive() passing TDriveInfo reference as first parameter and non-existent drive number.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Drive() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Drive		PBASE-F32-RFS-PublicApi-1015-001-Drive_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1015
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1017
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1017
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		2/10/2006
-//! @SYMTestCaseDesc		Volume(). Passing non-exisiting drive index as parameter.
-//!				Uses API elements: Volume().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Volume() passing  TVolumeInfo reference as first parameter and the non-existing drive number as a second parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Volume() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Volume		PBASE-F32-RFS-PublicApi-1017-001-Volume_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1017
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1019
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1019
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		02/10/2006
-//! @SYMTestCaseDesc		SetVolumeLabel() function test. Passing incorrect drive index as parameter.
-//!				Uses API elements: SetVolumeLabel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetVolumelabel() passing incorrect drive index as a parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetVolumeLabel() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	SetVolumeLabel		PBASE-F32-RFS-PublicApi-1019-001-SetVolumeLabel_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1019
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1025
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1025
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		02/10/2006
-//! @SYMTestCaseDesc		Subst() function test. Passing incorrect drive number as parameter.
-//!				Uses API elements: Subst().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Subst() passing incorrect drive number as parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Subst() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Subst		PBASE-F32-RFS-PublicApi-1025-001-Subst_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1025
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1028
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1028
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		CharToDrive() tests. Passing incorrect character as parameter.
-//!				Uses API elements: CharToDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call CharToDrive() passing incorrect character as first parameter and TInt reference as second parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function CharToDrive() returns KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND	!Error=-6	RFs1	CharToDrive		PBASE-F32-RFS-PublicApi-1028-001-CharToDrive_command01
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1028
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1029
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1029
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		DriveToChar() tests. Passing incorrect number as parameter.
-//!				Uses API elements: DriveToChar()
-//!				1. Call DriveToChar() passing bad drive index as first parameter and TChar reference as second parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function DriveToChar() returns KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND	!Error=-6	RFs1	DriveToChar		PBASE-F32-RFS-PublicApi-1029-001-DriveToChar_command01
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1029
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1030
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1030
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		CheckDisk() test. Passing invalid drive path as a parameter.
-//!				Uses API elements: CheckDisk(), SetSessionPath()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetSessionPath() passing RAMDriveTestPath value as a parameter to set RAM drive as a default drive
-//!				3. Call CheckDisk() passing "ThisIsNotADrivePath" value instead of a drive path.
-//!				4. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	CheckDisk() returns KErrNone, as it checks the default drive set by SetSessionPath when the drive
-//!                              path is invalid.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-1030-001-SetSessionPath_command02
-		COMMAND			RFs1	CheckDisk		PBASE-F32-RFS-PublicApi-1030-001-CheckDisk_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1030
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1032
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1032
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		ScanDrive() test. Passing not a drive path as a parameter.
-//!				Uses API elements: ScanDrive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ScanDrive() passing "ThisIsNotADrivePath" value instead of a drive path.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ScanDrive() returns KErrInUse(-14).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-14	RFs1	ScanDrive		PBASE-F32-RFS-PublicApi-1032-001-ScanDrive_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1032
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1034
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1034
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		02/10/2006
-//! @SYMTestCaseDesc		SetDriveName() function test. Passing incorrect drive number as parameter.
-//!				Uses API elements: SetDriveName().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetDriveName() passing incorrect drive number as first parameter and descriptor reference as second.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetDriveName() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	SetDriveName		PBASE-F32-RFS-PublicApi-1034-001-SetDriveName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1034
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1035
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1035
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		02/10/2006
-//! @SYMTestCaseDesc		GetDriveName() function test. Passing incorect drive number as parameter.
-//!				Uses API elements: GetDriveName().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call GetDriveName() passing incorrect drive number as first parameter and descriptor reference as second.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDriveName() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	GetDriveName		PBASE-F32-RFS-PublicApi-1035-001-GetDriveName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1035
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1046
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1046
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		02/10/2006
-//! @SYMTestCaseDesc		GetReserveAccess() passing invalid drive's number as drive number parameter.
-//!				Uses API elements: GetReserveAccess().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call GetReserveAccess() passing invalid drive's number as drive number parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetReserveAccess() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	GetReserveAccess		PBASE-F32-RFS-PublicApi-1046-001-GetReserveAccess_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1046
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1047
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1047
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		02/10/2006
-//! @SYMTestCaseDesc		ReleaseReserveAccess() function test. Passing invalid drive number as parameter.
-//!				Uses API elements: ReleaseReserveAccess().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ReleaseReserveAccess() passing invalid drive's number as drive number parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReleaseReserveAccess() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	ReleaseReserveAccess		PBASE-F32-RFS-PublicApi-1047-001-ReleaseReserveAccess_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1047
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1038
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1038
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		02/10/2006
-//! @SYMTestCaseDesc		LockDrive() function test. Passing invalid drive index as parameter.
-//!				Uses API elements: LockDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() passing some invalid drive's number as drive number parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function LockDrive() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	LockDrive		PBASE-F32-RFS-PublicApi-1038-001-LockDrive_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1038
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1050
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1050
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		20/12/2006
-//! @SYMTestCaseDesc		Drive() function test with KDefaultDrive as paramteter.
-//!				Uses API elements: Drive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Drive() with TDriveInfo parameter as a refernce.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Drive() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Drive
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1050
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1051
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1051
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		4/01/2007
-//! @SYMTestCaseDesc		Volume() function test with KDefaultDrive as paramteter.
-//!				Uses API elements: Volume().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Volume() with TVolumeInfo parameter as a refernce.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Volume() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Volume
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1051
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1059
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1059
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		24/01/2007
-//! @SYMTestCaseDesc		IsValidDrive() passing bad drive index.
-//!				Uses API elements: IsValidDrive().
-//! @SYMTestActions		1. Call IsValidDrive() passing  bad drive index.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function IsValidDrive() returns EFalse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	IsValidDrive		PBASE-F32-RFS-PublicApi-1059-001-IsValidDrive_command02
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1059
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1064
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1064
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		ErasePassword() test. Passing invalid drive's number.
-//!				Uses API elements: ErasePassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ErasePassword() passing invalid drive's number.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ErasePassword() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	ErasePassword		PBASE-F32-RFS-PublicApi-1064-001-ErasePassword_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1064
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1069
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1069
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		ClearPassword() test. Passing invalid drive's number.
-//!				Uses API elements: ClearPassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ClearPassword() passing invalid drive's number.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ErasePassword() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	ClearPassword		PBASE-F32-RFS-PublicApi-1069-001-ClearPassword_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1069
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1074
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1074
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		UnlockDrive() test. Passing invalid drive's number.
-//!				Uses API elements: UnlockDrive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call UnlockDrive() passing invalid drive's number and some password.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function UnlockDrive() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	UnlockDrive		PBASE-F32-RFS-PublicApi-1074-001-UnlockDrive_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1074
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1084
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1084
-//! @SYMAPI			RFs
-//! @SYMCreationDate		08/02/2007
-//! @SYMTestCaseDesc		DriveToChar() test with a KDefaultDrive as a drive number.
-//!				Uses API elements: DriveToChar()
-//! @SYMTestActions		1. Call DriveToChar() passing a KDefaultDrive (= KMaxTInt = 2147483647) as a drive number.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function DriveToChar() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	DriveToChar		PBASE-F32-RFS-PublicApi-1084-001-DriveToChar_command01
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1084
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1014
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1014
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		25/09/2006 
-//! @SYMTestCaseDesc		GetSystemDrive() test.
-//!				Uses API elements: GetSystemDrive().
-//! @SYMTestActions		1. Call GetSystemDrive().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetSystemDrive() returns default drive's number in case system configuration is default.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	GetSystemDrive		PBASE-F32-RFS-PublicApi-1014-001-GetSystemDrive_command01
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1014
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1026
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1026
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		GetMediaSerialNumber() function test. Passing incorrect drive number as parameter.
-//!				Uses API elements: GetMediaSerialNumber().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call GetMediaSerialNumber() passing  descriptor reference as first parameter and incorrect drive number as second.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetMediaSerialNumber() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	GetMediaSerialNumber		PBASE-F32-RFS-PublicApi-1026-001-GetMediaSerialNumber_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1026
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1081
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1081
-//! @SYMAPI			RFs
-//! @SYMAuthor			Oleg Kuznetsov
-//! @SYMCreationDate		02/03/2007
-//! @SYMTestCaseDesc		Functions GetSystemDriveChar() test.
-//!				Uses API elements: GetSystemDriveChar().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call GetSystemDriveChar().
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	GetSystemDriveChar() completes with KErrNone and returns 'C' char.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	GetSystemDriveChar		PBASE-F32-RFS-PublicApi-1081-001-GetSystemDriveChar_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1081
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1082
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1082
-//! @SYMAPI			RFs
-//! @SYMAuthor			Oleg Kuznetsov
-//! @SYMCreationDate		02/03/2007
-//! @SYMTestCaseDesc		Functions VolumeIOParam() test with default drive letter.
-//!				Uses API elements: VolumeIOParam().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call VolumeIOParam() passing default drive as argument.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	VolumeIOParam() completes with KErrNone and returns volume IO parameter information.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	VolumeIOParam		PBASE-F32-RFS-PublicApi-1082-001-VolumeIOParam_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1082
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1085
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1085
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function VolumeIOParam() test with negative drive letter.
-//!				Uses API elements: VolumeIOParam().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call VolumeIOParam() passing the negative drive number as argument.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Return KErrArgument (-6).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-6	RFs1	VolumeIOParam		PBASE-F32-RFS-PublicApi-1085-001-VolumeIOParam_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1085
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Drives-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,849 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Drives-PublicApi-RAM
-//! @SYMScriptTestEnvironment	This test script requires a basic RAM.
-//! @SYMScriptAuthor 		Anton Grober
-//! @SYMScriptDescription	The test script contains API drives & volumes related tests for RFs functions that perform operations on a RAM (not removeable RAM drive).
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1002
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1002
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		21/08/2006 
-//! @SYMTestCaseDesc		Drive() function test. Passing exisiting drive index as parameter.
-//!				Uses API elements: Drive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Drive() passing TDriveInfo reference as first parameter and RAM-drive as second parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function returns KErrNone and iType field of TDriveInfo indeicates a correct type.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	Drive		PBASE-F32-RFS-PublicApi-1002-001-Drive_command03
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1002
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1003
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1003
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		Volume() and SetVolumeLabel() function test. Passing exisiting drive index as parameter.
-//!				Uses API elements: Volume(), SetVolumeLabel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Saving volume label.
-//!				3. Call SetVolumeLabel() passing "Test" as first parameter and the drive number as a second parameter.
-//!				4. Call Volume() passing  TVolumeInfo reference as first parameter and the drive number as a second parameter.
-//!				5. Restoring volume label.
-//!				6. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetVolumeLabel() returns KErrNone.  Function Volume() returns KErrNone and iName field of TVolumeInfo is "Test".
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	Volume		PBASE-F32-RFS-PublicApi-1003-001-Volume_command03
-		COMMAND		RFs1	SetVolumeLabel		PBASE-F32-RFS-PublicApi-1003-001-SetVolumeLabel_command04
-		COMMAND		RFs1	Volume		PBASE-F32-RFS-PublicApi-1003-001-Volume_command05
-		COMMAND		RFs1	SetVolumeLabel		PBASE-F32-RFS-PublicApi-1003-001-SetVolumeLabel_command06
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1003
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1004
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1004
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		SetSubst() and Subst() functions test. Passing exisiting drive index as second parameter and existing path to folder as second parameter.
-//!				Uses API elements: Subst(), SetSubst().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetSubst() passing "\base\" as a first parameter and non-mounted valid drive's number as a drive number.
-//!				3. Check that function returned KErrNone.	
-//!				4. Call Subst() passing TDesC16 reference as first parameter and non-mounted valid drive's number as a drive number.
-//!				5. Call SetSubst() passing ""(empty descriptor) as a first parameter and non-mounted valid drive's number as a drive number. This will unsubst the substed.
-//!				6. Check that function returned KErrNone.
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetSubst() returns KErrNone. Functions Subst() returns "\base\" through TDesC16 reference and returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1004-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1004-001-DismountFileSystem_command04
-		COMMAND		RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1004-001-SetSubst_command05
-		COMMAND		RFs1	Subst		PBASE-F32-RFS-PublicApi-1004-001-Subst_command06
-		COMMAND		RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1004-001-SetSubst_command07
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1004-001-MountFileSystem_command08
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1004
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1008
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1008
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		CheckDisk() passing path with FAT filesystem.
-//!				Uses API elements: CheckDisk().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call CheckDisk() passing drive with FAT filesystem as a drive number.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function CheckDisk() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	CheckDisk		PBASE-F32-RFS-PublicApi-1008-001-CheckDisk_command03
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1008
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1009
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1009
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ScanDrive() passing path to drive with FAT filesystem.
-//!				Uses API elements: ScanDrive();
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ScanDrive() passing drive's with FAT filesystem number as a drive number.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function ScanDrive() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	ScanDrive		PBASE-F32-RFS-PublicApi-1009-001-ScanDrive_command03
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1009
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1010
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1010
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		SetDriveName() and GetDriveName() tests. Passing existing drive as parameter and some descriptor as drive name or store for returned value.
-//!						Uses API elements: GetDriveName(), SetDriveName();
-//! @SYMTestActions		1. Call Connect().
-//!				2. Saving drive name for restoring.
-//!				3. Call SetDriveName() passing default drive's number as first parameter and "TEST" as second parameter.
-//!				4. Call GetDriveName() passing default drive's number as first paramter and TDesC16 reference as second paramter.
-//!				5. Restoring drive name.
-//!				6. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetDriveName() returns KErrNone. Function GetDriveName() returns "TEST" through a TDesC16 reference and returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	GetDriveName		PBASE-F32-RFS-PublicApi-1010-001-GetDriveName_command03
-		COMMAND		RFs1	SetDriveName		PBASE-F32-RFS-PublicApi-1010-001-SetDriveName_command04
-		COMMAND		RFs1	GetDriveName		PBASE-F32-RFS-PublicApi-1010-001-GetDriveName_command05
-		COMMAND		RFs1	SetDriveName		PBASE-F32-RFS-PublicApi-1010-001-SetDriveName_command06
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1010
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1013
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1013
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ReserveDriveSpace(), GetReserveAccess() and ReleaseReserveAccess() tests. Passing existing drive as first parameter and amount of space int bytes as second.
-//!						Uses API elements: ReserveDriveSpace(), GetReserveAccess() and ReleaseReserveAccess().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ReserveDriveSpace() passing 100(bytes) as first parameter and default drive's number as second parameter.	
-//!				3. Call GetReserveAccess() passing default drive's number as parameter.
-//!				4. Call ReleaseReserveAccess() passing default drive's number as parameter.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function ReserveReserveAccess() returns KErrNone. Function GetReseveAccess() returns KErrNone. Function ReleaseReserveAccess() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	ReserveDriveSpace		PBASE-F32-RFS-PublicApi-1013-001-ReserveDriveSpace_command03
-		COMMAND		RFs1	GetReserveAccess		PBASE-F32-RFS-PublicApi-1013-001-GetReserveAccess_command04
-		COMMAND		RFs1	ReleaseReserveAccess		PBASE-F32-RFS-PublicApi-1013-001-ReleaseReserveAccess_command05
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1013
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1018
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1018
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		Volume() function test. Passing non-mounted drive index as parameter.
-//!				Uses API elements: Volume().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Volume() passing  TVolumeInfo reference as first parameter and the non-mounted drive's number as a second parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Volume() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1018-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1018-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	Volume		PBASE-F32-RFS-PublicApi-1018-001-Volume_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1018-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1018
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1020
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1020
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		SetVolumeLabel() function test. Passing not mounted drive index as parameter.
-//!				Uses API elements: SetVolumeLabel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetVolumeLabel() passing  TVolumeInfo reference as first parameter and the non-mounted drive's number as a second parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetVolumeLabel() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1020-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1020-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	SetVolumeLabel		PBASE-F32-RFS-PublicApi-1020-001-SetVolumeLabel_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1020-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1020
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1022
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1022
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		SetSubst() function test. Passing exisiting and mounted drive index as parameter.
-//!				Uses API elements: SetSubst().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetSubst() passing some correct path descriptor as first parameter and some mounted drive as second.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetSubst() returns KErrGeneral.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND	!Error=-2	RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1022-001-SetSubst_command03
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1022
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1023
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1023
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		SetSubst() function test. Passing correct path as other parameter and incorrect drive index as parameter.
-//!				Uses API elements: SetSubst().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetSubst() passing  descriptor with some icorrect path as first parameter and umounted drive number as second.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetSubst() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND	!Error=-28	RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1023-001-SetSubst_command03
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1023
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1024
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1024
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		SetSubst() function test. Passing not mounted drive index as parameter and incorrect path as other parameter.
-//!				Uses API elements: SetSubst().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetSubst() passing  descriptor with some incorrect path as first parameter and umounted drive number as second.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetSubst() returns KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1024-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1024-001-DismountFileSystem_command04
-		COMMAND	!Error=-28	RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1024-001-SetSubst_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1024-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1024
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1031
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1031
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		CheckDisk() test that passes a non-mounted drive number as a parameter.
-//!				Uses API elements: CheckDisk()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call CheckDisk() passing non-mounted drive number as a parameter.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function CheckDisk() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1031-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1031-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	CheckDisk		PBASE-F32-RFS-PublicApi-1031-001-CheckDisk_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1031-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1031
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1033
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1033
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ScanDrive() test that passes a non-mounted drive number as a parameter.
-//!				Uses API elements: ScanDrive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ScanDrive() passing a non-mounted drive number as a parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ScanDrive() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1033-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1033-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	ScanDrive		PBASE-F32-RFS-PublicApi-1033-001-ScanDrive_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1033-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1033
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1037
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1037
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		LockDrive() function test. Passing not mounted drive index as parameter.
-//!				Uses API elements: LockDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() passing some nonmounted drive's number as drive number parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function LockDrive() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1037-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1037-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	LockDrive		PBASE-F32-RFS-PublicApi-1037-001-LockDrive_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1037-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1037
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1043
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1043
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		ReserveDriveSpace() function test. Trying to reserve drive space again after getting access to it.
-//!				Uses API elements: ReserveDriveSpace().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ReserveDriveSpace() passing valid drive's number(RAM-drive's) as drive number parameter and 100(bytes) as amount of space to reserve.
-//!				3. Call GetReserveAccess() with same drive's number(default drive's).
-//!				4. Call ReserveDriveSpace() passing valid drive's number(RAM-drive's) as drive number parameter and 100 as amount of space to reserve.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReserveDriveSpace() returns KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT		RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	ReserveDriveSpace		PBASE-F32-RFS-PublicApi-1043-001-ReserveDriveSpace_command03
-		COMMAND			RFs1	GetReserveAccess		PBASE-F32-RFS-PublicApi-1043-001-GetReserveAccess_command04
-		COMMAND	!Error=-14	RFs1	ReserveDriveSpace		PBASE-F32-RFS-PublicApi-1043-001-ReserveDriveSpace_command05
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1043
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1044
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1044
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		ReserveDriveSpace() function test. Trying to reserve too much drive space.
-//!				Uses API elements: ReserveDriveSpace().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ReserveDriveSpace() passing valid drive's number(RAM-drive') as drive number parameter and 10000000000(in bytes and must be too big) as amount of space to reserve.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReserveDriveSpace() returns KErrArgument
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND	!Error=-6	RFs1	ReserveDriveSpace		PBASE-F32-RFS-PublicApi-1044-001-ReserveDriveSpace_command03
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1044
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1045
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1045
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		GetReserveAccess() function test. Trying to get access without reserving any space before.
-//!				Uses API elements: GetReserveAccess().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call GetReserveAccess() passing valid drive's number (RAM-drive') as drive number parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetReserveAccess() returns KErrPremissionDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND	!Error=-46	RFs1	GetReserveAccess		PBASE-F32-RFS-PublicApi-1045-001-GetReserveAccess_command03
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1045
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1053
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1053
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		SetSubst() functions test. Passing existing path to folder as parameter. Using KDefaultDrive as drive parameter.
-//!				Uses API elements: SetSubst().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetSubst() passing "\base\" as a first parameter. Testing with default drive.
-//!				3. Call SetSubst() passing ""(empty descriptor) as a first parameter. This will unsubst the substed.
-//!				4. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetSubst() returns KErrGeneral.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND	!Error=-2	RFs1	SetSubst	PBASE-F32-RFS-PublicApi-1053-001-SetSubst_command03
-		COMMAND	!Error=-2	RFs1	SetSubst	PBASE-F32-RFS-PublicApi-1053-001-SetSubst_command04
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1053
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1058
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1058
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		24/01/2007
-//! @SYMTestCaseDesc		IsValidDrive() passing non-mounted drive as parameter.
-//!				Uses API elements: IsValidDrive().
-//! @SYMTestActions		1. Call IsValidDrive() passing non-mounted drive in range from EDriveC to EDriveZ.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function IsValidDrive() returns ETrue.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1058-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1058-001-DismountFileSystem_command04
-		COMMAND		RFs1	IsValidDrive		PBASE-F32-RFS-PublicApi-1058-001-IsValidDrive_command05
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1058-001-MountFileSystem_command06
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1058
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1062
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1062
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ReleaseReserveAccess() test that uses the function without previous call to ReserveDriveSpace(). 
-//!				Uses API elements: ReleaseReserveAccess()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ReleaseReserveAccess() passing RAM-drive's path as path parameter.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function ReleaseReserveAccess() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	ReleaseReserveAccess		PBASE-F32-RFS-PublicApi-1062-001-ReleaseReserveAccess_command03
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1062
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1063
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1063
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		SetSubst() test. Passing some non-mounted drive index as parameter. Drive() test passing substed drive as parameter.
-//!				Uses API elements: SetSubst(), Drive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetSubst() with path '\base\' and non-mounted drive as parameter.
-//!				3. Call Drive() and get through TDriveInfo object through the reference using the same drive as parameter.
-//!				4. Call SetSubst() with empty path to unsubst the drive we have substed.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Drive() returns KErrNone and TDriveInfo object through the reference with KDriveAttSubsted attribute enabled.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1063-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1063-001-DismountFileSystem_command04
-		COMMAND		RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1063-001-SetSubst_command05
-		COMMAND		RFs1	Drive		PBASE-F32-RFS-PublicApi-1063-001-Drive_command06
-		COMMAND		RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1063-001-SetSubst_command07
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1063-001-MountFileSystem_command08
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1063
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1065
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1065
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ErasePassword() test. Passing non-mounted drive's number as parameter .
-//!				Uses API elements: ErasePassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ErasePassword() passing not mounted drive's number.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ErasePassword() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1065-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1065-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	ErasePassword		PBASE-F32-RFS-PublicApi-1065-001-ErasePassword_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1065-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1065
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1070
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1070
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ClearPassword() test. Passing non-mounted drive's number as parameter.
-//!				Uses API elements: ClearPassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ClearPassword() passing not mounted drive's number and 'test' as password.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ClearPassword() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1070-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1070-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	ClearPassword		PBASE-F32-RFS-PublicApi-1070-001-ClearPassword_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1070-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1070
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1075
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1075
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		UnlockDrive() test. Passing non-mounted drive's number as parameter.
-//!				Uses API elements: UnlockDrive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call UnlockDrive() passing not mounted drive's number and 'test' as password.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function UnlockDrive() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1075-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1075-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	UnlockDrive		PBASE-F32-RFS-PublicApi-1075-001-UnlockDrive_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1075-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1075
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1078
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1078
-//! @SYMAPI			RFs
-//! @SYMCreationDate		08/02/2007 
-//! @SYMTestCaseDesc		ReserveDriveSpace() test. Testing with non-mounted drive.
-//!				Uses API elements: ReserveDriveSpace()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ReserveDriveSpace() passing non-mounted drive's number and 100(bytes) to reserve.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReserveDriveSpace() returns KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1078-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1078-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	ReserveDriveSpace		PBASE-F32-RFS-PublicApi-1078-001-ReserveDriveSpace_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1078-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1078
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1079
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1079
-//! @SYMAPI			RFs
-//! @SYMCreationDate		08/02/2007 
-//! @SYMTestCaseDesc		GetReserveAccess() test. Testing with non-mounted drive.
-//!				Uses API elements: GetReserveAccess()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call GetReserveAccess() passing non-mounted drive's number.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetReserveAccess() returns KErrPermissionDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1079-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1079-001-DismountFileSystem_command04
-		COMMAND	!Error=-46	RFs1	GetReserveAccess		PBASE-F32-RFS-PublicApi-1079-001-GetReserveAccess_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1079-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1079
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1080
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1080
-//! @SYMAPI			RFs
-//! @SYMCreationDate		08/02/2007 
-//! @SYMTestCaseDesc		ReleaseReserveAccess() test.Testing with non-mounted drive.
-//!				Uses API elements: ReleaseReserveAccess()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ReleaseReserveAccess() passing non-mounted drive's number.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReleaseReserveAccess() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect		
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1080-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1080-001-DismountFileSystem_command04
-		COMMAND		RFs1	ReleaseReserveAccess		PBASE-F32-RFS-PublicApi-1080-001-ReleaseReserveAccess_command05
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1080-001-MountFileSystem_command06
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1080
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1027
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1027
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		GetMediaSerialNumber() function test. Passing substed drive's index as parameter.
-//!				Uses API elements: GetMediaSerialNumber().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Subst() passing empty drive suitable for substing as drive number and "<DRIVE>:\base\" as path where <DRIVE> is a test drive.
-//!				3. Call GetMediaSerialNumber() passing  descriptor reference as first parameter and substed drive number as second.
-//!				4. Call Subst passing empty drive suitable for substing as drive number and ""(empty descriptor) to unsubst drive.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetMediaSerialNumber() returns KErrNotSupported
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1027-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-1027-001-DismountFileSystem_command04
-		COMMAND			RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1027-001-SetSubst_command05
-		COMMAND	!Error=-5	RFs1	GetMediaSerialNumber		PBASE-F32-RFS-PublicApi-1027-001-GetMediaSerialNumber_command06
-		COMMAND			RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1027-001-SetSubst_command07
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1027-001-MountFileSystem_command08
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1027
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1086
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1086
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function VolumeIOParam() test with non mounted drive.
-//!				Uses API elements: VolumeIOParam().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call VolumeIOParam() passing the drive number where is not mounted file system as argument.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Return KErrNotReady (-18).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-1086-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-1086-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	VolumeIOParam		PBASE-F32-RFS-PublicApi-1086-001-VolumeIOParam_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-1086-001-MountFileSystem_command06
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1086
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Drives-PublicApi-REM-manual.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,347 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Drives-PublicApi-REM-manual
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Anton Grober
-//! @SYMScriptDescription	The test script contains API drives & volumes related tests for RFs functions 
-//!				that perform operations on a removeable RAM drive, but cannot be fully automated. This script requires user intervention.
-
-LOAD_SUITE	T_Sfsrv
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1041
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1041
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober
-//! @SYMCreationDate		02/10/2006
-//! @SYMTestCaseDesc		UnlockDrive() function test. Passing invalid password as parameter.
-//!				Uses API elements: UnlockDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() passing some valid drive's number as drive number parameter and some password.
-//!				3. Open/close card door.
-//!				4. Call UnlockDrive() passing same drive's number as drive number parameter and invalid password as old password.
-//!				5  Call UnlockDrive() passing same drive's number as drive number parameter and valid password. It's neccessary for clearing password in next step.
-//!				6. Call ClearPassword() to clean up changes.
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function UnlockDrive() returns KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	LockDrive	PBASE-F32-RFS-PublicApi-1041-001-LockDrive_command03
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1041-001-NotifyChange_command05
-		COMMAND			RFs1	prompt
-		OUTSTANDING
-		COMMAND			RFs1	Drive		PBASE-F32-RFS-PublicApi-1041-001-Drive_command07
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1041-001-NotifyChange_command08
-		OUTSTANDING
-		COMMAND			RFs1	Drive		PBASE-F32-RFS-PublicApi-1041-001-Drive_command10
-		COMMAND	!Error=-21	RFs1	UnlockDrive	PBASE-F32-RFS-PublicApi-1041-001-UnlockDrive_command11
-		COMMAND			RFs1	UnlockDrive	PBASE-F32-RFS-PublicApi-1041-001-UnlockDrive_command12
-		COMMAND			RFs1	ClearPassword	PBASE-F32-RFS-PublicApi-1041-001-ClearPassword_command13
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1041
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1056
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1056
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		ClearPassword() test. Testing with invalid password.
-//!				Uses API elements: ClearPassword(), LockDrive(), UnlockDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() with MMC-card drive's number and 'test' password.
-//!				3. Open/Close MMC-card doors.
-//!				4. Call UnlockDrive() with MMC-card drive's number and 'test' password.
-//!				5. Call ClearPassword() passing MMC-card drive's number and wrong password.
-//!				6. Call ClearPassword() passing MMC-card drive's number and 'test' as password.
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ClearPassworPassword() returns KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	LockDrive	PBASE-F32-RFS-PublicApi-1056-001-LockDrive_command03
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1056-001-NotifyChange_command05
-		COMMAND			RFs1	prompt
-		OUTSTANDING
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1056-001-NotifyChange_command07
-		OUTSTANDING
-		COMMAND			RFs1	UnlockDrive	PBASE-F32-RFS-PublicApi-1056-001-UnlockDrive_command09
-		COMMAND	!Error=-21	RFs1	ClearPassword	PBASE-F32-RFS-PublicApi-1056-001-ClearPassword_command10
-		COMMAND			RFs1	ClearPassword	PBASE-F32-RFS-PublicApi-1056-001-ClearPassword_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1056
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1067
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1067
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006
-//! @SYMScriptInfo		This test case should DESTROY all your data on MMC card.
-//! @SYMTestCaseDesc		ErasePassword() test. Passing existing drive as paramter. Drive should be an MMC card.
-//!				Uses API elements: ErasePassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() passing MMC drive's with fat filesystem number and "test" as password.
-//!				3. Open/Close card door.
-//!				4. Call ErasePassword() passing MMC drive's with FAT filesystem number.
-//!				5. Call Close().
-//!				6. Reformatting MMC-drive with EHighDensity parameter.(step PBASE-F32-RFS-PublicApi-1067-002)
-//!				7. Copying USBLOAD.ZIP to MMC drive.(step PBASE-F32-RFS-PublicApi-1067-003)
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function ErasePassword() erase a drive and clears password and returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	LockDrive	PBASE-F32-RFS-PublicApi-1067-001-LockDrive_command03
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1067-001-NotifyChange_command05
-		COMMAND		RFs1	prompt
-		OUTSTANDING
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1067-001-NotifyChange_command07
-		OUTSTANDING
-		COMMAND		RFs1	ErasePassword	PBASE-F32-RFS-PublicApi-1067-001-ErasePassword_command09
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-		CREATE_OBJECT	RFs	rfs
-		CREATE_OBJECT	RFormat	format
-		COMMAND		rfs	new
-		COMMAND		rfs	Connect
-		COMMAND		format	new		PBASE-F32-RFS-PublicApi-1067-002-new_command04
-		COMMAND		format	Open		PBASE-F32-RFS-PublicApi-1067-002-Open_command05
-		COMMAND		format	Next
-		COMMAND		format	Close
-		COMMAND		format	~
-		COMMAND		rfs	Close
-		COMMAND		rfs	~
-	END_TEST_BLOCK
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-		CREATE_OBJECT	RFs	rfs
-		CREATE_OBJECT	CFileMan	fileMan
-		CREATE_OBJECT	RFile	file
-		COMMAND		rfs	new
-		COMMAND		rfs	Connect
-		COMMAND		file	new
-		COMMAND		file	Open		PBASE-F32-RFS-PublicApi-1067-003-Open_command05
-		COMMAND		fileMan	NewL		PBASE-F32-RFS-PublicApi-1067-003-NewL_command07
-		COMMAND		fileMan	Copy		PBASE-F32-RFS-PublicApi-1067-003-Copy_command08
-		COMMAND		fileMan	~
-		COMMAND		file	Close
-		COMMAND		file	~
-		COMMAND		rfs	Close
-		COMMAND		rfs	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1067
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1011
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1011
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		LockDrive(), UnlockDrive() and ClearPassword() tests. LockDrive() locks MMC card using a short password, UnlockDrive() unlocks using same password and ClearPassword() clears the password.
-//!				Uses API elements: LockDrive(), UnlockDrive(), ClearPassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() passing drive's with FAT filesystem number as first parameter passing "test"(TMediaPassword type) as second parameter.
-//!				3. Open/close card door.
-//!				4. Call UnlockDrive() passing drive's with FAT filesystem number as first parameter and "test"(TMediaPassword type) as second parameter.
-//!				5. Open/close card door.
-//!				6. Call ClearPassword() passing drive's with FAT filesystem number as first parameter and "test"(TMediaPassword type) as second parameter.
-//!				7. Open/close card door.
-//!				8. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function LockDrive() returns KErrNone. Function UnlockDrive() returns KErrNone. Function ClearPassword() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	LockDrive	PBASE-F32-RFS-PublicApi-1011-001-LockDrive_command03
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1011-001-NotifyChange_command05
-		COMMAND		RFs1	prompt
-		OUTSTANDING	
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1011-001-NotifyChange_command08
-		COMMAND		RFs1	Drive		PBASE-F32-RFS-PublicApi-1011-001-Drive_command07
-		OUTSTANDING	
-		COMMAND		RFs1	Drive		PBASE-F32-RFS-PublicApi-1011-001-Drive_command10
-		COMMAND		RFs1	UnlockDrive	PBASE-F32-RFS-PublicApi-1011-001-UnlockDrive_command11
-		COMMAND		RFs1	ClearPassword	PBASE-F32-RFS-PublicApi-1011-001-ClearPassword_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1011
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1039
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1039
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		LockDrive() function test. Passing invalid password as parameter.
-//!				Uses API elements: LockDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() passing some valid drive's number as drive number parameter and some password.
-//!				3. Open/close MMC card door.
-//!				4. Call LockDrive() passing same drive's number as drive number parameter and invalid password as old password.
-//!				5. Call UnlockDrive() with valid password and same drive to be able to clear password later.
-//!				6. Call ClearPassword() to clean up changes.
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function LockDrive() returns KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	LockDrive	PBASE-F32-RFS-PublicApi-1039-001-LockDrive_command03
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1039-001-NotifyChange_command05
-		COMMAND			RFs1	prompt
-		OUTSTANDING	
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1039-001-NotifyChange_command07
-		OUTSTANDING	
-		COMMAND	!Error=-21	RFs1	LockDrive	PBASE-F32-RFS-PublicApi-1039-001-LockDrive_command09
-		COMMAND			RFs1	UnlockDrive	PBASE-F32-RFS-PublicApi-1039-001-UnlockDrive_command10
-		COMMAND			RFs1	ClearPassword	PBASE-F32-RFS-PublicApi-1039-001-ClearPassword_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1039
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1054
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1054
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		4/01/2007 
-//! @SYMTestCaseDesc		Volume() test on locked MMC-drive.
-//!				Uses API elements: Volume().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() with MMCCardDrive as parameter and "test" as password.
-//!				3. Open/Close MMC-card door.
-//!				4. Call Volume() with MMCCardDrive as parameter.
-//!				5. Call UnlockDrive() with MMCCardDrive as parameter and "test" as password..
-//!				6. Call ClearPassword() with MMCCardDrive as parameter and "test" as password..
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Volume() returns KErrLocked.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	LockDrive	PBASE-F32-RFS-PublicApi-1054-001-LockDrive_command03
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1054-001-NotifyChange_command05
-		COMMAND			RFs1	prompt
-		OUTSTANDING	
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1054-001-NotifyChange_command07
-		OUTSTANDING	
-		COMMAND	!Error=-22	RFs1	Volume		PBASE-F32-RFS-PublicApi-1054-001-Volume_command09
-		COMMAND			RFs1	UnlockDrive	PBASE-F32-RFS-PublicApi-1054-001-UnlockDrive_command10
-		COMMAND			RFs1	ClearPassword	PBASE-F32-RFS-PublicApi-1054-001-ClearPassword_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1054
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1055
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1055
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		4/01/2007 
-//! @SYMTestCaseDesc		ReserveDriveSpace() test on locked MMC-drive.
-//!				Uses API elements: ReserveDriveSpace(), LockDrive(), UnlockDrive(), ClearPassword().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() with MMCardDrive as parameter and "test" as password.
-//!				3. Open/Close MMC-card door.
-//!				4. Call ReserveDriveSpace() with MMCardDrive as parameter and some space to reserve.
-//!				5. Call UnlockDrive() with MMCardDrive as parameter and "test" as password..
-//!				6. Call ClearPassword() with MMCardDrive as parameter and "test" as password..
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReserveDriveSpace() return KErrLocked.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	LockDrive		PBASE-F32-RFS-PublicApi-1055-001-LockDrive_command03
-		COMMAND			RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-1055-001-NotifyChange_command05
-		COMMAND			RFs1	prompt
-		OUTSTANDING	
-		COMMAND			RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-1055-001-NotifyChange_command07
-		OUTSTANDING	
-		COMMAND	!Error=-22	RFs1	ReserveDriveSpace	PBASE-F32-RFS-PublicApi-1055-001-ReserveDriveSpace_command09
-		COMMAND			RFs1	UnlockDrive		PBASE-F32-RFS-PublicApi-1055-001-UnlockDrive_command10
-		COMMAND			RFs1	ClearPassword		PBASE-F32-RFS-PublicApi-1055-001-ClearPassword_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1055
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1057
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1057
-//! @SYMAPI			RFs
-//! @SYMScriptInfo		This test case could DESTROY all your data on MMC card.
-//! @SYMCreationDate		22/08/2006
-//! @SYMTestCaseDesc		ErasePassword() test. Trying to ErasePassword() in unlockded state(locked and after being unlocked).
-//!				Uses API elements: ErasePassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() with MMC-card drive's number and 'test' password.
-//!				3. Open/Close MMC-card doors.
-//!				4. Call UnlockDrive() with MMC-card drive's number and 'test' password.
-//!				5. Call ErasePassword() passing MMC-card drive's number.
-//!				6. Call ClearPassword() passing MMC-card drive's number.
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function ErasePassword() returns KErrAccessDenied as drive is not locked.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	LockDrive	PBASE-F32-RFS-PublicApi-1057-001-LockDrive_command03
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1057-001-NotifyChange_command05
-		COMMAND			RFs1	prompt
-		OUTSTANDING	
-		COMMAND			RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-1057-001-NotifyChange_command07
-		OUTSTANDING	
-		COMMAND			RFs1	UnlockDrive	PBASE-F32-RFS-PublicApi-1057-001-UnlockDrive_command09
-		COMMAND	!Error=-21	RFs1	ErasePassword	PBASE-F32-RFS-PublicApi-1057-001-ErasePassword_command10
-		COMMAND			RFs1	ClearPassword	PBASE-F32-RFS-PublicApi-1057-001-ClearPassword_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1057
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Drives-PublicApi-REM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Drives-PublicApi-REM
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Anton Grober
-//! @SYMScriptDescription	The test script contains API drives & volumes related tests for RFs functions that perform operations on a removeable RAM drive.
-
-LOAD_SUITE	T_Sfsrv
-
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1005
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1005
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		GetMediaSerialNumber() passing exisiting drive index as parameter.
-//!				Uses API elements: GetMediaSerialNumber()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call GetMediaSerialNumber() passing TMediaSerialNumber as first parameter path and some drive which support serial number feature as second parameter .
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function  GetMediaSerialNumber() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	GetMediaSerialNumber		PBASE-F32-RFS-PublicApi-1005-001-GetMediaSerialNumber_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1005
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1068
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1068
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ErasePassword() test. Tring to call ErasePassword() in non-locked state(no password and not locked).
-//!				Uses API elements: ErasePassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ErasePassword() passing MMC-card drive's number.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ErasePassword() returns KErrAccessDenied as drive is not locked.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-21	RFs1	ErasePassword		PBASE-F32-RFS-PublicApi-1068-001-ErasePassword_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini 
-		CREATE_OBJECT	RFormat	format
-		CREATE_OBJECT	RFs	rfs
-		COMMAND		rfs	new
-		COMMAND		rfs	Connect
-		COMMAND		format	new
-		COMMAND		format	Open		PBASE-F32-RFS-PublicApi-1068-002-Open_command05
-		COMMAND		format	Next
-		COMMAND		format	Close
-		COMMAND		format	~
-		COMMAND		rfs	Close
-		COMMAND		rfs	~
-	END_TEST_BLOCK	
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini 
-		CREATE_OBJECT	RFs	rfs
-		CREATE_OBJECT	CFileMan	fileMan
-		CREATE_OBJECT	RFile	file
-		COMMAND		rfs	new
-		COMMAND		rfs	Connect
-		COMMAND		file	new
-		COMMAND		file	Open		PBASE-F32-RFS-PublicApi-1068-003-Open_command05
-		COMMAND		fileMan	NewL		PBASE-F32-RFS-PublicApi-1068-003-NewL_command07
-		COMMAND		fileMan	Copy		PBASE-F32-RFS-PublicApi-1068-003-Copy_command08
-		COMMAND		fileMan	~
-		COMMAND		file	Close
-		COMMAND		file	~
-		COMMAND		rfs	Close
-		COMMAND		rfs	~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1068
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1076
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1076
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		UnlockDrive() test. Passing non-locked drive's number as parameter.
-//!				Uses API elements: UnlockDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call UnlockDrive() passing MMC drive's number and 'test' as password.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function UnlockDrive() returns KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-11	RFs1	UnlockDrive		PBASE-F32-RFS-PublicApi-1076-001-UnlockDrive_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1076
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1100
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1100
-//! @SYMAPI			RFs
-//! @SYMCreationDate		26/03/2007
-//! @SYMTestCaseDesc		FinaliseDrives() test.
-//!				Uses API elements: FinaliseDrives().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call FinaliseDrives().
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function FinaliseDrives() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FinaliseDrives
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1100
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1073
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1073
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ClearPassword() test. Testing in non-locked state.
-//!				Uses API elements: ClearPassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ClearPassword() passing MMC-card drive's number and 'test' as password.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ClearPassword() returns KErrAccessDenied(-21).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-21	RFs1	ClearPassword		PBASE-F32-RFS-PublicApi-1073-001-ClearPassword_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1073
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Files-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		BASE-F32-RFS-Files-PublicApi-ANY
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Sergei Tveritin
-//! @SYMScriptDescription	The test script contains API files & directories related tests for RFs functions that don't depend on any special type of test drive.
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2030
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2030
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Parse(const TDesC &aName, TParse &aParse) test where name of parse is empty.
-//!				Uses API elements: Parse().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Parse() and pass parameter "NULL" as name of parse.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Parse() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Parse		PBASE-F32-RFS-PublicApi-2030-001-Parse_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2030
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2032
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2032
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Parse(const TDesC &aName, const TDesC &aRelated, TParse &aParse) test where related name of parse is invalid.
-//!				Uses API elements: Parse().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Parse() and pass parameter "\<>:"/|" as related.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Parse() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Parse		PBASE-F32-RFS-PublicApi-2032-001-Parse_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2032
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2033
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2033
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Parse(const TDesC &aName, TParse &aParse, TParse &aParse) test where name of parse is empty.
-//!				Uses API elements: Parse().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Parse() and pass parameter "NULL" as name of parse.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Parse() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Parse		PBASE-F32-RFS-PublicApi-2033-001-Parse_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2033
-
-///////////////////////////////
-//
-// ISVALIDNAME (const TDesC &aFileName, TText &aBadChar)
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2100
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2100
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function IsValidName(const TDesC &aFileName, TText &aBadChar) test where name is invalid.
-//!				Uses API elements: IsValidName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call IsValidName() and pass parameter "test<>:"/|.txt" as name of file and check that the result is FALSE.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function IsValidName() return FALSE.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	IsValidName		PBASE-F32-RFS-PublicApi-2100-001-IsValidName_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2100
-
-
-
-///////////////////////////////
-//
-// SETSESSIONTOPRIVATE
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2101
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2101
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function SetSessionToPrivate() test where drive is negative.
-//!				Uses API elements: SetSessionToPrivate().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionToPrivate() and pass parameter "-12345" as driver.
-//!				3. Call NotifyChange with a wildcard drive letter
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function NotifyChange() return KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionToPrivate	PBASE-F32-RFS-PublicApi-2101-001-SetSessionToPrivate_command03
-		COMMAND	!AsyncError=-6	RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-2101-001-NotifyChange_command04
-		OUTSTANDING	
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2101
-
-
-///////////////////////////////
-//
-// CREATEPRIVATEPATH
-//
-///////////////////////////////
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2103
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2103
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function CreatePrivatePath() negative test where drive is negative.
-//!				Uses API elements: CreatePrivatePath().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call CreatePrivatePath() and pass parameter "-12345" as driver.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function CreatePrivatePath() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	CreatePrivatePath	PBASE-F32-RFS-PublicApi-2103-001-CreatePrivatePath_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2103
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Files-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4174 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Files-PublicApi-RAM
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Sergei Tveritin
-//! @SYMScriptDescription	The test script contains API files & directories related tests for RFs functions that perform operations on a RAM (not removeable RAM drive).
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2001
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2001
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SetSessionPath() and SessionPath() test.
-//!				Uses API elements: SetSessionPath(), SessionPath().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call SessionPath() and check that it returns "<DRIVE>:\base\T_Sfsrv\" where <DRIVE> is a test drive letter.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The path "<DRIVE>:\base\T_Sfsrv\" was successfully set and get where <DRIVE> is a test drive letter.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2001-001-SetSessionPath_command03
-		COMMAND		RFs1	SessionPath		PBASE-F32-RFS-PublicApi-2001-001-SessionPath_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2001
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2002
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2002
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function RealName() test.
-//!				Uses API elements: RealName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call RealName() and pass "test.txt" as parameter,
-//!				   and check that it returns "<DRIVE>:\base\T_Sfsrv\test.txt" where <DRIVE> is a test drive letter.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function RealName() return "<DRIVE>:\base\T_Sfsrv\test.txt" successfully where <DRIVE> is a test drive letter.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2002-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2002-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	RealName		PBASE-F32-RFS-PublicApi-2002-001-RealName_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2002-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2002
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2003
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2003
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Parse(const TDesC &aName, TParse &aParse) test.
-//!				Uses API elements: Parse().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Create a file "test03.txt" in a "<DRIVE>:\base\T_Sfsrv\" directory where <DRIVE> is a test drive letter.
-//!				3. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				4. Call Parse() and pass "test03.txt" as parameter,
-//!				   and check that it return "test03" as a name of file, ".txt" as a extension.
-//!				5. Remove the test03.txt file.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Parse() return KErrNone, "test03" and ".txt" returned successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2003-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2003-001-SetSessionPath_command09
-		COMMAND		RFs1	Parse		PBASE-F32-RFS-PublicApi-2003-001-Parse_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2003-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2003
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2004
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2004
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Parse(const TDesC &aName, const TDesC &aRelated, TParse &aParse) test.
-//!				Uses API elements: Parse().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Parse() and pass "*&test.txt" as parameter,
-//!				   and check that it return "test" as a name of file, ".txt" as a extension and "*" as a related.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Parse() return KErrNone, "test",".txt" and "*" returned successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2004-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2004-001-SetSessionPath_command09
-		COMMAND		RFs1	Parse		PBASE-F32-RFS-PublicApi-2004-001-Parse_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2004-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2004
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2005
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2005
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function MkDir() test.
-//!				Uses API elements: MkDir(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and check that list of directory contents has a "TestDir" of directory.
-//!				5. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function MkDir() return KErrNone, "<DRIVE>:\base\T_Sfsrv\TestDir\" directory was successfully created.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2005-001-SetSessionPath_command03
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2005-001-MkDir_command04
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2005-001-GetDir_command05
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2005-001-RmDir_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2005
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2006
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2006
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function MkDirAll() test.
-//!				Uses API elements: MkDirAll(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDirAll() and pass "<DRIVE>:\base\T_Sfsrv\TestDirAll\" as parameter.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and check that list of directory contents has a "TestDirAll" of directory.
-//!				5. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDirAll\" as parameter.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function MkDirAll() return KErrNone, "<DRIVE>:\base\T_Sfsrv\TestDirAll\" directory was successfully created.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2006-001-SetSessionPath_command03
-		COMMAND		RFs1	MkDirAll		PBASE-F32-RFS-PublicApi-2006-001-MkDirAll_command04
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2006-001-GetDir_command05
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2006-001-RmDir_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2006
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2007
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2007
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function RmDir() test.
-//!				Uses API elements: RmDir(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				5. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and check that list of directory contents hasn't a "TestDir" of directory.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function RmDir() return KErrNone, "<DRIVE>:\base\T_Sfsrv\TestDir\" and "<DRIVE>:\base\T_Sfsrv\TestDirAll\" directories was successfully removed.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2007-001-SetSessionPath_command03
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2007-001-MkDir_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2007-001-RmDir_command05
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2007-001-GetDir_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2007
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2008
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2008
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function GetDir(const TDesC &aName, const TUidType &anEntryUid, TUint anEntrySortKey, CDir *&aFileList) test,
-//!				with a filtered list of a directory's contents by UID type.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and and setting up parameter "_uidtype" as "0" for including UID type in filtered list.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Filtered list of a directory's contents by UID type has been returned successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2008-001-SetSessionPath_command03
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2008-001-GetDir_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2008
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2009
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2009
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function GetDir(const TDesC &aName, TUint anEntryAttMask, TUint anEntrySortKey, CDir *&anEntryList, CDir *&aDirList) test,
-//!				with a filtered list of the directory and file entries contained in a directory.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and setting up parameter "_isdirlist" as TRUE for filtered list of directory entries only.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The list of a directory's and files has been returned successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2009-001-SetSessionPath_command03
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2009-001-GetDir_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2009
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2010
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2010
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Replace() test.
-//!				Uses API elements: Replace(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Replace() and pass "testing.txt" as parameter as old name and "replace.txt" as parameter as a new name of file.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and check that list of directory contents has a "replace.txt" of file.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The file "testing.txt" replaced to "replace.txt" successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2010-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2010-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	Replace		PBASE-F32-RFS-PublicApi-2010-001-Replace_command10
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2010-001-GetDir_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2010-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2010
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2011
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2011
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Rename() test.
-//!				Uses API elements: Rename(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Rename() and pass "testing.txt" as parameter as old name and "rename.txt" as parameter as a new name of file.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and check that list of directory contents has a "rename.txt" of file.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The file "testing.txt" renamed to "rename.txt" successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2011-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2011-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	Rename		PBASE-F32-RFS-PublicApi-2011-001-Rename_command10
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2011-001-GetDir_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2011-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2011
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2012
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2012
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Delete() test.
-//!				Uses API elements: Delete(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Delete() and pass "testing.txt" as parameter.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and check that list of directory contents hasn't a "testing.txt" of file.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The file "testing.txt" was successfully removed.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2012-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2012-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2012-001-Delete_command10
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2012-001-GetDir_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2012
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2013
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2013
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions Att() and SetAtt() test.
-//!				Uses API elements: SetAtt(), Att().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call SetAtt() and pass "KEntryAttReadOnly" of attribute as parameter for "test.txt" of file.
-//!				4. Call Att() and pass "test.txt" as parameter,
-//!				   and check that the "test.txt" file has a "KEntryAttReadOnly" of attribute.
-//!				5. Call SetAtt() to clear "KEntryAttReadOnly" attribute for the "test.txt" file.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The attribute "KEntryAttReadOnly" was successfully set and get.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2013-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2013-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2013-001-SetAtt_command10
-		COMMAND		RFs1	Att		PBASE-F32-RFS-PublicApi-2013-001-Att_command11
-		COMMAND		RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2013-001-SetAtt_command12
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2013-001-Delete_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2013
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2014
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2014
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SetModified() and Modified() test.
-//!				Uses API elements: SetModified(), Modified().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call SetModified() and pass "20060101:" as parameter for "test.txt" of file.
-//!				4. Call Modified() and pass "test.txt" as parameter,
-//!				   and check that the "test.txt" file has a "20060101:" as last modification date.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The last modification date and time of a file was successfully set and get.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2014-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2014-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetModified		PBASE-F32-RFS-PublicApi-2014-001-SetModified_command10
-		COMMAND		RFs1	Modified		PBASE-F32-RFS-PublicApi-2014-001-Modified_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2014-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2014
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2015
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2015
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SetEntry() and Entry() test.
-//!				Uses API elements: SetEntry(), Entry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call SetEntry()  and pass "20060101:" and "KEntryAttReadOnly" as parameter for "test.txt" of file.
-//!				4. Call Entry() and pass "test.txt" as parameter,
-//!				   and check that the "test.txt" file has a "20060101:" as last modification date,
-//!				   and "KEntryAttReadOnly" as attribute.
-//!				5. Call SetEntry() to clear "KEntryAttReadOnly" attribute for the "test.txt" file.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The last modification date and attribute of file was successfully set and get.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFile	RFile1
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2015-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2015-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2015-001-SetEntry_command10
-		COMMAND		RFs1	Entry		PBASE-F32-RFS-PublicApi-2015-001-Entry_command11
-		COMMAND		RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2015-001-SetEntry_command12
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2015-001-Delete_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2015
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2016
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2016
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function ReadFileSection() test.
-//!				Uses API elements: ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call ReadFileSection()  and pass "test.txt" as parameter, offset = 0, length = 10, buffer with a length = 10.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The data from a file "test.txt" returned successfully and not NULL.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2016-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2016-001-Create_command06
-		COMMAND		RFile1	Write		PBASE-F32-RFS-PublicApi-2016-001-Write_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2016-001-ReadFileSection_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2016-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2016
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2017
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2017
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function IsFileOpen() test.
-//!				Uses API elements: IsFileOpen().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call IsFileOpen()  and pass "test.txt" as parameter and that it is not open.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The file "test.txt" is closed.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2017-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	IsFileOpen		PBASE-F32-RFS-PublicApi-2017-001-IsFileOpen_command09
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2017-001-Delete_command10
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2017
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2018
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2018
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function GetShortName() test.
-//!				Uses API elements: GetShortName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call GetShortName() and pass "<DRIVE>:\base\T_Sfsrv\test.txt" as parameter,
-//!				   and check that it return "test.txt".
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The short name "test.txt" return successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2018-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetShortName		PBASE-F32-RFS-PublicApi-2018-001-GetShortName_command09
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2018-001-Delete_command10
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2018
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2019
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2019
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function GetLongName() test.
-//!				Uses API elements: GetLongName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call GetLongName() and pass "<DRIVE>:\base\T_Sfsrv\test.txt" as parameter,
-//!				   and check that it return "test.txt".
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The long name "test.txt" return successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2019-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetLongName		PBASE-F32-RFS-PublicApi-2019-001-GetLongName_command09
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2019-001-Delete_command10
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2019
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2020
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2020
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function IsFileInRom() test.
-//!				Uses API elements: IsFileInRom().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call IsFileInRom() and pass "test.txt" as parameter and check that faile is not in ROM.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The file "test.txt" is not in ROM.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2020-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2020-001-SetSessionPath_command09
-		COMMAND		RFs1	IsFileInRom		PBASE-F32-RFS-PublicApi-2020-001-IsFileInRom_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2020-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2020
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2021
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2021
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function IsValidName(const TDesC &anEntryName) test.
-//!				Uses API elements: IsValidName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call IsValidName() and pass "test.txt" as parameter and check that is valid name.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The filename "test.txt" is valid.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2021-001-SetSessionPath_command03
-		COMMAND		RFs1	IsValidName		PBASE-F32-RFS-PublicApi-2021-001-IsValidName_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2021
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2022
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2022
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function IsValidName(const TDesC &aFileName, TText &aBadChar) test with a illegal character within a filename.
-//!				Uses API elements: IsValidName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call IsValidName() and pass "*&^test.txt" as parameter and check that isn't valid name.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The filename isn't valid and illegal characters "*" returned properly.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2022-001-SetSessionPath_command03
-		COMMAND		RFs1	IsValidName		PBASE-F32-RFS-PublicApi-2022-001-IsValidName_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2022
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2023
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2023
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function SetSessionToPrivate() test.
-//!				Uses API elements: SetSessionToPrivate().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionToPrivate() and pass a drive as parameter.
-//!				3. Call SessionPath() method and check that it return "<DRIVE>:\Private\200041C1\" where <DRIVE> is a letter of the drive and
-//!				   "200041C1" must be the same number which is declared in mmp file as UID.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SessionPath() returns KErrNone and the correct private path
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2023-001-SetSessionPath_command03
-		COMMAND		RFs1	SetSessionToPrivate		PBASE-F32-RFS-PublicApi-2023-001-SetSessionToPrivate_command04
-		COMMAND		RFs1	SessionPath		PBASE-F32-RFS-PublicApi-2023-001-SessionPath_command05
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2023
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2024
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2024
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function CreatePrivatePath() and PrivatePath() test.
-//!				Uses API elements: CreatePrivatePath(), PrivatePath().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call CreatePrivatePath() and pass a drive as parameter.
-//!				3. Call PrivatePath() and check that it returns "\Private\200041C1\"
-//!				   where "200041C1" must be the same number which is declared in mmp file as UID.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The private path for the drive driver created and returned successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	CreatePrivatePath		PBASE-F32-RFS-PublicApi-2024-001-CreatePrivatePath_command03
-		COMMAND		RFs1	PrivatePath		PBASE-F32-RFS-PublicApi-2024-001-PrivatePath_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2024-001-RmDir_command05
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2024
-
-
-///////////////////////////////
-//
-// REALNAME
-//
-///////////////////////////////
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2026
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2026
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions RealName() test where file does not exist.
-//!				Uses API elements: RealName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call RealName() and pass "<DRIVE>:\base\T_Sfsrv\none.txt" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function RealName() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	RealName		PBASE-F32-RFS-PublicApi-2026-001-RealName_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2026
-
-
-
-///////////////////////////////
-//
-// SETSESSIONPATH
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2027
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2027
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetSessionPath() test where file does not exist.
-//!				Uses API elements: SetSessionPath().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\NoneDir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetSessionPath() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2027-001-SetSessionPath_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2027
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2028
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2028
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetSessionPath() negative test for session path is invalid.
-//!				Uses API elements: SetSessionPath().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\<>:"/|\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetSessionPath() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2028-001-SetSessionPath_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2028
-
-
-
-///////////////////////////////
-//
-// PARSE
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2029
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2029
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Parse(const TDesC &aName, TParse &aParse) test where name of parse is invalid.
-//!				Uses API elements: Parse().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Parse() and pass "<DRIVE>:\<>:"/|.txt" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Parse() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Parse		PBASE-F32-RFS-PublicApi-2029-001-Parse_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2029
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2031
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2031
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Parse(const TDesC &aName, const TDesC &aRelated, TParse &aParse) test where name of parse is invalid.
-//!				Uses API elements: Parse().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Parse() and pass "<DRIVE>:\<>:"/|.txt" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Parse() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Parse		PBASE-F32-RFS-PublicApi-2031-001-Parse_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2031
-
-
-///////////////////////////////
-//
-// MKDIR
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2034
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2034
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function MkDir() negative test where name of directory is invalide.
-//!				Uses API elements: MkDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\MkDir<>:"/|\" as parameter where <DRIVE> is a test drive letter.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function MkDir() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2034-001-SetSessionPath_command03
-		COMMAND	!Error=-28	RFs1	MkDir		PBASE-F32-RFS-PublicApi-2034-001-MkDir_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2034
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2035
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2035
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function MkDir() negative test where directory is exist.
-//!				Uses API elements: MkDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\MkDirTwice\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\MkDirTwice\" as parameter.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\MkDirTwice\" as parameter.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function MkDir() return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2035-001-SetSessionPath_command03
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2035-001-MkDir_command04
-		COMMAND	!Error=-11	RFs1	MkDir		PBASE-F32-RFS-PublicApi-2035-001-MkDir_command05
-		COMMAND			RFs1	RmDir		PBASE-F32-RFS-PublicApi-2035-001-RmDir_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2035
-
-
-
-///////////////////////////////
-//
-// MKDIRALL
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2036
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2036
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function MkDir() negative test where name of directory is invalide.
-//!				Uses API elements: MkDirAll().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDirAll() and pass "<DRIVE>:\base\T_Sfsrv\MkDirAll<>:"/|\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function MkDirAll() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2036-001-SetSessionPath_command03
-		COMMAND	!Error=-28	RFs1	MkDirAll		PBASE-F32-RFS-PublicApi-2036-001-MkDirAll_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2036
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2037
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2037
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function MkDir() negative test where directory is exist.
-//!				Uses API elements: MkDirAll().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDirAll() and pass "<DRIVE>:\base\T_Sfsrv\MkDirAllTwice\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDirAll() and pass "<DRIVE>:\base\T_Sfsrv\MkDirAllTwice\" as parameter.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\MkDirTwice\" as parameter.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function MkDirAll() return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2037-001-SetSessionPath_command03
-		COMMAND			RFs1	MkDirAll		PBASE-F32-RFS-PublicApi-2037-001-MkDirAll_command04
-		COMMAND	!Error=-11	RFs1	MkDirAll		PBASE-F32-RFS-PublicApi-2037-001-MkDirAll_command05
-		COMMAND			RFs1	RmDir		PBASE-F32-RFS-PublicApi-2037-001-RmDir_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2037
-
-
-
-///////////////////////////////
-//
-// RMDIR
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2038
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2038
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function RmDir() negative test where name of directory is invalid.
-//!				Uses API elements: RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\RmDir<>:"/|\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function RmDir() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	RmDir		PBASE-F32-RFS-PublicApi-2038-001-RmDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2038
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2039
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2039
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function RmDir() negative test where directory does not exist.
-//!				Uses API elements: RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\NoneDir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function RmDir() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	RmDir		PBASE-F32-RFS-PublicApi-2039-001-RmDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2039
-
-
-
-///////////////////////////////
-//
-// GETDIR
-// TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) const;
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2040
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2040
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) negative test,
-//!				where name of directory is invalid.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\ErrDir<>:"/|\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2040-001-GetDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2040
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2041
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2041
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) negative test,
-//!				where directory does not exist.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\NoneDir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-12	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2041-001-GetDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2041
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2042
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2042
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) test,
-//!				where sort key flag is used for exclusive matching.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Create files "test42a.txt" and "test42b.txt".
-//!				3. Call SetAtt() and pass "test42a.txt" as name and "KEntryAttReadOnly" as attribute of file.
-//!				4. Call Att() and pass "test42a.txt" as name and check that the attrtribute "KEntryAttReadOnly" is set.
-//!				5. Call GetDir() and pass parameters "<DRIVE>:\base\T_Sfsrv\" as name and "KEntryAttMatchExclusive|KEntryAttReadOnly" as attribute bitmask where <DRIVE> is a test drive letter,
-//!				   and check that the file "test42a.txt" is exist in list of entries.
-//!				6. Call GetDir() and pass parameters "<DRIVE>:\base\T_Sfsrv\" as name and "KEntryAttMatchExclusive|KEntryAttReadOnly" as attribute bitmask where <DRIVE> is a test drive letter,
-//!				   and check that the file "test42b.txt" is not exist in list of entries.
-//!				7. Call SetAtt() and pass "test42a.txt" as name and "KEntryAttNormal" as attribute of file.
-//!				8. Delete files "test42a.txt" and "test42b.txt".
-//!				9. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone, the file "test42a.txt" is not exist in list of entries.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2042-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2042-001-Create_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2042-001-SetAtt_command11
-		COMMAND		RFs1	Att		PBASE-F32-RFS-PublicApi-2042-001-Att_command12
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2042-001-GetDir_command13
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2042-001-GetDir_command14
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2042-001-Delete_command15
-		COMMAND		RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2042-001-SetAtt_command16
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2042-001-Delete_command17
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2042
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2043
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2043
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) test,
-//!				where ordering is requested to be both ascending and descending at the same time.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass parameters "<DRIVE>:\base\T_Sfsrv\" as name and "EAscending|EDescending" as sort key where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2043-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2043-001-Create_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2043-001-GetDir_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2043-001-Delete_command12
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2043-001-Delete_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2043
-
-
-
-///////////////////////////////
-//
-// GETDIR
-// TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) const;
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2044
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2044
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) negative test,
-//!				where name of directory is invalide.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\ErrDir<>:"/|\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2044-001-GetDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2044
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2045
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2045
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) negative test,
-//!				where directory does not exist.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\NoneDir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-12	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2045-001-GetDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2045
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2046
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2046
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) test,
-//!				where sort key flag is used for exclusive matching.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\Test46a\" as name where <DRIVE> is a test drive letter.
-//!				3. Create file "test46a.txt".
-//!				4. Call GetDir() and pass parameters "<DRIVE>:\base\T_Sfsrv\" as name and "KEntryAttMatchExclusive|KEntryAttDir" as attribute bitmask where <DRIVE> is a test drive letter,
-//!				   and check that the directories "Test46a" is exist in list of entries.
-//!				5. Call GetDir() and pass parameters "<DRIVE>:\base\T_Sfsrv\" as name and "KEntryAttMatchExclusive|KEntryAttDir" as attribute bitmask where <DRIVE> is a test drive letter,
-//!				   and check that the file "test46a.txt" is not exist in list of entries.
-//!				6. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\Test46a\" as name where <DRIVE> is a test drive letter.
-//!				7. Delete file "test46a.txt".
-//!				8. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone, the directories "Test46a" is not exist in list of entries.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFile	RFile1
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2046-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2046-001-MkDir_command09
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2046-001-GetDir_command10
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2046-001-GetDir_command11
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2046-001-RmDir_command12
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2046-001-Delete_command13
-		COMMAND		RFs1	Close
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2046
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2047
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2047
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) negative test,
-//!				where ordering is requested to be both ascending and descending at the same time.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass parameters "<DRIVE>:\base\T_Sfsrv\" as name and "EAscending|EDescending" as sort key where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2047-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2047-001-Create_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2047-001-GetDir_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2047-001-Delete_command12
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2047-001-Delete_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2047
-
-
-
-///////////////////////////////
-//
-// GETDIR
-// TInt GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) const;
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2048
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2048
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) negative test,
-//!				where name of directory is invalid.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\ErrDir<>:"/|\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2048-001-GetDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2048
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2049
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2049
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) negative test,
-//!				where directory name does not exist.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\NoneDir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetDir() return KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-12	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2049-001-GetDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2049
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2050
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2050
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) test,
-//!				for invalid entry UID type.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass parameters "<DRIVE>:\base\T_Sfsrv\" as name and "-12345" as UID type where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2050-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2050-001-Create_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2050-001-GetDir_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2050-001-Delete_command12
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2050-001-Delete_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2050
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2051
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2051
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) negative test,
-//!				where ordering is requested to be both ascending and descending at the same time.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass parameters "<DRIVE>:\base\T_Sfsrv\" as name and "EAscending|EDescending" as sort key where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2051-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2051-001-Create_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2051-001-GetDir_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2051-001-Delete_command12
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2051-001-Delete_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2051
-
-
-
-///////////////////////////////
-//
-// DELETE
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2052
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2052
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Delete() negative test where file does not exist.
-//!				Uses API elements: Delete().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Delete() and pass "<DRIVE>:\base\T_Sfsrv\nonefile.txt" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Delete() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	Delete		PBASE-F32-RFS-PublicApi-2052-001-Delete_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2052
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2053
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2053
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Delete() negative test where name of file is invalid.
-//!				Uses API elements: Delete().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Delete() and pass "<>:"/|.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Delete() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Delete		PBASE-F32-RFS-PublicApi-2053-001-Delete_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2053
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2054
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2054
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Delete() negative test for readonly file.
-//!				Uses API elements: Delete().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Delete() and pass "<DRIVE>:\base\T_Sfsrv\testing.txt" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Delete() return KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2054-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2054-001-SetAtt_command09
-		COMMAND	!Error=-21	RFs1	Delete		PBASE-F32-RFS-PublicApi-2054-001-Delete_command10
-		COMMAND			RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2054-001-SetAtt_command11
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2054-001-Delete_command12
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2054
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2055
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2055
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Delete() test for system file.
-//!				Uses API elements: Delete().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call SetAtt() and pass parameters "testing.txt" as name and "KEntryAttSystem" attribute of file.
-//!				4. Call Delete() and pass parameter "testing.txt" as name of file.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Delete() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2055-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2055-001-SetSessionPath_command09
-		COMMAND		RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2055-001-SetAtt_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2055-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2055
-
-
-
-///////////////////////////////
-//
-// REPLASE
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2056
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2056
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Replace() negative test where old file does not exist.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Replace() and pass the parameters "none.txt" as old name and "replace.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Replace() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2056-001-SetSessionPath_command03
-		COMMAND	!Error=-1	RFs1	Replace		PBASE-F32-RFS-PublicApi-2056-001-Replace_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2056
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2057
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2057
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Replace() negative test where old name of file is invalid.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Replace() and pass the parameters "<>:"/|.txt" as old name and "replace.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Replace() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2057-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2057-001-SetSessionPath_command09
-		COMMAND	!Error=-28	RFs1	Replace		PBASE-F32-RFS-PublicApi-2057-001-Replace_command10
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2057-001-Delete_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2057
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2058
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2058
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Replace() negative test where new name of file is invalid.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Replace() and pass the parameters "testing.txt" as old name and "<>:"/|.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Replace() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2058-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2058-001-SetSessionPath_command09
-		COMMAND	!Error=-28	RFs1	Replace		PBASE-F32-RFS-PublicApi-2058-001-Replace_command10
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2058-001-Delete_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2058
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2059
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2059
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Replace() test where new file exists and is a read-only file.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Create two files "T_Sfsrv59_old.txt" and "T_Sfsrv59_new.txt", making sure that the files are closed.
-//!				3. Call SetAtt() to set "T_Sfsrv59_new.txt" file's KEntryAttReadOnly attribute.
-//!				4. Call Replace() and pass the parameters "T_Sfsrv59_old.txt" as old name and "T_Sfsrv59_new.txt" as a new name of file.
-//!				5. Call Delete() method on old file name.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Replace() returns KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2059-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2059-001-Create_command07
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2059-001-SetAtt_command11
-		COMMAND			RFs1	Att		PBASE-F32-RFS-PublicApi-2059-001-Att_command12
-		COMMAND			RFs1	SetSessionPath	PBASE-F32-RFS-PublicApi-2059-001-SetSessionPath_command13
-		COMMAND	!Error=-21    	RFs1	Replace		PBASE-F32-RFS-PublicApi-2059-001-Replace_command14
-		COMMAND			RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2059-001-SetAtt_command15
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2059-001-Delete_command16
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2059-001-Delete_command17
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2059
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2060
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2060
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Replace() negative test where new path of new file has a other drive.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\" as parameter where <DRIVE> is a MMC drive letter.
-//!				3. Call Replace() and pass the parameters "T_Sfsrv60_old.txt" as old name and "\base\T_Sfsrv\T_Sfsrv60_new.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Replace() return KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2060-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2060-001-SetSessionPath_command09
-		COMMAND	!Error=-6	RFs1	Replace		PBASE-F32-RFS-PublicApi-2060-001-Replace_command10
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2060-001-Delete_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2060
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2061
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2061
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Rename() negative test where new path of new file has a other drive.
-//!				Uses API elements: Rename().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\" as parameter where <DRIVE> is a MMC drive letter.
-//!				3. Call Rename() and pass the parameters "T_Sfsrv61_old.txt" as old name and "\base\T_Sfsrv\T_Sfsrv61_new.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Rename() return KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2061-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2061-001-SetSessionPath_command09
-		COMMAND	!Error=-6	RFs1	Rename		PBASE-F32-RFS-PublicApi-2061-001-Rename_command10
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2061-001-Delete_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2061
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2062
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2062
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Rename() negative test where new name of file is invalid.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Rename() and pass the parameters "testing.txt" as old name and "<>:"/|.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Rename() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2062-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2062-001-SetSessionPath_command09
-		COMMAND	!Error=-28	RFs1	Rename		PBASE-F32-RFS-PublicApi-2062-001-Rename_command10
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2062-001-Delete_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2062
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2063
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2063
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Rename() negative test where old name of file is invalid.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Rename() and pass the parameters "<>:"/|.txt" as old name and "rename.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Rename() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2063-001-SetSessionPath_command03
-		COMMAND	!Error=-28	RFs1	Rename		PBASE-F32-RFS-PublicApi-2063-001-Rename_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2063
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2064
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2064
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Rename() negative test where new file is exist and read only.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Rename() and pass the parameters "testing.txt" as old name and "rename.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Rename() return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2064-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2064-001-Create_command07
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2064-001-SetAtt_command11
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2064-001-SetSessionPath_command12
-		COMMAND	!Error=-11	RFs1	Rename		PBASE-F32-RFS-PublicApi-2064-001-Rename_command13
-		COMMAND			RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2064-001-SetAtt_command14
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2064-001-Delete_command15
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2064-001-Delete_command16
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2064
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2065
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2065
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Rename() negative test where old file does not exist.
-//!				Uses API elements: Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Rename() and pass the parameters "none.txt" as old name and "rename.txt" as a new name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Rename() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2065-001-SetSessionPath_command03
-		COMMAND	!Error=-1	RFs1	Rename		PBASE-F32-RFS-PublicApi-2065-001-Rename_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2065
-
-
-
-///////////////////////////////
-//
-// ATT
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2066
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2066
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions Att() negative test where file does not exist.
-//!				Uses API elements: Att().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Att() and pass parameter "<DRIVE>:\base\T_Sfsrv\none.txt" as name of file where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Att() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	Att		PBASE-F32-RFS-PublicApi-2066-001-Att_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2066
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2067
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2067
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions Att() negative test where name of file is invalid.
-//!				Uses API elements: Att().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Att() and pass parameter "<>:"/|.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Att() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Att		PBASE-F32-RFS-PublicApi-2067-001-Att_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2067
-
-
-
-///////////////////////////////
-//
-// SETATT
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2068
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2068
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetAtt() negative test where file does not exist.
-//!				Uses API elements: SetAtt().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetAtt() and pass parameter "none.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetAtt() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2068-001-SetAtt_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2068
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2069
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2069
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions Att() negative test where name of file is invalid.
-//!				Uses API elements: AttSetAtt).
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetAtt() and pass parameter "<>:"/|.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetAtt() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2069-001-SetAtt_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2069
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2070
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2070
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetAtt() test where the attribute to be set is too big number.
-//!				Uses API elements: SetAtt().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetAtt() and pass parameters "testing.txt" as name and "99999999" as set attribute.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetAtt() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2070-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2070-001-SetAtt_command09
-		COMMAND		RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2070-001-SetAtt_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2070-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2070
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2071
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2071
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetAtt() test where the sets attribute "KEntryAttVolume" for RAM drive.
-//!				Uses API elements: SetAtt(), Att().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetAtt() and pass parameters "<DRIVE>:\" as name and "KEntryAttVolume" as attribute to be set, where <DRIVE> is a test drive letter.
-//!				3. Call Att() and check that attribute "KEntryAttVolume" is ignored.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetAtt() and Att() return KErrBadName, as "<DRIVE>:\" is not a valid file name or directory
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2071-001-SetAtt_command04
-		COMMAND	!Error=-28	RFs1	Att		PBASE-F32-RFS-PublicApi-2071-001-Att_command05
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2071
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2072
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2072
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetAtt() negative test where attribute appears in both bitmasks.
-//!				Uses API elements: SetAtt().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetAtt() and pass parameters "testing.txt" as name and "KEntryAttReadOnly" as clear attribute.
-//!				   and "KEntryAttReadOnly" as set attribute.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetAtt() return FSCLIENT panic Code = 21.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2072-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND	!Error=-28	RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2072-001-SetAtt_command09
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2072-001-Delete_command10
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	!PanicCode=21 !PanicString="FSCLIENT panic"
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2072-002-Delete_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2072
-
-
-
-///////////////////////////////
-//
-// MODIFIED
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2073
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2073
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions Modified() negative test where name of file is invalid.
-//!				Uses API elements: Modified().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Modified() and pass "<>:"/|.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Modified() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Modified		PBASE-F32-RFS-PublicApi-2073-001-Modified_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2073
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2074
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2074
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions Modified() negative test where file does not exist.
-//!				Uses API elements: Modified().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Modified() and pass "none.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Modified() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	Modified		PBASE-F32-RFS-PublicApi-2074-001-Modified_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2074
-
-
-
-///////////////////////////////
-//
-// SETMODIFIED
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2075
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2075
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetModified() negative test where file does not exist.
-//!				Uses API elements: SetModified().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetModified() and pass parameters "20060101:" as time and "none.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetModified() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	SetModified		PBASE-F32-RFS-PublicApi-2075-001-SetModified_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2075
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2076
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2076
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetModified() negative test where name of file is invalid.
-//!				Uses API elements: SetModified().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetModified() and pass parameters "20060101:" as time and "<>:"/|.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetModified() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	SetModified		PBASE-F32-RFS-PublicApi-2076-001-SetModified_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2076
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2077
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2077
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetModified() test where time is 0.
-//!				Uses API elements: SetModified().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetModified() and pass parameters 0-time and "test.txt" (that resides on a MMC drive) as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetModified() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2077-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetModified		PBASE-F32-RFS-PublicApi-2077-001-SetModified_command09
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2077-001-Delete_command10
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2077
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2078
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2078
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetModified() negative test when the file is read only and open.
-//!				Uses API elements: SetModified().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Open();
-//!				3. Call SetModified() and pass parameters "20060101:" as time and "testing.txt" as name of file.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetModified() return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2078-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2078-001-SetAtt_command08
-		COMMAND			RFile1	Open		PBASE-F32-RFS-PublicApi-2078-001-Open_command10
-		COMMAND	!Error=-14	RFs1	SetModified		PBASE-F32-RFS-PublicApi-2078-001-SetModified_command12
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2078-001-SetAtt_command17
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2078-001-Delete_command18
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2078
-
-
-
-///////////////////////////////
-//
-// ENTRY
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2079
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2079
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions Entry() negative test where name of file is invalid.
-//!				Uses API elements: Entry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Entry() and pass "<>:"/|.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Entry() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Entry		PBASE-F32-RFS-PublicApi-2079-001-Entry_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2079
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2080
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2080
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions Entry() negative test where file does not exist.
-//!				Uses API elements: Entry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Entry() and pass "none.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Entry() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	Entry		PBASE-F32-RFS-PublicApi-2080-001-Entry_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2080
-
-
-
-///////////////////////////////
-//
-// SETENTRY
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2081
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2081
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetEntry() negative test where file does not exist.
-//!				Uses API elements: SetEntry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetEntry() and pass "none.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetEntry() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2081-001-SetEntry_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2081
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2082
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2082
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetEntry() negative test where name of file is invalid.
-//!				Uses API elements: SetEntry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetEntry() and pass "<>:"/|.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetEntry() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2082-001-SetEntry_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2082
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2083
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2083
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetEntry() test where set attribute is a big number.
-//!				Uses API elements: SetEntry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetEntry() and pass parameters "test.txt" as name and "2147483647" (hex FFFFFFFF) as set attribute of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetEntry() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2083-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2083-001-SetEntry_command09
-		COMMAND		RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2083-001-SetEntry_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2083-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2083
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2084
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2084
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetEntry() negative test where an attribute is set and unset in the same time.
-//!				Uses API elements: SetEntry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetEntry() and pass parameters "test.txt" as name and KEntryAttReadOnly as both clear and set attribute.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetEntry() return FSCLIENT panic Code = 21.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2084-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2084-001-SetEntry_command09
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2084-001-Delete_command10
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	!PanicCode=21 !PanicString="FSCLIENT panic"
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2084-002-Delete_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2084
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2085
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2085
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetEntry() negative test where time is negative.
-//!				Uses API elements: SetEntry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetEntry() and pass parameters "test.txt" as name (that resides on a MMC drive) and "-12345" as time and read only.
-//!				3. Call Delete() fails with error KErrAccessDenied
-//!				4. Call SetEntry() and remove read only.
-//!				5. Call Delete().
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	First Delete() call returns KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2085-001-Create_command05
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND			RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2085-001-SetEntry_command09
-		COMMAND	!Error=-21	RFs1	Delete		PBASE-F32-RFS-PublicApi-2085-001-Delete_command10
-		COMMAND			RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2085-001-SetEntry_command11
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2085-001-Delete_command12
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-2085
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2086
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2086
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Functions SetEntry() negative test where attribute appears in both bitmasks.
-//!				Uses API elements: SetEntry().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetEntry() and pass parameters "test.txt" as name and "KEntryAttReadOnly" as set attribute
-//!				   and "KEntryAttReadOnly" as clear attribute.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetEntry() return FSCLIENT panic Code = 21.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2086-001-Create_command05
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2086-001-SetEntry_command09
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2086-001-Delete_command10
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	!PanicCode=21 !PanicString="FSCLIENT panic"
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2086-002-Delete_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2086
-
-
-
-///////////////////////////////
-//
-// READFILESECTION
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2087
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2087
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function ReadFileSection() negative test where name of file is invalid.
-//!				Uses API elements: ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call ReadFileSection() and pass parameter "<>:"/|.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function ReadFileSection() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2087-001-ReadFileSection_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2087
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2088
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2088
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function ReadFileSection() negative test where file does not exist.
-//!				Uses API elements: ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call ReadFileSection() and pass parameter "none.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReadFileSection() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2088-001-ReadFileSection_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2088
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2089
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2089
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function ReadFileSection() negative test where the offset from the start is negative.
-//!				Uses API elements: ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call ReadFileSection() and pass parameters "test.txt" as name of file and "-12345" as offset.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReadFileSection() return panic FSCLIENT: 19.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2089-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2089-001-Create_command06
-		COMMAND		RFile1	Write		PBASE-F32-RFS-PublicApi-2089-001-Write_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2089-001-ReadFileSection_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2089-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	!PanicCode=19 !PanicString="FSCLIENT panic"
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2089-002-Delete_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2089
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2090
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2090
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function ReadFileSection() negative test where the number of bytes to be read from the file greater than the maximum length of the target buffer.
-//!				Uses API elements: ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Creating the buffer length equaling 10 bytes for the data to be read from the file.
-//!				2. Call ReadFileSection() and pass parameters "test.txt" as name,
-//!				   "20" as the number of bytes to be read from the file,
-//!				   "10" as the buffer length for the data to be read from the file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReadFileSection() return FSCLIENT panic = 27.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2090-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2090-001-Create_command06
-		COMMAND		RFile1	Write		PBASE-F32-RFS-PublicApi-2090-001-Write_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2090-001-ReadFileSection_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2090-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	!PanicCode=27 !PanicString="FSCLIENT panic"
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2090-002-Delete_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2090
-
-
-
-///////////////////////////////
-//
-// ISFILEISOPEN
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2091
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2091
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function IsFileOpen() negative test where name of file is invalid.
-//!				Uses API elements: IsFileOpen().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call IsFileOpen() and pass parameter "<>:"/|.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function IsFileOpen() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	IsFileOpen		PBASE-F32-RFS-PublicApi-2091-001-IsFileOpen_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2091
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2092
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2092
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function IsFileOpen() negative test where file does not exist.
-//!				Uses API elements: IsFileOpen().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call IsFileOpen() and pass parameter "<DRIVE>:\base\T_Sfsrv\none.txt" as name of file where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function IsFileOpen() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	IsFileOpen		PBASE-F32-RFS-PublicApi-2092-001-IsFileOpen_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2092
-
-
-
-///////////////////////////////
-//
-// GETSHORTNAME
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2093
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2093
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetShortName() negative test where name of file is invalid.
-//!				Uses API elements: GetShortName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetShortName() and pass parameter "<DRIVE>:\base\T_Sfsrv\<>:"/|.txt" as name of file where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function IsFileOpen() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	GetShortName		PBASE-F32-RFS-PublicApi-2093-001-GetShortName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2093
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2094
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2094
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetShortName() negative test where file does not exist.
-//!				Uses API elements: GetShortName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetShortName() and pass parameter "<DRIVE>:\base\T_Sfsrv\none.txt" as name of file where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function IsFileOpen() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	GetShortName		PBASE-F32-RFS-PublicApi-2094-001-GetShortName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2094
-
-
-
-///////////////////////////////
-//
-// GETLONGNAME
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2095
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2095
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetLongName() negative test where name of file is invalid.
-//!				Uses API elements: GetLongName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetLongName() and pass parameter "<DRIVE>:\base\T_Sfsrv\<>:"/|.txt" as name of file where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetLongName() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	GetLongName		PBASE-F32-RFS-PublicApi-2095-001-GetLongName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2095
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2096
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2096
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetLongName() negative test where file does not exist.
-//!				Uses API elements: GetLongName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetLongName() and pass parameter "none.txt" as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetLongName() return KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	GetLongName		PBASE-F32-RFS-PublicApi-2096-001-GetLongName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2096
-
-
-
-///////////////////////////////
-//
-// ISFILEINROM
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2097
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2097
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function IsFileInRom() test where name of file is invalid.
-//!				Uses API elements: IsFileInRom().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call IsFileInRom() and pass parameter "<DRIVE>:\base\T_Sfsrv\<>:"/|.txt" as name of file and check that the result is FALSE where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function IsFileInRom() return FALSE.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	IsFileInRom		PBASE-F32-RFS-PublicApi-2097-001-IsFileInRom_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2097
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2098
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2098
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function IsFileInRom() test where file does not exist.
-//!				Uses API elements: IsFileInRom().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call IsFileInRom() and pass parameter "<DRIVE>:\base\T_Sfsrv\none.txt" as name of file and check that the result is FALSE where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function IsFileInRom() return FALSE.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	IsFileInRom		PBASE-F32-RFS-PublicApi-2098-001-IsFileInRom_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2098
-
-
-
-///////////////////////////////
-//
-// ISVALIDNAME (const TDesC &anEntryName)
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2099
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2099
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function IsValidName(const TDesC &anEntryName) test where name has double backslashes.
-//!				Uses API elements: IsValidName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call IsValidName() and pass parameter "<DRIVE>:\\\\test.txt" as name of file and check that the result is FALSE where <DRIVE> is a test drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function IsValidName() return FALSE.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	IsValidName		PBASE-F32-RFS-PublicApi-2099-001-IsValidName_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2099
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2102
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2102
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function SetSessionToPrivate() test where drive is nonmounted.
-//!				Uses API elements: SetSessionToPrivate().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionToPrivate() and pass "<DRIVE>" as parameter where <DRIVE> is nonmounted drive letter.
-//!				3. Call RFile:Create to create a file in private location
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function RFile:Create() return KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	rfs
-		CREATE_OBJECT	RFile	file
-		COMMAND			rfs	new
-		COMMAND			rfs	Connect
-		COMMAND			rfs	FileSystemName		PBASE-F32-RFS-PublicApi-2102-001-FileSystemName_command03
-		COMMAND			rfs	DismountFileSystem		PBASE-F32-RFS-PublicApi-2102-001-DismountFileSystem_command04
-		COMMAND			rfs	SetSessionToPrivate		PBASE-F32-RFS-PublicApi-2102-001-SetSessionToPrivate_command05
-		COMMAND			file	new
-		COMMAND	!Error=-18	file	Create		PBASE-F32-RFS-PublicApi-2102-001-Create_command08
-		COMMAND			file	Close
-		COMMAND			file	~
-		COMMAND			rfs	MountFileSystem		PBASE-F32-RFS-PublicApi-2102-001-MountFileSystem_command12
-		COMMAND			rfs	Close
-		COMMAND			rfs	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2102
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2104
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2104
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function CreatePrivatePath() negative test where drive is nonmounted.
-//!				Uses API elements: CreatePrivatePath().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call CreatePrivatePath() and pass "<DRIVE>" as parameter where <DRIVE> is nonmounted drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function CreatePrivatePath() return KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-2104-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-2104-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	CreatePrivatePath		PBASE-F32-RFS-PublicApi-2104-001-CreatePrivatePath_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-2104-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2104
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2105
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2105
-//! @SYMAPI			RFs
-//! @SYMCreationDate		19/03/2007
-//! @SYMTestCaseDesc		Functions SetAtt() test where the sets attribute "KEntryAttVolume" for a file.
-//!				Uses API elements: SetAtt(), Att().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetAtt() and pass parameters "<DRIVE>:\test2105.txt" as name and "KEntryAttVolume" as attribute to be set, where <DRIVE> is a test drive letter.
-//!				3. Call Att() check that "KEntryAttVolume" is not set.
-//!				4. Call Delete() method.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetAtt() return KErrNone, KEntryAttVolume cannot be used and is ignored.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	rfs
-		CREATE_OBJECT	RFile	file
-		COMMAND		rfs	new
-		COMMAND		rfs	Connect
-		COMMAND		file	new
-		COMMAND		file	Create		PBASE-F32-RFS-PublicApi-2105-001-Create_command05
-		COMMAND		file	Close
-		COMMAND		file	~
-		COMMAND		rfs	SetAtt		PBASE-F32-RFS-PublicApi-2105-001-SetAtt_command09
-		COMMAND		rfs	Att		PBASE-F32-RFS-PublicApi-2105-001-Att_command10
-		COMMAND		rfs	Delete		PBASE-F32-RFS-PublicApi-2105-001-Delete_command11
-		COMMAND		rfs	Close
-		COMMAND		rfs	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2105
-
-///////////////////////////////
-//
-// GETDIR
-// TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) const;
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2201
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2201
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) negative test, 
-//!				where name of directory include wildcard.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Create a "<DRIVE>:\base\T_Sfsrv\testdir\" directory where <DRIVE> is a test drive letter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\te*\" as parameter.
-//!				4. Remove "<DRIVE>:\base\T_Sfsrv\testdir\" directory.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	MkDir		PBASE-F32-RFS-PublicApi-2201-001-MkDir_command03
-		COMMAND	!Error=-28	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2201-001-GetDir_command04
-		COMMAND			RFs1	RmDir		PBASE-F32-RFS-PublicApi-2201-001-RmDir_command05
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2201
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2202
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2202
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) test, 
-//!				where name of files include wildcard.
-//!				Uses API elements: SetSessionPath(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Create files "file1.txt" and "file2.txt"
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\*.txt" as parameter where <DRIVE> is a test drive letter.
-//!				   and check that list of directory contents has a "file1.txt" of file.
-//!				5. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\*.txt" as parameter where <DRIVE> is a test drive letter.
-//!				   and check that list of directory contents has a "file2.txt" of file.
-//!				6. Delete files "file1.txt" and "file2.txt"
-//!				7. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2202-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2202-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2202-001-Create_command08
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2202-001-GetDir_command12
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2202-001-GetDir_command13
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2202-001-Delete_command14
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2202-001-Delete_command15
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2202
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2203
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2203
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) negative test, 
-//!				where path includes nonmounted drive.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\" as parameter where <DRIVE> is nonmounted drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-2203-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-2203-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2203-001-GetDir_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-2203-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2203
-
-
-///////////////////////////////
-//
-// GETDIR
-// TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) const;
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2204
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2204
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) negative test, 
-//!				where name of directory include wildcard.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Create a "<DRIVE>:\base\T_Sfsrv\testdir\" directory where <DRIVE> is a test drive letter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\te*\" as parameter.
-//!				4. Remove "<DRIVE>:\base\T_Sfsrv\testdir\" directory.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	MkDir		PBASE-F32-RFS-PublicApi-2204-001-MkDir_command03
-		COMMAND	!Error=-28	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2204-001-GetDir_command04
-		COMMAND			RFs1	RmDir		PBASE-F32-RFS-PublicApi-2204-001-RmDir_command05
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2204
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2205
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2205
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) test, 
-//!				where name of files include wildcard.
-//!				Uses API elements: SetSessionPath(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Create files "file1.txt" and "file2.txt"
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\*.txt" as parameter where <DRIVE> is a test drive letter.
-//!				   and check that list of directory contents has a "file1.txt" of file.
-//!				5. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\*.txt" as parameter where <DRIVE> is a test drive letter.
-//!				   and check that list of directory contents has a "file2.txt" of file.
-//!				6. Delete files "file1.txt" and "file2.txt"
-//!				7. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2205-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2205-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2205-001-Create_command08
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2205-001-GetDir_command12
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2205-001-GetDir_command13
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2205-001-Delete_command14
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2205-001-Delete_command15
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2205
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2206
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2206
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) negative test,
-//!				where path includes nonmounted drive.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\" as parameter where <DRIVE> is nonmounted drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-2206-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-2206-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2206-001-GetDir_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-2206-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2206
-
-
-///////////////////////////////
-//
-// GETDIR
-// TInt GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) const;
-//
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2207
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2207
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) negative test, 
-//!				where name of directory include wildcard.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Create a "<DRIVE>:\base\T_Sfsrv\testdir\" directory where <DRIVE> is a test drive letter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\te*\" as parameter.
-//!				4. Remove "<DRIVE>:\base\T_Sfsrv\testdir\" directory.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	MkDir		PBASE-F32-RFS-PublicApi-2207-001-MkDir_command03
-		COMMAND	!Error=-28	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2207-001-GetDir_command04
-		COMMAND			RFs1	RmDir		PBASE-F32-RFS-PublicApi-2207-001-RmDir_command05
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2207
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2208
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2208
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) test, 
-//!				where name of files include wildcard.
-//!				Uses API elements: SetSessionPath(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Create files "file1.txt" and "file2.txt"
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\*.txt" as parameter where <DRIVE> is a test drive letter.
-//!				   and check that list of directory contents has a "file1.txt" of file.
-//!				5. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\*.txt" as parameter where <DRIVE> is a test drive letter.
-//!				   and check that list of directory contents has a "file2.txt" of file.
-//!				6. Delete files "file1.txt" and "file2.txt"
-//!				7. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetDir() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2208-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2208-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2208-001-Create_command08
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2208-001-GetDir_command12
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2208-001-GetDir_command13
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2208-001-Delete_command14
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2208-001-Delete_command15
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2208
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2209
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2209
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) negative test,
-//!				where path includes nonmounted drive.
-//!				Uses API elements: GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call GetDir() and pass "<DRIVE>:\" as parameter where <DRIVE> is nonmounted drive letter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function GetDir() return KErrNotReady.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-2209-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-2209-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	GetDir		PBASE-F32-RFS-PublicApi-2209-001-GetDir_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-2209-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2209
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2210
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2210
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Rename() negative test where new name of file includes wildcard.
-//!				Uses API elements: SetSessionPath(), Rename().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Create file "test_old.txt".
-//!				4. Call Rename() and pass the parameters "test_old.txt" as old name and "test*.txt" as a new name of file.
-//!				5. Delete file "test_old.txt".
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Rename() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2210-001-SetSessionPath_command03
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2210-001-Create_command06
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND	!Error=-28	RFs1	Rename		PBASE-F32-RFS-PublicApi-2210-001-Rename_command10
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2210-001-Delete_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2210
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2211
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2211
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Rename() test of renaming the directories.
-//!				Uses API elements: SetSessionPath(), Rename(), GetDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\DirOld\" as parameter where <DRIVE> is a test drive letter.
-//!				4. Call Rename() and pass the parameters "DirOld" as old name and "DirNew" as a new name of directory.
-//!				5. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter,
-//!				   and check that list of directory contents has a "DirNew" of directory.
-//!				6. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\DirNew\" as parameter where <DRIVE> is a test drive letter.
-//!				7. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Rename() returns KErrNone, the directory "DirOld" renamed to "DirNew" successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2211-001-SetSessionPath_command03
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2211-001-MkDir_command04
-		COMMAND		RFs1	Rename		PBASE-F32-RFS-PublicApi-2211-001-Rename_command05
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2211-001-GetDir_command06
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2211-001-RmDir_command07
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2211
-
-
-///////////////////////////////
-// REPLACE
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2212
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2212
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Replace() negative test where new name of file includes wildcard.
-//!				Uses API elements: SetSessionPath(), Replace().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Create file "test_old.txt".
-//!				4. Call Replace() and pass the parameters "test_old.txt" as old name and "*.txt" as a new name of file.
-//!				5. Delete files "test_old.txt".
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Replace() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2212-001-SetSessionPath_command03
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2212-001-Create_command06
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND	!Error=-28	RFs1	Replace		PBASE-F32-RFS-PublicApi-2212-001-Replace_command10
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2212-001-Delete_command11
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2212
-
-
-///////////////////////////////
-// MKDIR
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2213
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2213
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function MkDir() negative test that would create a directory in a directory that doesn't exist.
-//!				Uses API elements: MkDir(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExist\NewDir\" as parameter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and check that list of directory contents hasn't a "DoesntExist" of directory.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function MkDir() return KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-12	RFs1	MkDir		PBASE-F32-RFS-PublicApi-2213-001-MkDir_command03
-		COMMAND			RFs1	GetDir		PBASE-F32-RFS-PublicApi-2213-001-GetDir_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2213
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2214
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2214
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function MkDir() test where the path doesn't end with "\".
-//!				Uses API elements: MkDir(), GetDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExist\NewDir" as parameter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   and check that list of directory contents has a "DoesntExist" of directory.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExist\" as parameter,
-//!				   and check that list of directory contents hasn't a "NewDir" of directory.
-//!				5. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExistAll\DoesntExist\" as parameter.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function MkDir() return KErrNone, directories "DoesntExist" is created, "NewDir" not created..
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2214-001-MkDir_command03
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2214-001-GetDir_command04
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2214-001-GetDir_command05
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2214-001-RmDir_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2214
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2215
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2215
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function MkDir() negative test where the path doesn't exist and not ended with "\".
-//!				Uses API elements: MkDir(), GetDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExist\NewDir1\NewDir2" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function MkDir() return KErrPathNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-12	RFs1	MkDir		PBASE-F32-RFS-PublicApi-2215-001-MkDir_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2215
-
-
-///////////////////////////////
-// MKDIRALL
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2216
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2216
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function MkDirAll() that would create a directory in a directory that doesn't exist.
-//!				Uses API elements: MkDirAll(), GetDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDirAll() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExistAll\NewDirAll\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   check that list of directory contents has a "DoesntExistAll" of directory.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExistAll\" as parameter,
-//!				   check that list of directory contents has a "NewDirAll" of directory.
-//!				5. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExistAll\NewDirAll\" as parameter.
-//!				6. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExistAll\" as parameter.
-//!				7. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function MkDirAll() return KErrNone, directories "DoesntExistAll" and "NewDirAll" is created.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDirAll		PBASE-F32-RFS-PublicApi-2216-001-MkDirAll_command03
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2216-001-GetDir_command04
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2216-001-GetDir_command05
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2216-001-RmDir_command06
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2216-001-RmDir_command07
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2216
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2217
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2217
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function MkDirAll() test where the path doesn't end with "\".
-//!				Uses API elements: MkDirAll(), GetDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDirAll() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExistAll\NewDirAll" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   check that list of directory contents has a "DoesntExistAll" of directory.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExistAll\" as parameter,
-//!				   check that list of directory contents hasn't a "NewDirAll" of directory.
-//!				5. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\DoesntExistAll\" as parameter.
-//!				6. Call Close() method
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function MkDirAll() return KErrNone, directories "DoesntExistAll" is created, "NewDirAll" not created.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDirAll		PBASE-F32-RFS-PublicApi-2217-001-MkDirAll_command03
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2217-001-GetDir_command04
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2217-001-GetDir_command05
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2217-001-RmDir_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2217
-
-
-///////////////////////////////
-// DELETE
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2218
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2218
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Delete() negative test where name of file includes "?" of wildcard.
-//!				Uses API elements: Delete().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Delete() and pass "delete?.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Delete() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Delete		PBASE-F32-RFS-PublicApi-2218-001-Delete_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2218
-
-
-///////////////////////////////
-// RMDIR
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2219
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2219
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function RmDir() negative test removing non empty directory.
-//!				Uses API elements: RmDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\RmDir\" as parameter.
-//!				3. Call Create() and pass "<DRIVE>:\base\T_Sfsrv\RmDir\file1.txt" as parameter where <DRIVE> is a test drive letter.
-//!				4. Call Create() and pass "<DRIVE>:\base\T_Sfsrv\RmDir\file2.txt" as parameter where <DRIVE> is a test drive letter.
-//!				5. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\RmDir\" as parameter where <DRIVE> is a test drive letter.
-//!				6. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   check that list of directory contents has a "RmDir" of directory.
-//!				7. Delete files "file1.txt" and "file2.txt".
-//!				8. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\RmDir\" as parameter.
-//!				9. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function RmDir() return KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2219-001-SetSessionPath_command03
-		COMMAND			RFs1	MkDir		PBASE-F32-RFS-PublicApi-2219-001-MkDir_command04
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2219-001-Create_command07
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2219-001-Create_command09
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND	!Error=-14	RFs1	RmDir		PBASE-F32-RFS-PublicApi-2219-001-RmDir_command13
-		COMMAND			RFs1	GetDir		PBASE-F32-RFS-PublicApi-2219-001-GetDir_command14
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2219-001-Delete_command15
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2219-001-Delete_command16
-		COMMAND			RFs1	RmDir		PBASE-F32-RFS-PublicApi-2219-001-RmDir_command17
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2219
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2220
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2220
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function RmDir() test removing directory where path doesn't end with a backslash.
-//!				Uses API elements: MkDir(), GetDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\RmDir\" as parameter.
-//!				3. Call RmDir) and pass "<DRIVE>:\base\T_Sfsrv\RmDir\None" as parameter where <DRIVE> is a test drive letter.
-//!				4. Call GetDir() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter,
-//!				   check that list of directory contents hasn't a "RmDir" of directory.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function RmDir() return KErrNone, directory "RmDir" is removed.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2220-001-MkDir_command03
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2220-001-RmDir_command04
-		COMMAND		RFs1	GetDir		PBASE-F32-RFS-PublicApi-2220-001-GetDir_command05
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2220
-
-
-///////////////////////////////
-// GETSHORTNAME
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2221
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2221
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function GetShortName() test.
-//!				Uses API elements: SetSessionPath(), GetShortName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Create file "TestLongNameFile.txt".
-//!				4. Call GetShortName() and pass "TestLongNameFile.txt" as parameter of long name of file,
-//!				   and check that it return "TESTLO~1.TXT".
-//!				5. Delete file "TestLongNameFile.txt".
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetShortName() return KErNone, the short name "TESTLO~1.TXT" return successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2221-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2221-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetShortName		PBASE-F32-RFS-PublicApi-2221-001-GetShortName_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2221-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2221
-
-
-///////////////////////////////
-// GETLONGNAME
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2222
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2222
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function GetLongName() test.
-//!				Uses API elements: SetSessionPath(), GetLongName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Create file "TestLongNameFile.txt".
-//!				4. Call GetLongName() and pass "TESTLO~1.TXT"  as parameter of short name of file,
-//!				   and check that it return "TestLongNameFile.txt".
-//!				5. Delete file "TestLongNameFile.txt".
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function GetLongName() return KErNone, the long name "TestLongNameFile.txt" return successfully.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2222-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2222-001-Create_command06
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	GetLongName		PBASE-F32-RFS-PublicApi-2222-001-GetLongName_command10
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2222-001-Delete_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2222
-
-
-///////////////////////////////
-// ISFILEOPEN
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2223
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2223
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function IsFileOpen() test.
-//!				Uses API elements: SetSessionPath(), IsFileOpen().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call RFile's Open() and pass "test.txt" as parameter of file name.
-//!				4. Call IsFileOpen()  and pass "test.txt" as parameter and check that it is open.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function IsFileOpen() return KErNone, file "test.txt" is open.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2223-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2223-001-Create_command06
-		COMMAND		RFs1	IsFileOpen		PBASE-F32-RFS-PublicApi-2223-001-IsFileOpen_command08
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2223-001-Delete_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2223
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2224
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2224
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SetSessionPath() test where path is an empty string and function SessionPath() test
-//!				where check that the current path is system default path.
-//!				Uses API elements: SetSessionPath(), SessionPath().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and some valid directory path on the C-drive.
-//!				3. Call SetSessionPath() and pass empty string as parameter of path.
-//!				4. Call SessionPath() and check that it is the same as was set by the first SetSessionPath() call.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetSessionPath return KErrNone and doesn't change session path.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2224-001-SetSessionPath_command03
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2224-001-SetSessionPath_command04
-		COMMAND		RFs1	SessionPath		PBASE-F32-RFS-PublicApi-2224-001-SessionPath_command05
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2224
-
-
-///////////////////////////////
-// SETATT & ATT
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2225
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2225
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SetAtt() and Att() test for directory.
-//!				Uses API elements: SetSessionPath(), SetAtt() and Att(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				4. Call SetAtt() and pass "TestDir" as name of directory.
-//!				5. Call Att() and pass "TestDir" as name of directory and check that flag of directory is set.
-//!				6. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				7. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetAtt() and Att() return KErrNone, flag of directory is set.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2225-001-SetSessionPath_command03
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2225-001-MkDir_command04
-		COMMAND		RFs1	SetAtt		PBASE-F32-RFS-PublicApi-2225-001-SetAtt_command05
-		COMMAND		RFs1	Att		PBASE-F32-RFS-PublicApi-2225-001-Att_command06
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2225-001-RmDir_command07
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2225
-
-
-///////////////////////////////
-// SETENTRY & ENTRY
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2226
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2226
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SetEntry() and Entry() test for directory.
-//!				Uses API elements: SetSessionPath(), SetEntry(), Entry(), Modified(),  MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\TetsDir\" as parameter.
-//!				4. Call SetEntry() and pass "TestDir" as name of directory, "20090101" as time of modified. 
-//!				5. Call Entry() and pass "TestDir" as name of directory and check that flag of directory is set.
-//!				6. Call Modified() and pass "TestDir" as name of directory and check that time of modified is set to "20090101".
-//!				7. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				8. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetEntry() and Entry() return KErrNone, time of modified is set to "20090101".
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2226-001-SetSessionPath_command03
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2226-001-MkDir_command04
-		COMMAND		RFs1	SetEntry		PBASE-F32-RFS-PublicApi-2226-001-SetEntry_command05
-		COMMAND		RFs1	Entry		PBASE-F32-RFS-PublicApi-2226-001-Entry_command06
-		COMMAND		RFs1	Modified		PBASE-F32-RFS-PublicApi-2226-001-Modified_command07
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2226-001-RmDir_command08
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2226
-
-
-///////////////////////////////
-// SETMODIFIED & MODIFIED
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2227
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2227
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SetModified() and Modified() test for directory and uses SetModified() to set a future time for the directory.
-//!				Uses API elements: SetSessionPath(), SetEntry(), Entry(), Modified(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				4. Call SetModified() and pass "TestDir" as name of directory, "20990101" as time of modified. 
-//!				5. Call Modified() and pass "TestDir" as name of directory and check that time of modified is set to "20990101".
-//!				6. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\TestDir\" as parameter.
-//!				7. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetModified() and Modified() return KErrNone, time of modified is set to "20990101".
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2227-001-SetSessionPath_command03
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-2227-001-MkDir_command04
-		COMMAND		RFs1	SetModified		PBASE-F32-RFS-PublicApi-2227-001-SetModified_command05
-		COMMAND		RFs1	Modified		PBASE-F32-RFS-PublicApi-2227-001-Modified_command06
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-2227-001-RmDir_command07
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2227
-
-
-///////////////////////////////
-// READFILESECTION
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2229
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2229
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions ReadFileSection() test where offset, in bytes, from the start has some positive number.
-//!				Uses API elements: SetSessionPath(), ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Create() passing "EFileShareAny" as file mode and "test2229.txt" as name of file.
-//!				4. Call Write() passing some data to write as argument.
-//!				5. Call Close() to close created file.
-//!				6. Call ReadFileSection()  and pass "test2229.txt" as parameter as name of file and
-//!				   "10" as offset, in bytes, from the start.
-//!				7. Call Delete() passing parameter "test2229.txt" as name of file. 
-//!				8. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetSessionPath() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2229-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2229-001-Create_command06
-		COMMAND		RFile1	Write		PBASE-F32-RFS-PublicApi-2229-001-Write_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2229-001-ReadFileSection_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2229-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2229
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2230
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2230
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions ReadFileSection() test where number of bytes to be read is greater than file size.
-//!				Uses API elements: SetSessionPath(), ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Create() passing "EFileShareAny" as file mode and "test2230.txt" as name of file.
-//!				4. Call Write() passing some data to write as argument.
-//!				5. Call Close() to close created file.
-//!				6. Call ReadFileSection()  and pass "test2230.txt" as parameter as name of file and
-//!				   "5555" number of bytes to be read.
-//!				7. Call Delete() passing parameter "test2230.txt" as name of file.
-//!				8. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetSessionPath() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2230-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2230-001-Create_command06
-		COMMAND		RFile1	Write		PBASE-F32-RFS-PublicApi-2230-001-Write_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2230-001-ReadFileSection_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2230-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2230
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2231
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2231
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions ReadFileSection() negative test where passed the name of directory instead of name of file.
-//!				Uses API elements: ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call ReadFileSection()  and pass "<DRIVE>:\base\T_Sfsrv\" as parameter as name of file.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function SetSessionPath() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2231-001-ReadFileSection_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2231
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2232
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2232
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function ReadFileSection() test with 0 as a length argument.
-//!				Uses API elements: ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call ReadFileSection()  and pass "<DRIVE>:\base\T_Sfsrv\test.txt" as parameter, offset = 0, length = 0, buffer with a length = 10.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	ReadFileSection() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2232-001-SetSessionPath_command03
-		COMMAND		RFile1	new
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-2232-001-Create_command06
-		COMMAND		RFile1	Write		PBASE-F32-RFS-PublicApi-2232-001-Write_command07
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~
-		COMMAND		RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2232-001-ReadFileSection_command11
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-2232-001-Delete_command12
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2232
-
-
-///////////////////////////////
-// DELETE
-///////////////////////////////
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2233
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2233
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Delete() negative test where name of file includes "*" of wildcard.
-//!				Uses API elements: Delete().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Delete() and pass "delete*.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Delete() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Delete		PBASE-F32-RFS-PublicApi-2233-001-Delete_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2233
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2234
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2234
-//! @SYMAPI			RFs
-//! @SYMCreationDate		5/10/2006
-//! @SYMTestCaseDesc		Function Delete() negative test where name of file includes "*" and "?" of wildcards.
-//!				Uses API elements: Delete().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call Delete() and pass "delete*?.txt" as parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function Delete() return KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	Delete		PBASE-F32-RFS-PublicApi-2234-001-Delete_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2234
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-2228
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-2228
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions ReadFileSection() negative test where the number of bytes to be read is negative.
-//!				Uses API elements: SetSessionPath(), ReadFileSection().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSessionPath() and pass "<DRIVE>:\base\T_Sfsrv\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call Create() passing "EFileShareAny" as file mode and "test2228.txt" as name of file.
-//!				4. Call Write() passing some data to write as argument.
-//!				5. Call Close() to close created file.
-//!				6. Call ReadFileSection()  and pass "test2228.txt" as parameter as name of file and
-//!				   "-1" as number of bytes to be read.
-//!				7. Call Delete() passing parameter "test2228.txt" as name of file. 
-//!				8. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReadFileSection() return KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv 	\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSessionPath		PBASE-F32-RFS-PublicApi-2228-001-SetSessionPath_command03
-		COMMAND			RFile1	new
-		COMMAND			RFile1	Create		PBASE-F32-RFS-PublicApi-2228-001-Create_command06
-		COMMAND			RFile1	Write		PBASE-F32-RFS-PublicApi-2228-001-Write_command07
-		COMMAND			RFile1	Close
-		COMMAND			RFile1	~
-		COMMAND	!Error=-6	RFs1	ReadFileSection		PBASE-F32-RFS-PublicApi-2228-001-ReadFileSection_command11
-		COMMAND			RFs1	Delete		PBASE-F32-RFS-PublicApi-2228-001-Delete_command12
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-2228
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Misc-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,328 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Misc-PublicApi-ANY
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Oleg Kuznetsov
-//! @SYMScriptDescription	The test script contains API tests for RFs functions that don't depend on any special type of test drive.
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3001
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3001
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Connect() test.
-//!				Uses API elements: Connect().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3001
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3002
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3002
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Version() test.
-//!				Uses API elements: Version().          
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Version().
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Doesn't cause panic
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Version
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3002
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3011
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3011
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function SetNotifyUser() and GetNotifyUser() test.
-//!				Uses API elements: SetNotifyUser(), GetNotifyUser().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetNotifyUser() and pass "false" as parameter.
-//!				3. Call GetNotifyUser() and check that it returns "false".
-//!				4. Call SetNotifyUser() and pass "true" as parameter.
-//!				5. Call GetNotifyUser() and check that it returns "true".
-//!				6. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	GetNotifyUser() returns value that was set by SetNotifyUser().
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect			PBASE-F32-RFS-PublicApi-3011-001-SetNotifyUser_command03
-		COMMAND		RFs1	SetNotifyUser		PBASE-F32-RFS-PublicApi-3011-001-SetNotifyUser_command03
-		COMMAND		RFs1	GetNotifyUser		PBASE-F32-RFS-PublicApi-3011-001-GetNotifyUser_command04
-		COMMAND		RFs1	SetNotifyUser		PBASE-F32-RFS-PublicApi-3011-001-SetNotifyUser_command05
-		COMMAND		RFs1	GetNotifyUser		PBASE-F32-RFS-PublicApi-3011-001-GetNotifyUser_command06
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3011
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3014
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3014
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function LoaderHeapFunction() test.
-//!				Uses API elements: LoaderHeapFunction().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LoaderHeapFunction() and pass 1 as parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	KErrNotSupported, because This member function is not implemented in this version.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-5	RFs1	LoaderHeapFunction	PBASE-F32-RFS-PublicApi-3014-001-LoaderHeapFunction_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3014
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3101
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3101
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Connect() negative test where number of message slots is zero.
-//!				Uses API elements: Connect().
-//! @SYMTestActions		1. Call Connect() and pass number of message slots 0 as parameter.
-//!				2. Call NotifyChange() passing ENotifyAll as parameter and starts waiting for a notification on the background.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function return KErrServerBusy as there will be no slots available for NotifyChange
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect		PBASE-F32-RFS-PublicApi-3101-001-Connect_command02
-		COMMAND	!AsyncError=-16	RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3101-001-NotifyChange_command03
-				OUTSTANDING	
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3101
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3103
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3103
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Connect() test where the connect is called twice.
-//!				Uses API elements: Connect().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Connect().
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3103
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3104
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3104
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Version() test when function was called without connecting to the file server.
-//!				Uses API elements: Version().
-//! @SYMTestActions		1. Call Version() without calling Connect() before and Close() after.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Version
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3104
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3111
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3111
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChangeCancel(TRequestStatus &aStat) test where function called without call NotifyChange() before.
-//!				Uses API elements: NotifyChangeCancel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyChangeCancel() for all outstanding requests.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Does not cause Panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	NotifyChangeCancel	PBASE-F32-RFS-PublicApi-3111-001-NotifyChangeCancel_command03
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3111
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3114
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3114
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDiskSpace() negative test where drive number is negative.
-//!				Uses API elements: NotifyDiskSpace().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyDiskSpace() and pass -12345 as drive number and starts waiting for a notification on the background.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function return status KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-28	RFs1	NotifyDiskSpace		PBASE-F32-RFS-PublicApi-3114-001-NotifyDiskSpace_command03
-		OUTSTANDING	
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3114
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3115
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3115
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDiskSpaceCancel() (synchronous version) test where function called without call NotifyDiskSpace() before.
-//!				Uses API elements: NotifyDiskSpaceCancel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyDiskSpaceCancel() for all outstanding requests.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Does not cause Panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	NotifyDiskSpaceCancel	PBASE-F32-RFS-PublicApi-3115-001-NotifyDiskSpaceCancel_command03
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3115
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3121
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3121
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function IsRomAddress() test where address is 0. 
-//!				Uses API elements: IsRomAddress().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call IsRomAddress() and pass 0 as parameter and check that not in rom.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	IsRomAddress	PBASE-F32-RFS-PublicApi-3121-001-IsRomAddress_command03
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3121
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3127
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3127
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChangeCancel() test that cancels same request status twice.
-//!				Uses API elements: NotifyChange(), NotifyChangeCancel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyChange() and pass ENotifyDir as parameter and starts waiting for a notification on the background.
-//!				3. Call NotifyChangeCancel() for the request status.
-//!				4. Call NotifyChangeCancel() for the request status.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrCancel(-3) and the test doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-3	RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-3127-001-NotifyChange_command03
-		COMMAND			RFs1	NotifyChangeCancel	PBASE-F32-RFS-PublicApi-3127-001-NotifyChangeCancel_command04
-		COMMAND			RFs1	NotifyChangeCancel	PBASE-F32-RFS-PublicApi-3127-001-NotifyChangeCancel_command05
-		OUTSTANDING	
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3127
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3102
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3102
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function Connect() negative test where number of message slots is invalid.
-//!				Uses API elements: Connect().
-//! @SYMTestActions		1. Call Connect() and pass negative number of message slots -12345 as parameter.
-//!				2. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function return KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND	!Error=-6	RFs1	Connect		PBASE-F32-RFS-PublicApi-3102-001-Connect_command02
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3102
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Misc-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,601 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Misc-PublicApi-RAM
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Oleg Kuznetsov
-//! @SYMScriptDescription	The test script contains API tests for RFs functions that perform operations on a RAM (not removeable RAM drive).
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3003
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3003
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange() (NotifyChange(TNotifyType aType, TRequestStatus &aStat) version) test.
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyChange() and pass ENotifyDir as parameter and starts waiting for a notification on the background.
-//!				3. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter where <DRIVE> is a test drive letter.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrNone after creation of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3003-001-NotifyChange_command03
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-3003-001-MkDir_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-3003-001-RmDir_command05
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3003
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3004
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3004
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange() (NotifyChange(TNotifyType aType, TRequestStatus &aStat, const TDesC &aPathName) version) test.
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call NotifyChange() and pass ENotifyDir as parameter and starts waiting for a notification on the background.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrNone after deletion of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-3004-001-MkDir_command03
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3004-001-NotifyChange_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-3004-001-RmDir_command05
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3004
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3005
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3005
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChangeCancel() test.
-//!				Uses API elements: NotifyChange(),
-//!				NotifyChangeCancel(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyChange() and pass ENotifyDir as parameter and starts waiting for a notification on the background.
-//!				3. Call NotifyChangeCancel().
-//!				4. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter where <DRIVE> is a test drive letter.
-//!				5. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter.
-//!				6. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrCancel(-3) after creation and deletion of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-3	RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-3005-001-NotifyChange_command03
-		COMMAND			RFs1	NotifyChangeCancel	PBASE-F32-RFS-PublicApi-3005-001-NotifyChangeCancel_command04
-		COMMAND			RFs1	MkDir			PBASE-F32-RFS-PublicApi-3005-001-MkDir_command05
-		COMMAND			RFs1	RmDir			PBASE-F32-RFS-PublicApi-3005-001-RmDir_command06
-		OUTSTANDING	
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3005
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3006
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3006
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChangeCancel() (NotifyChangeCancel(TRequestStatus &aStat) version) test.
-//!				Uses API elements: NotifyChange(),
-//!				NotifyChangeCancel(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyChange() and pass ENotifyDir as parameter and starts waiting for a notification on the background.
-//!				3. Call NotifyChangeCancel() asynchronous version.
-//!				4. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter where <DRIVE> is a test drive letter.
-//!				5. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter.
-//!				6. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrCancel(-3) after creation and deletion of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-3	RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-3006-001-NotifyChange_command03
-		COMMAND			RFs1	NotifyChangeCancel	PBASE-F32-RFS-PublicApi-3006-001-NotifyChangeCancel_command04
-		COMMAND			RFs1	MkDir			PBASE-F32-RFS-PublicApi-3006-001-MkDir_command05
-		COMMAND			RFs1	RmDir			PBASE-F32-RFS-PublicApi-3006-001-RmDir_command06
-		OUTSTANDING	
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3006
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3007
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3007
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDiskSpace() test.
-//!				Uses API elements: NotifyDiskSpace(), ReserveDriveSpace().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Set NotifyDiskSpace treshold on a drive to freespace-1000 and starts waiting for a notification on the background.
-//!				3. Call ReserveDriveSpace() and pass the drive, 2000 as parameters.
-//!				4. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Notification was received that threshold is crossed, request status is KErrNone
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	200	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Volume			PBASE-F32-RFS-PublicApi-3007-001-Volume_command03
-		COMMAND		RFs1	NotifyDiskSpace		PBASE-F32-RFS-PublicApi-3007-001-NotifyDiskSpace_command04
-		COMMAND		RFs1	ReserveDriveSpace	PBASE-F32-RFS-PublicApi-3007-001-ReserveDriveSpace_command05
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3007
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3008
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3008
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDiskSpaceCancel() test.
-//!				Uses API elements: NotifyDiskSpace(), NotifyDiskSpaceCancel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyDiskSpace() and pass a drive, 3000 as parameters and starts waiting for a notification on the background.
-//!				3. Call NotifyDiskSpaceCancel().
-//!				4. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Notification was canceled, request status is KErrCancel(-3)
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-3	RFs1	NotifyDiskSpace		PBASE-F32-RFS-PublicApi-3008-001-NotifyDiskSpace_command03
-		COMMAND			RFs1	NotifyDiskSpaceCancel	PBASE-F32-RFS-PublicApi-3008-001-NotifyDiskSpaceCancel_command04
-		OUTSTANDING	
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3008
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3009
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3009
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDiskSpaceCancel() (NotifyDiskSpaceCancel(TRequestStatus &aStat) version) test.
-//!				Uses API elements: NotifyDiskSpace(), NotifyDiskSpaceCancel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyDiskSpace() and pass a drive, 99999 as parameters and starts waiting for a notification on the background.
-//!				3. Call NotifyDiskSpaceCancel() passing the given request status.
-//!				4. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Notification was canceled, request status is KErrCancel(-3)
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-3	RFs1	NotifyDiskSpace		PBASE-F32-RFS-PublicApi-3009-001-NotifyDiskSpace_command03
-		COMMAND			RFs1	NotifyDiskSpaceCancel	PBASE-F32-RFS-PublicApi-3009-001-NotifyDiskSpaceCancel_command04
-		OUTSTANDING	
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3009
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3013
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3013
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function SetNotifyChange() test.
-//!				Uses API elements: SetNotifyChange(),NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetNotifyChange() and pass "FALSE" as parameter.
-//!				3. Call NotifyChange() and pass ENotifyDir as parameter
-//!				4. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter where <DRIVE> is a test drive letter.
-//!				5. Call SetNotifyChange() and pass "TRUE" as parameter.
-//!				6. Call RmDir and pass "<DRIVE>:\base\T_Sfsrv\fgfd\" as parameter.
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	KErrNone, Notify doesn't occur after creating dir.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetNotifyChange		PBASE-F32-RFS-PublicApi-3013-001-SetNotifyChange_command03
-		COMMAND		RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-3013-001-NotifyChange_command04
-		COMMAND		RFs1	MkDir			PBASE-F32-RFS-PublicApi-3013-001-MkDir_command05
-		COMMAND		RFs1	SetNotifyChange		PBASE-F32-RFS-PublicApi-3013-001-SetNotifyChange_command06
-		COMMAND		RFs1	RmDir			PBASE-F32-RFS-PublicApi-3013-001-RmDir_command07
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3013
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3106
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3106
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange(TNotifyType aType, TRequestStatus &aStat) test with notify type ENotifyAttributes.
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyChange() passing ENotifyAttributes as parameter and starts waiting for a notification on the background.
-//!				3. Call SetEntry() and pass "<DRIVE>:\base\T_Sfsrv\test.txt" as parameter where <DRIVE> is a test drive letter, set att mask KEntryAttReadOnly, clear att mask KEntryAttNormal.
-//!				4. Call SetEntry() and pass "<DRIVE>:\base\T_Sfsrv\test.txt" as parameter where <DRIVE> is a test drive letter, set att mask KEntryAttNormal, clear att mask KEntryAttReadOnly.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFile1	new		
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-3106-001-Create_command05
-		COMMAND		RFile1	Close		
-		COMMAND		RFile1	~		
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3106-001-NotifyChange_command09
-		COMMAND		RFs1	SetEntry	PBASE-F32-RFS-PublicApi-3106-001-SetEntry_command10
-		OUTSTANDING	
-		COMMAND		RFs1	SetEntry	PBASE-F32-RFS-PublicApi-3106-001-SetEntry_command12
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-3106-001-Delete_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3106
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3108
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3108
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange(TNotifyType aType, TRequestStatus &aStat, const TDesC &aPathName) negative test where incorrect path parameter.
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyChange() and pass ENotifyAll as parameter and bad path as parameter "<DRIVE>:\base\T_Sfsrv\*" where <DRIVE> is a test drive letter and starts waiting for a notification on the background.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function return status KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-28	RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-3108-001-NotifyChange_command03
-		OUTSTANDING	
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3108
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3112
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3112
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDiskSpace() negative test where threshold value less than zero.
-//!				Uses API elements: NotifyDiskSpace().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyDiskSpace() and pass parameter -12345 as treshold value and starts waiting for a notification on the background.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function return status KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-6	RFs1	NotifyDiskSpace		PBASE-F32-RFS-PublicApi-3112-001-NotifyDiskSpace_command03
-		OUTSTANDING	
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3112
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3113
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3113
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDiskSpace() negative test where the threshold value outside its limits.
-//!				Uses API elements: NotifyDiskSpace().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyDiskSpace() and pass parameter greater than the limit of treshold value and starts waiting for a notification on the background.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function return status KErrArgument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-6	RFs1	NotifyDiskSpace		PBASE-F32-RFS-PublicApi-3113-001-NotifyDiskSpace_command03
-		OUTSTANDING	
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3113
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3118
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3118
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function SetNotifyUser() test notifycation.
-//!				Uses API elements: SetNotifyUser().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetNotifyUser() and pass "FALSE" as parameter.
-//!				3. Call GetNotifyUser() and check that it returns "FALSE".
-//!				4. Call RFile's Open(), open file as read only and pass "<DRIVE>:\base\T_Sfsrv\test.txt" as parameter where <DRIVE> is a test drive letter.
-//!				5. Call Write() trying to write data into readonly file and check that the notification not appears.
-//!				6. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetNotifyUser	PBASE-F32-RFS-PublicApi-3118-001-SetNotifyUser_command03
-		COMMAND		RFs1	GetNotifyUser	PBASE-F32-RFS-PublicApi-3118-001-GetNotifyUser_command04
-		COMMAND		RFile1	new		
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-3118-001-Create_command07
-		COMMAND		RFile1	Write		PBASE-F32-RFS-PublicApi-3118-001-Write_command08
-		COMMAND		RFile1	Close		
-		COMMAND		RFile1	~		
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-3118-001-Delete_command12
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3118
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3125
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3125
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange() (NotifyChange(TNotifyType aType, TRequestStatus &aStat) version) test that passes 0 instead of TNotifyType (it starts from 1 if you see f32file.h).
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\temp_dir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call NotifyChange() and pass 0 and starts waiting for a notification on the background.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\temp_dir\" as parameter.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrNone after deletion of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-3125-001-MkDir_command03
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3125-001-NotifyChange_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-3125-001-RmDir_command05
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3125
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3126
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3126
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange() (NotifyChange(TNotifyType aType, TRequestStatus &aStat, const TDesC &aPathName) version) test that passes -1 instead of TNotifyType (it starts from 1 if you see f32file.h).
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\temp_dir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call NotifyChange() and pass -1 and starts waiting for a notification on the background.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\temp_dir\" as parameter.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrNone after deletion of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-3126-001-MkDir_command03
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3126-001-NotifyChange_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-3126-001-RmDir_command05
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3126
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3128
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3128
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDiskSpaceCancel() (NotifyDiskSpaceCancel(TRequestStatus &aStat) version) test that cancel same request twice.
-//!				Uses API elements: NotifyDiskSpace(), NotifyDiskSpaceCancel().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyDiskSpace() and pass a drive, 99999 as parameters and starts waiting for a notification on the background.
-//!				3. Call NotifyDiskSpaceCancel() passing the request status.
-//!				4. Call NotifyDiskSpaceCancel() passing the request status again.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Notification was canceled, request status is KErrCancel(-3) and the call doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-3	RFs1	NotifyDiskSpace		PBASE-F32-RFS-PublicApi-3128-001-NotifyDiskSpace_command03
-		COMMAND			RFs1	NotifyDiskSpaceCancel	PBASE-F32-RFS-PublicApi-3128-001-NotifyDiskSpaceCancel_command04
-		COMMAND			RFs1	NotifyDiskSpaceCancel	PBASE-F32-RFS-PublicApi-3128-001-NotifyDiskSpaceCancel_command05
-		OUTSTANDING	
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3128
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3015
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3015
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange() (NotifyChange(TNotifyType aType, TRequestStatus &aStat, const TDesC &aPathName) version) test that uses a root path as a monitored path.
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\temp_dir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call NotifyChange() and pass ENotifyDir and "<DRIVE>:\" as parameters and starts waiting for a notification on the background.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\temp_dir\" as parameter.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrNone after deletion of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-3015-001-MkDir_command03
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3015-001-NotifyChange_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-3015-001-RmDir_command05
-		OUTSTANDING	
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3015
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3110
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3110
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange(TNotifyType aType, TRequestStatus &aStat, const TDesC &aPathName) test with notify type ENotifyEntry, EFileShareAny, EFileShareWrite, EFileShareFile.
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call NotifyChange() passing ENotifyEntry as parameter and "<DRIVE>:\base\T_Sfsrv" as parameter where <DRIVE> is a test drive letter and starts waiting for a notification on the background.
-//!				3. Call Create() passing EFileShareAny as file mode and "<DRIVE>:\base\T_Sfsrv\test.ttt" as parameter where <DRIVE> is a test drive letter.
-//!				4. Call NotifyChange() passing ENotifyWrite as parameter and "<DRIVE>:\base\T_Sfsrv" as parameter where <DRIVE> is a test drive letter and starts waiting for a notification on the background.
-//!				5. Call Write() passing some data to write as argument.
-//!				6. Call Close() to close created file.
-//!				7. Call NotifyChange() passing ENotifyFile as parameter and "<DRIVE>:\base\T_Sfsrv" as parameter where <DRIVE> is a test drive letter and starts waiting for a notification on the background.
-//!				8. Call Delete() passing "<DRIVE>:\base\T_Sfsrv\test.ttt" as parameter where <DRIVE> is a test drive let
-//!				9. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3110-001-NotifyChange_command03
-		COMMAND		RFile1	new		
-		COMMAND		RFile1	Create		PBASE-F32-RFS-PublicApi-3110-001-Create_command06
-		OUTSTANDING	
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3110-001-NotifyChange_command09
-		COMMAND		RFile1	Write		PBASE-F32-RFS-PublicApi-3110-001-Write_command11
-		OUTSTANDING	
-		COMMAND		RFile1	Close
-		COMMAND		RFile1	~		
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3110-001-NotifyChange_command16
-		COMMAND		RFs1	Delete		PBASE-F32-RFS-PublicApi-3110-001-Delete_command17
-		OUTSTANDING	
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3110
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3123
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3123
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange() (NotifyChange(TNotifyType aType, TRequestStatus &aStat, const TDesC &aPathName) version) test that passes 0 instead of TNotifyType (it starts from 1 if you see f32file.h).
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\temp_dir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call NotifyChange() and pass 0 and "<DRIVE>:\" as parameters and starts waiting for a notification on the background.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\temp_dir\" as parameter.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrNone after deletion of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-3123-001-MkDir_command03
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3123-001-NotifyChange_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-3123-001-RmDir_command05
-		OUTSTANDING	
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3123
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3124
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3124
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange() (NotifyChange(TNotifyType aType, TRequestStatus &aStat, const TDesC &aPathName) version) test that passes -1 instead of TNotifyType (it starts from 1 if you see f32file.h).
-//!				Uses API elements: NotifyChange(), MkDir(), RmDir().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call MkDir() and pass "<DRIVE>:\base\T_Sfsrv\temp_dir\" as parameter where <DRIVE> is a test drive letter.
-//!				3. Call NotifyChange() and pass -1 and "<DRIVE>:\" as parameters and starts waiting for a notification on the background.
-//!				4. Call RmDir() and pass "<DRIVE>:\base\T_Sfsrv\fgfd\temp_dir\" as parameter.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is KErrNone after deletion of directory.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	MkDir		PBASE-F32-RFS-PublicApi-3124-001-MkDir_command03
-		COMMAND		RFs1	NotifyChange	PBASE-F32-RFS-PublicApi-3124-001-NotifyChange_command04
-		COMMAND		RFs1	RmDir		PBASE-F32-RFS-PublicApi-3124-001-RmDir_command05
-		OUTSTANDING	
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3124
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Mounts-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,621 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Mounts-PublicApi-ANY
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Oleg Kuznetsov
-//! @SYMScriptDescription	The test script contains API mounting related tests for RFs functions that don't depend on any special type of test drive.
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0001
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddFileSystem() and RemoveFileSystem() test.
-//!				Uses API elements: AddFileSystem(), RemoveFileSystem()
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call RemoveFileSystem() providing the name of the plug-in file system as an argument.
-//!				3. Call AddFileSystem() providing the file name of a file system plug-in as an argument.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Both AddFileSystem() and RemoveFileSystem() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	AddFileSystem		PBASE-F32-RFS-PublicApi-0001-001-AddFileSystem_command03
-		COMMAND		RFs1	RemoveFileSystem		PBASE-F32-RFS-PublicApi-0001-001-RemoveFileSystem_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0003
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddExtension() and RemoveExtension() test.
-//!				The test requires a file system extension plug-in.
-//!				Uses API elements: AddExtension(), RemoveExtension()
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddExtension() providing the file name of a file system extension plug-in as an argument.
-//!				3. Call RemoveExtension() providing the name of the plug-in file system extension as an argument.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Both AddExtension() and RemoveExtension() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0003-001-AddExtension_command03
-		COMMAND		RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0003-001-RemoveExtension_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0003
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0012
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0012
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function SetStartupConfiguration() test.
-//!				Uses API elements: SetStartupConfiguration()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetStartupConfiguration() providing ELoaderPriority as a command and 2 NULL pointers.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Check that SetStartupConfiguration() returns KErrPermissionDenied (-46).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-46	RFs1	SetStartupConfiguration		PBASE-F32-RFS-PublicApi-0012-001-SetStartupConfiguration_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0012
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0013
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0013
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function SetStartupConfiguration() test.
-//!				Uses API elements: SetStartupConfiguration()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetStartupConfiguration() providing EMaxStartupConfigurationCmd as a command and 2 NULL pointers.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Check that SetStartupConfiguration() returns KErrPermissionDenied (-46).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-46	RFs1	SetStartupConfiguration		PBASE-F32-RFS-PublicApi-0013-001-SetStartupConfiguration_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0013
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0015
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0015
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function StartupInitComplete() test.
-//!				Uses API elements: StartupInitComplete()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call StartupInitComplete().
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Check that StartupInitComplete() returns KErrAlreadyExists (-11).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-11	RFs1	StartupInitComplete
-		OUTSTANDING
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0015
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0016
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0016
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function SetLocalDriveMapping() test.
-//!				Uses API elements: SetLocalDriveMapping()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetLocalDriveMapping() with EWriteMappingsNoSet operation and 2 drives EDriveA and EDriveB set for indices 0 and 1 correspondingly.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Check that SetLocalDriveMapping() returns KErrAccessDenied (-21).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-21	RFs1	SetLocalDriveMapping		PBASE-F32-RFS-PublicApi-0016-001-SetLocalDriveMapping_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0016
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0020
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0020
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddFileSystem() test with incorrect file name of file system.
-//!				Uses API elements: AddFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddFileSystem() providing the incorrect file name of a file system.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	AddFileSystem		PBASE-F32-RFS-PublicApi-0020-001-AddFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0020
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0021
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0021
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddFileSystem() test with adding file system that already added.
-//!				Uses API elements: AddFileSystem().
-//!				The test requires a file system plug-in.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddFileSystem() providing the name of a file system that already added.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrAlreadyExists
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-11	RFs1	AddFileSystem		PBASE-F32-RFS-PublicApi-0021-001-AddFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0021
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0022
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0022
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions RemoveFileSystem() test, with incorrect file system name.
-//!				Uses API elements: RemoveFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call RemoveFileSystem() providing the incorrect file system name.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	RemoveFileSystem		PBASE-F32-RFS-PublicApi-0022-001-RemoveFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0022
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0024
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0024
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive) test with negative drive number.
-//!				Uses API elements: MountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the file system name and negative drive number -11.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0024-001-MountFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0024
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0027
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0027
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive, TBool aIsSync) test with negative drive number.
-//!				Uses API elements: MountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the file system name and negative drive number -11 and ETrue as a synchronization parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0027-001-MountFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0027
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0030
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0030
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive, TBool aIsSync) test with negative drive number.
-//!				Uses API elements: MountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the file system name and negative drive number -11 and EFalse as a synchronization parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0030-001-MountFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0030
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0033
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0033
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystemAndScan(const TDesC &aFileSystemName, TInt aDrive, TBool &aIsMountSuccess) test with negative drive number.
-//!				Uses API elements: MountFileSystemAndScan().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystemAndScan() providing the "Fat" file system name and negative drive number -11.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	MountFileSystemAndScan		PBASE-F32-RFS-PublicApi-0033-001-MountFileSystemAndScan_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0033
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0039
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0039
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions DismountFileSystem() test with negative drive number.
-//!				Uses API elements: DismountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call DismountFileSystem() providing the file system name and negative drive number -11.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName, bad name of drive
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-0039-001-DismountFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0039
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0042
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0042
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions FileSystemName() test with negative drive number.
-//!				Uses API elements: FileSystemName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() providing negative drive number(-11).
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrArgument
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-6	RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0042-001-FileSystemName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0042
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0044
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0044
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddExtension() test with incorrect file system extension name.
-//!				Uses API elements: AddExtension().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddExtension() providing bad extension file name.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0044-001-AddExtension_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0044
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0045
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0045
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddExtension() test, add file system extension twice.
-//!				Uses API elements: AddExtension(), RemoveExtension().
-//!				The test requires a file system extension plug-in.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddExtension() providing plug-in extension name.
-//!				3. Call AddExtension() providing plug-in extension name.
-//!				4. Call RemoveExtension() providing plug-in extension name.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrAlreadyExists
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0045-001-AddExtension_command03
-		COMMAND	!Error=-11	RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0045-001-AddExtension_command04
-		COMMAND			RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0045-001-RemoveExtension_command05
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0045
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0047
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0047
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountExtension() test with negative drive number.
-//!				Uses API elements: MountExtension(), AddExtension(), RemoveExtension().
-//!				The test requires a file system extension plug-in.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddExtension() providing plug-in extension name.
-//!				3. Call MountExtension() providing plug-in extension name and negative drive number (-11).
-//!				4. Call RemoveExtension() providing plug-in extension name.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0047-001-AddExtension_command03
-		COMMAND	!Error=-28	RFs1	MountExtension		PBASE-F32-RFS-PublicApi-0047-001-MountExtension_command04
-		COMMAND			RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0047-001-RemoveExtension_command05
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0047
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0051
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0051
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions DismountExtension() test with negative drive number.
-//!				Uses API elements: DismountExtension(), AddExtension(), RemoveExtension().
-//!				The test requires a file system extension plug-in.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddExtension() providing plug-in extension name.
-//!				3. Call DismountExtension() providing plug-in extension name and negative drive number (-11).
-//!				4. Call RemoveExtension() providing plug-in extension name.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0051-001-AddExtension_command03
-		COMMAND	!Error=-28	RFs1	DismountExtension		PBASE-F32-RFS-PublicApi-0051-001-DismountExtension_command04
-		COMMAND			RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0051-001-RemoveExtension_command05
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0051
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0053
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0053
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions RemoveExtension() test with incorrect file system extension name.
-//!				Uses API elements: RemoveExtension().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call RemoveExtension() providing bad extension name.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0053-001-RemoveExtension_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0053
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0055
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0055
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions ExtensionName() test with negative drive number.
-//!				Uses API elements: ExtensionName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call ExtensionName() providing negative drive number and first position (0).
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	ExtensionName		PBASE-F32-RFS-PublicApi-0055-001-ExtensionName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0055
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0056
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0056
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions RemountDrive() test with negative drive number.
-//!				Uses API elements: RemountDrive().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call RemountDrive() providing negative drive number and flag 0x00000001 (1).
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	RemountDrive		PBASE-F32-RFS-PublicApi-0056-001-RemountDrive_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0056
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0058
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0058
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions NotifyDismount() test with negative drive number.
-//!				Uses API elements: NotifyDismount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call NotifyDismount() providing negative drive number and mode EFsDismountForceDismount and starts waiting for a notification on the background.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!AsyncError=-28	RFs1	NotifyDismount		PBASE-F32-RFS-PublicApi-0058-001-NotifyDismount_command03
-		OUTSTANDING
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0058
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0062
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0062
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AllowDismount() test with negative drive number.
-//!				Uses API elements: AllowDismount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AllowDismount() providing negative drive number.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrBadName
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-28	RFs1	AllowDismount		PBASE-F32-RFS-PublicApi-0062-001-AllowDismount_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0062
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0073
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0073
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function FileSystemSubType() test with negative drive number.
-//!				Uses API elements: FileSystemSubType().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemSubType() passing the negative drive number as argument.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Return KErrArgument (-6).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-6	RFs1	FileSystemSubType		PBASE-F32-RFS-PublicApi-0073-001-FileSystemSubType_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0073
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-Mounts-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1194 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Mounts-PublicApi-RAM
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Oleg Kuznetsov
-//! @SYMScriptDescription	The test script contains API mounting related tests for RFs functions that perform operations on a RAM drive.
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0002
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem() (MountFileSystem(const TDesC& aFileSystemName,TInt aDrive) 
-//!				and MountFileSystem(const TDesC& aFileSystemName,TInt aDrive, TBool aIsSync) versions) and DismountFileSystem() test.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  MountFileSystem(), DismountFileSystem(), FileSystemName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() for a drive where a file system was mounted.
-//!				3. Call DismountFileSystem() providing the file system name and the drive number.
-//!				4. Call MountFileSystem() passing the file system name, an enabled free drive number.
-//!				5. Call DismountFileSystem() providing the name of the file system and the drive number.
-//!				6. Call MountFileSystem() passing the file system name, an enabled free drive number and ETrue as a synchronization parameter.
-//!				7. Call DismountFileSystem() providing the name of the file system and the drive number.
-//!				8. Call MountFileSystem() passing the file system name, an enabled free drive number and EFalse as a synchronization parameter.
-//!				9. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	All MountFileSystem() and DismountFileSystem() calls return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0002-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0002-001-DismountFileSystem_command04
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0002-001-MountFileSystem_command05
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0002-001-DismountFileSystem_command06
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0002-001-MountFileSystem_command07
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0002-001-DismountFileSystem_command08
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0002-001-MountFileSystem_command09
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0002
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0004
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0004
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem() (MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive)
-//!				and MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive, TBool aIsSync) versions) test. 
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				The test requires a file system extension plug-in.
-//!				Uses API elements:  AddExtension(), MountFileSystem(), DismountFileSystem(), RemoveExtension(), FileSystemName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() for a drive where a file system was mounted.
-//!				3. Call DismountFileSystem() providing the file system name and the drive number.
-//!				4. Call AddExtension() providing the file name of a file system extension plug-in as an argument.
-//!				5. Call MountFileSystem() passing the file system name, plug-in extension name and an enabled free drive number.
-//!				6. Call DismountFileSystem() providing the file system name and the drive number.
-//!				7. Call MountFileSystem() passing the file system name, plug-in extension name, an enabled free drive number and ETrue as a 
-//!					synchronization parameter.
-//!				8. Call DismountFileSystem() providing the file system name and the drive number.
-//!				9. Call MountFileSystem() passing the file system name, plug-in extension name, an enabled free drive number and EFalse 
-//!					as a synchronization parameter.
-//!				10. Call DismountFileSystem() providing the file system name and the drive number.
-//!				11. Call RemoveExtension() providing the name of the plug-in file system extension as an argument.
-//!				12. Call MountFileSystem() passing the file system name, the drive number and EFalse as a synchronization parameter.
-//!				13. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	All MountFileSystem() and DismountFileSystem() calls return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0004-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0004-001-DismountFileSystem_command04
-		COMMAND		RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0004-001-AddExtension_command05
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0004-001-MountFileSystem_command06
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0004-001-DismountFileSystem_command07
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0004-001-MountFileSystem_command08
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0004-001-DismountFileSystem_command09
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0004-001-MountFileSystem_command10
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0004-001-DismountFileSystem_command11
-		COMMAND		RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0004-001-RemoveExtension_command12
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0004-001-MountFileSystem_command13
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0004
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0005
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0005
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountExtension() and DismountExtension() test. The test requires a file system extension plug-in.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  AddExtension(), MountExtension(), DismountExtension(), RemoveExtension().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddExtension() providing the file name of a file system extension plug-in as an argument.
-//!				3. Call MountExtension() passing the plug-in extension name and an enabled free drive number with mounted file system.
-//!				4. Call DismountExtension() providing the name of the plug-in extension and the drive number.
-//!				5. Call RemoveExtension() providing the name of the plug-in file system extension as an argument.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Both MountExtension() and DismountExtension() return KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0005-001-AddExtension_command03
-		COMMAND		RFs1	MountExtension		PBASE-F32-RFS-PublicApi-0005-001-MountExtension_command04
-		COMMAND		RFs1	DismountExtension	PBASE-F32-RFS-PublicApi-0005-001-DismountExtension_command05
-		COMMAND		RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0005-001-RemoveExtension_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0005
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0006
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0006
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function MountFileSystemAndScan() test. 
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				The test requires a file system extension plug-in.
-//!				Uses API elements:  AddExtension(), RemoveExtension(), MountFileSystemAndScan(), DismountFileSystem(), FileSystemName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() for a drive where a file system was mounted.
-//!				3. Call DismountFileSystem() providing the file system name and the drive number.
-//!				4. Call AddExtension() providing the file name of a file system extension plug-in as an argument.
-//!				5. Call MountFileSystemAndScan() passing the file system name and drive number. 
-//!					Check that on return aIsMountSuccess parameter is set to ETrue.
-//!				6. Call DismountFileSystem() providing the name of the file system and the drive number.
-//!				7. Call MountFileSystemAndScan() passing the file system name , plug-in extension name and drive number.
-//!					Check that on return aIsMountSuccess parameter is set to ETrue.
-//!				8. Call DismountFileSystem() providing the name of the file system and the drive number.
-//!				9. Call RemoveExtension() providing the name of the file system extension as an argument.
-//!				10. Call MountFileSystem() passing the file system name and the drive number.
-//!				11. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	All MountFileSystemAndScan() calls return KErrNone and set output argument aIsMountSuccess to ETrue on return.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0006-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0006-001-DismountFileSystem_command04
-		COMMAND		RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0006-001-AddExtension_command05
-		COMMAND		RFs1	MountFileSystemAndScan	PBASE-F32-RFS-PublicApi-0006-001-MountFileSystemAndScan_command06
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0006-001-DismountFileSystem_command07
-		COMMAND		RFs1	MountFileSystemAndScan	PBASE-F32-RFS-PublicApi-0006-001-MountFileSystemAndScan_command08
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0006-001-DismountFileSystem_command09
-		COMMAND		RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0006-001-RemoveExtension_command10
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0006-001-MountFileSystem_command11
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0006
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0008
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0008
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function ExtensionName() test. The test requires a file system extension plug-in.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  AddExtension(), MountExtension(), ExtensionName(), RemoveExtension().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddExtension() providing the file name of a file system extension plug-in as an argument.
-//!				3. Call MountExtension() passing the plug-in extension name and an enabled free drive number.
-//!				4. Call ExtensionName() passing the drive number as argument and position 0. Check that aExtensionName parameter 
-//!					is set to the same as a real name of the plug-in extension on return.
-//!				5. Call RemoveExtension() providing the name of the plug-in file system extension as an argument.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	ExtensionName() returns KErrNone and the real name of the extension through the aExtensionName output argument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0008-001-AddExtension_command03
-		COMMAND		RFs1	MountExtension		PBASE-F32-RFS-PublicApi-0008-001-MountExtension_command04
-		COMMAND		RFs1	ExtensionName		PBASE-F32-RFS-PublicApi-0008-001-ExtensionName_command05
-		COMMAND		RFs1	DismountExtension	PBASE-F32-RFS-PublicApi-0008-001-DismountExtension_command06
-		COMMAND		RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0008-001-RemoveExtension_command07
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0008
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0009
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0009
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function RemountDrive() test.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  RemountDrive().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call RemountDrive() passing the drive (with a file system on) and flags 0 as arguments. 
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RemountDrive() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	RemountDrive		PBASE-F32-RFS-PublicApi-0009-001-RemountDrive_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0009
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0010
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0010
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDismount() test.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  NotifyDismount(), MountFileSystem(), DismountFileSystem(), FileSystemName().
-//! @SYMTestActions		1. Create a RFs session and call it's Connect() function.
-//!				2. Create another RFs session and call it's Connect() function.
-//!				3. Call first session's FileSystemName() for a drive where a file system was mounted.
-//!				4. Call second session's NotifyDismount() providing the drive number and mode value EFsDismountRegisterClient and starts waiting for a notification on the background.
-//!				5. Call first session's NotifyDismount() providing the drive number and mode value EFsDismountNotifyClients and starts waiting for a notification on the background.
-//!				6. Call second session's AllowDismount() providing the drive number.
-//!				7. Call first session's MountFileSystem() passing the file system name and the drive number to restore the file system on the drive.
-//!				8. Call Close() of both sessions.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	See actions.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFs	RFs2
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0010-001-FileSystemName_command03
-		COMMAND		RFs2	new
-		COMMAND		RFs2	Connect
-		COMMAND		RFs2	NotifyDismount		PBASE-F32-RFS-PublicApi-0010-001-NotifyDismount_command07
-		COMMAND		RFs1	NotifyDismount		PBASE-F32-RFS-PublicApi-0010-001-NotifyDismount_command09
-		COMMAND		RFs2	AllowDismount		PBASE-F32-RFS-PublicApi-0010-001-AllowDismount_command12
-			OUTSTANDING
-				OUTSTANDING
-		COMMAND		RFs2	Close
-		COMMAND		RFs2	~
-			OUTSTANDING	
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0010-001-MountFileSystem_command17
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0010
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0011
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0011
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDismountCancel(TRequestStatus& aStat) test.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  NotifyDismountCancel(), NotifyDismount(), MountFileSystem(), FileSystemName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() for a drive where a file system was mounted.
-//!				3. Call NotifyDismount() providing the drive number and mode value EFsDismountRegisterClient and starts waiting for a notification on the background.
-//!				4. Call NotifyDismountCancel() providing the same TRequestStatus as in previous call.
-//!				5. Call NotifyDismount() providing the drive number and mode value EFsDismountNotifyClients and starts waiting for a notification on the background.
-//!				6. Call MountFileSystem() passing the file system name and the drive number.
-//!				7. Call Close() of both sessions.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	KErrCancel(-3)
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0011-001-FileSystemName_command03
-		COMMAND	!AsyncError=-3	RFs1	NotifyDismount		PBASE-F32-RFS-PublicApi-0011-001-NotifyDismount_command04
-		COMMAND			RFs1	NotifyDismountCancel	PBASE-F32-RFS-PublicApi-0011-001-NotifyDismountCancel_command05
-		OUTSTANDING	
-		COMMAND			RFs1	NotifyDismount		PBASE-F32-RFS-PublicApi-0011-001-NotifyDismount_command07
-		OUTSTANDING	
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0011-001-MountFileSystem_command09
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0011
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0017
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0017
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function SwapFileSystem() test.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  SwapFileSystem()
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() for a drive where a file system was mounted.
-//!				3. Call DismountFileSystem() providing the file system name and the drive number.
-//!				4. Call MountFileSystem() passing the file system name, an enabled free drive number and ETrue as a synchronization parameter.
-//!				5. Call SwapFileSystem() passing file system name, the same file system name again and the drive number.
-//!				6. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	SwapFileSystem() returns KErrNone. 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0017-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0017-001-DismountFileSystem_command04
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0017-001-MountFileSystem_command05
-		COMMAND		RFs1	SwapFileSystem		PBASE-F32-RFS-PublicApi-0017-001-SwapFileSystem_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0017
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0018
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0018
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDismountCancel() test.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  NotifyDismountCancel(), NotifyDismount(), MountFileSystem(), DismountFileSystem()
-//! @SYMTestActions		1. Create a RFs session and call it's Connect() function.
-//!				2. Call NotifyDismount() providing the drive number and mode value EFsDismountRegisterClient and starts waiting for a notification on the background.
-//!				3. Call NotifyDismount() providing the drive number and mode value EFsDismountNotifyClients and starts waiting for a notification on the background.
-//!				4. Call NotifyDismountCancel() without arguments(for all requests) .
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	KErrCancel(-3)
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	NotifyDismount		PBASE-F32-RFS-PublicApi-0018-001-NotifyDismount_command03
-		COMMAND	!AsyncError=-3	RFs1	NotifyDismount		PBASE-F32-RFS-PublicApi-0018-001-NotifyDismount_command04
-		COMMAND			RFs1	NotifyDismountCancel	PBASE-F32-RFS-PublicApi-0018-001-NotifyDismountCancel_command05
-		OUTSTANDING	
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0018
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0025
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0025
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive) test with incorrect file system name.
-//!				Uses API elements: MountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the incorrect file system name and drive for mounts where nothing mounted.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0025-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0025-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0025-001-MountFileSystem_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0025-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0025
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0026
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0026
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive) test, mount file system where already mounted one.
-//!				Uses API elements: MountFileSystem().
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the file system name and drive for mounts.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0026-001-FileSystemName_command03
-		COMMAND	!Error=-21	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0026-001-MountFileSystem_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0026
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0028
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0028
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive, TBool aIsSync) test with incorrect file system name.
-//!				Uses API elements: MountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the incorrect file system name and drive for mounts where nothing mounted, and ETrue as a synchronization parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0028-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0028-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0028-001-MountFileSystem_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0028-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0028
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0029
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0029
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive, TBool aIsSync) test, mount file system where already mounted one.
-//!				Uses API elements: MountFileSystem().
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the file system name and drive for mounts, and ETrue as a synchronization parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0029-001-FileSystemName_command03
-		COMMAND	!Error=-21	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0029-001-MountFileSystem_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0029
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0031
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0031
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive, TBool aIsSync) test with incorrect file system name.
-//!				Uses API elements: MountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the bad file system name and drive for mounts where nothing mounted, and EFalse as a synchronization parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0031-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0031-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0031-001-MountFileSystem_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0031-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0031
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0032
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0032
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, TInt aDrive, TBool aIsSync) test, mount file system where already mounted one.
-//!				Uses API elements: MountFileSystem().
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the file system name and drive for mounts, and EFalse as a synchronization parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrAccessDenied.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0032-001-FileSystemName_command03
-		COMMAND	!Error=-21	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0032-001-MountFileSystem_command04
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0032
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0034
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0034
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystemAndScan(const TDesC &aFileSystemName, TInt aDrive, TBool &aIsMountSuccess) test with bad file system name.
-//!				Uses API elements: MountFileSystemAndScan().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystemAndScan() providing the bad file system name and drive for mounts (not drive for MMC card).
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound, Filesystem not found
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0034-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0034-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	MountFileSystemAndScan	PBASE-F32-RFS-PublicApi-0034-001-MountFileSystemAndScan_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0034-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0034
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0035
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0035
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystemAndScan(const TDesC &aFileSystemName, TInt aDrive, TBool &aIsMountSuccess) test with mounting file system that not support scanning.
-//!				Uses API elements: MountFileSystemAndScan(), DismountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystemAndScan() providing the file system name and the drive number.
-//!				3. Call DismountFileSystem() providing the file system name and the drive number.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0035-001-FileSystemName_command03
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0035-001-DismountFileSystem_command04
-		COMMAND		RFs1	MountFileSystemAndScan	PBASE-F32-RFS-PublicApi-0035-001-MountFileSystemAndScan_command05
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0035
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0037
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0037
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, const TDesC &aExtensionName, TInt aDrive, TBool aIsSync) test with incorrect file system extension name.
-//!				Uses API elements: MountFileSystem(), DismountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the file system name, drive for mounts, bad name of extension and EFalse as a synchronization parameter.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound, extension not found
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0037-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0037-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0037-001-MountFileSystem_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0037-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0037
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0038
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0038
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystem(const TDesC &aFileSystemName, const TDesC &aExtensionName, TInt aDrive, TBool aIsSync) test with incorrect file system extension name.
-//!				Uses API elements: MountFileSystem(), DismountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystem() providing the file system name, drive for mounts, bad name of extension and ETrue as a synchronization parameter.
-//!				3. Call DismountFileSystem() providing the file system name and the drive for mounts.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound, extension not found
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0038-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0038-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0038-001-MountFileSystem_command05
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0038-001-DismountFileSystem_command06
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0038-001-MountFileSystem_command07
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0038
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0040
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0040
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions DismountFileSystem() test with incorrect file system name.
-//!				Uses API elements: DismountFileSystem().
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call DismountFileSystem() providing the bad file system name and drive for mounts.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound, file system not found.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0040-001-DismountFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0040
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0041
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0041
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions DismountFileSystem() test, dismount file system from drive, where not mounted one.
-//!				Uses API elements: DismountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call DismountFileSystem() providing the file system name and drive for mounts where no file system mounted.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotReady
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0041-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0041-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0041-001-DismountFileSystem_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0041-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0041
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0046
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0046
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountExtension() test, mount file system extension on drive, where no mounted file system.
-//!				Uses API elements: MountExtension(), AddExtension(), RemoveExtension().
-//!				The test requires a file system extension plug-in.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddExtension() providing plug-in extension name.
-//!				3. Call MountExtension() providing plug-in extension name and drive where not mounted file system. 
-//!				4. Call RemoveExtension() providing plug-in extension name.
-//!				5. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNone
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	AddExtension		PBASE-F32-RFS-PublicApi-0046-001-AddExtension_command03
-		COMMAND		RFs1	MountExtension		PBASE-F32-RFS-PublicApi-0046-001-MountExtension_command04
-		COMMAND		RFs1	DismountExtension	PBASE-F32-RFS-PublicApi-0046-001-DismountExtension_command05
-		COMMAND		RFs1	RemoveExtension		PBASE-F32-RFS-PublicApi-0046-001-RemoveExtension_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0046
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0048
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0048
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountExtension() test with incorrect file system extension name.
-//!				Uses API elements: MountExtension().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountExtension() providing bad extension name and drive for mounts where is a mounted file system on.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	MountExtension		PBASE-F32-RFS-PublicApi-0048-001-MountExtension_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0048
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0050
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0050
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions DismountExtension() test with incorrect file system extension name.
-//!				Uses API elements: DismountExtension().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call DismountExtension() providing bad extension name and drive number where is no mounted file system. 
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	DismountExtension	PBASE-F32-RFS-PublicApi-0050-001-DismountExtension_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0050
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0054
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0054
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions ExtensionName() test with large number of position as argument.
-//!				Uses API elements: ExtensionName().
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call ExtensionName() providing drive number and large number as position.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	ExtensionName		PBASE-F32-RFS-PublicApi-0054-001-ExtensionName_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0054
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0059
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0059
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions NotifyDismount() test with drive where no mounted file system.
-//!				Uses API elements: NotifyDismount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call NotifyDismount() providing drive number where is no mounted file system and mode EFsDismountForceDismount and starts waiting for a notification on the background.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNone
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0059-001-FileSystemName_command03
-		COMMAND		RFs1	NotifyDismount		PBASE-F32-RFS-PublicApi-0059-001-NotifyDismount_command04
-		OUTSTANDING	
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0059-001-MountFileSystem_command06
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0059
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0060
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0060
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AllowDismount() test with drive where no mounted file system.
-//!				Uses API elements: AllowDismount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AllowDismount() providing drive number where no mounted file system.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound as nothing has requested to notify the dismount
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	AllowDismount		PBASE-F32-RFS-PublicApi-0060-001-AllowDismount_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0060
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0069
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0069
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SwapFileSystem() test with incorrect file system name as old file system argument.
-//!				Uses API elements: SwapFileSystem().
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SwapFileSystem() providing enabled drive, bad name of old file system name and FAT as new file system name.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	SwapFileSystem		PBASE-F32-RFS-PublicApi-0069-001-SwapFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0069
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0070
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0070
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions SwapFileSystem() test with incorrect file system name as new file system argument.
-//!				Uses API elements: SwapFileSystem().
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SwapFileSystem() providing enabled drive, FAT as old file system name and bad name of new file system name.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-1	RFs1	SwapFileSystem		PBASE-F32-RFS-PublicApi-0070-001-SwapFileSystem_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0070
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0072
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0072
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyDismountCancel(TRequestStatus& aStat) test that tryes to cancel same request twice.
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//!				Uses API elements:  NotifyDismountCancel(), NotifyDismount(), MountFileSystem(), FileSystemName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() for a drive where a file system was mounted.
-//!				3. Call NotifyDismount() providing the drive number and mode value EFsDismountRegisterClient and starts waiting for a notification on the background.
-//!				4. Call NotifyDismountCancel() providing the same TRequestStatus as in previous call.
-//!				5. Call NotifyDismountCancel() providing the same TRequestStatus as in previous call.
-//!				6. Call Close() of both sessions.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Request status is set to KErrCancel(-3) and second NotifyDismountCancel() doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0072-001-FileSystemName_command03
-		COMMAND	!AsyncError=-3	RFs1	NotifyDismount		PBASE-F32-RFS-PublicApi-0072-001-NotifyDismount_command04
-		COMMAND			RFs1	NotifyDismountCancel	PBASE-F32-RFS-PublicApi-0072-001-NotifyDismountCancel_command05
-		COMMAND			RFs1	NotifyDismountCancel	PBASE-F32-RFS-PublicApi-0072-001-NotifyDismountCancel_command06
-		OUTSTANDING	
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0072
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0075
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0075
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function NotifyChange(TNotifyType aType, TRequestStatus &aStat, const TDesC &aPathName) test with notify types ENotifyAll.
-//!				Uses API elements:  NotifyChange(), FileSystemName(), DismountFileSystem(), MountFileSystem().
-//!				The test assumes that the tested file system is already mounted onto the tested drive.
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call FileSystemName() passing the drive number as argument.
-//!				3. Call NotifyChange() passing ENotifyAll as parameter and starts waiting for a notification on the background.
-//!				4. Call DismountFileSystem() passing the drive number as argument.
-//!				5. Call NotifyChange() passing ENotifyAll as parameter and starts waiting for a notification on the background.
-//!				6. Call MountFileSystem() passing the drive number as argument.
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Doesn't cause panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0075-001-FileSystemName_command03
-		COMMAND		RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-0075-001-NotifyChange_command04
-		COMMAND		RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0075-001-DismountFileSystem_command05
-		OUTSTANDING	
-		COMMAND		RFs1	NotifyChange		PBASE-F32-RFS-PublicApi-0075-001-NotifyChange_command07
-		COMMAND		RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0075-001-MountFileSystem_command08
-		OUTSTANDING	
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0075
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0014
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0014
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function AddCompositeMount() test.
-//!				Uses API elements:  AddCompositeMount()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call AddCompositeMount() providing a file system name, c-drive as a local drive, and an empty drive as a composite drive and EFalse as a synchronization parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Check that AddCompositeMount() returns KErrNotSupported (-5).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0014-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0014-001-DismountFileSystem_command04
-		COMMAND	!Error=-5	RFs1	AddCompositeMount	PBASE-F32-RFS-PublicApi-0014-001-AddCompositeMount_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0014-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0014
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0036
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0036
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions MountFileSystemAndScan(const TDesC &aFileSystemName, const TDesC &aExtensionName, TInt aDrive, TBool &aIsMountSuccess) test with incorrect file system extension name.
-//!				Uses API elements: MountFileSystemAndScan(), DismountFileSystem().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call MountFileSystemAndScan() providing the file system name (Fat) and drive for mounts, and bad name of extension.
-//!				3. Call DismountFileSystem() providing the file system name and the drive for mounts.
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound, extension not found
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0036-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0036-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	MountFileSystemAndScan	PBASE-F32-RFS-PublicApi-0036-001-MountFileSystemAndScan_command05
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0036-001-DismountFileSystem_command06
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0036-001-MountFileSystem_command07
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0036
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0043
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0043
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions FileSystemName() test, get file system name from drive where no mounted file system.
-//!				Uses API elements: FileSystemName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() providing a drive number where is no mounted file system.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0043-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0043-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0043-001-FileSystemName_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0043-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0043
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0063
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0063
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddCompositeMount() test with incorrect file system name in asynchronous mode.
-//!				Uses API elements: AddCompositeMount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddCompositeMount() providing C-drive as local drive, an empty drive as a composite drive argument, bad filesystem name and false as synchronous as a parameters.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0063-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0063-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	AddCompositeMount	PBASE-F32-RFS-PublicApi-0063-001-AddCompositeMount_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0063-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0063
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0064
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0064
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddCompositeMount() test with incorrect file system name in synchronous mode.
-//!				Uses API elements: AddCompositeMount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddCompositeMount() providing drive number as local drive, drive for mount, bad filesystem name and true as synchronous as a parameters.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotFound
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0064-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0064-001-DismountFileSystem_command04
-		COMMAND	!Error=-1	RFs1	AddCompositeMount	PBASE-F32-RFS-PublicApi-0064-001-AddCompositeMount_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0064-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0064
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0065
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0065
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddCompositeMount() test with negative drive number for local drive argument in asynchronous mode.
-//!				Uses API elements: AddCompositeMount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddCompositeMount() providing negative drive number as local drive, drive for mounts, "FAT" filesystem name and FALSE as synchronous as a parameters.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotSupported
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0065-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0065-001-DismountFileSystem_command04
-		COMMAND	!Error=-5	RFs1	AddCompositeMount	PBASE-F32-RFS-PublicApi-0065-001-AddCompositeMount_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0065-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0065
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0066
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0066
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddCompositeMount() test with negative drive number for composite drive argument in asynchronous mode.
-//!				Uses API elements: AddCompositeMount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddCompositeMount() providing C-drive as a local drive, negative drive number as composite drive, "FAT" filesystem name and FALSE as synchronous as a parameters.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotSupported
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-5	RFs1	AddCompositeMount	PBASE-F32-RFS-PublicApi-0066-001-AddCompositeMount_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0066
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0067
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0067
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddCompositeMount() test with negative drive number for local drive argument in synchronous mode.
-//!				Uses API elements: AddCompositeMount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddCompositeMount() providing negative drive number as local drive, drive for mounts, "FAT" filesystem name and TRUE as synchronous as a parameters.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotSupported
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0067-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem	PBASE-F32-RFS-PublicApi-0067-001-DismountFileSystem_command04
-		COMMAND	!Error=-5	RFs1	AddCompositeMount	PBASE-F32-RFS-PublicApi-0067-001-AddCompositeMount_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0067-001-MountFileSystem_command06
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0067
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0068
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0068
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Functions AddCompositeMount() test with negative drive number for composite drive argument in synchronous mode.
-//!				Uses API elements: AddCompositeMount().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call AddCompositeMount() providing drive number as local drive, negative drive number as composite drive, "FAT" filesystem name and TRUE as synchronous as a parameters.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	KErrNotSupported
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-5	RFs1	AddCompositeMount	PBASE-F32-RFS-PublicApi-0068-001-AddCompositeMount_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0068
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0074
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0074
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function FileSystemSubType() test with non mounted drive.
-//!				Uses API elements: FileSystemSubType().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemSubType() passing the drive number where is not mounted file system as argument.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Return KErrNotReady (-18).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0074-001-FileSystemName_command03
-		COMMAND			RFs1	DismountFileSystem		PBASE-F32-RFS-PublicApi-0074-001-DismountFileSystem_command04
-		COMMAND	!Error=-18	RFs1	FileSystemSubType		PBASE-F32-RFS-PublicApi-0074-001-FileSystemSubType_command05
-		COMMAND			RFs1	MountFileSystem		PBASE-F32-RFS-PublicApi-0074-001-MountFileSystem_command06
-		COMMAND			RFs1	Close	
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0074
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-PublicApi-OS.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,190 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		PBASE-F32-RFS-PublicApi-OS
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Anton Grober, Oleg Kunetsov
-//! 	@SYMScriptDescription		The test script contains API tests for RFs functions that perform operations on a C-drive.
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1036
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1036
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		LockDrive() function test. Passing C drive index as parameter.
-//!				Uses API elements: LockDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive()  passing C drive as drive number.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function LockDrive() returns KErrNotSupported.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-OS.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-5	RFs1	LockDrive		PBASE-F32-RFS-PublicApi-1036-001-LockDrive_command03
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1036
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1061
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1061
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ScanDrive() test. Passing C drive's path as parameter.
-//!				Uses API elements: ScanDrive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ScanDrive() passing C drive's path as path parameter.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ScanDrive() returns KErrInUse.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-OS.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-14	RFs1	ScanDrive		PBASE-F32-RFS-PublicApi-1061-001-ScanDrive_command03
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1061
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3010
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3010
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function ResourceCountMarkStart(), ResourceCount(), ResourceCountMarkEnd() test.
-//!				Uses API elements: ResourceCountMarkStart(), ResourceCount(), ResourceCountMarkEnd().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ResourceCountMarkStart().
-//!				3. Call RFile's Open() and pass "\base\T_Sfsrv\test.txt" as parameter.
-//!				4. Call ResourceCount() and check that it returns 1.
-//!				5. Call CloseFile().
-//!				6. Call ResourceCountMarkEnd().
-//!				7. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Resource count returns correct number of opened resources.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-OS.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	ResourceCountMarkStart
-		COMMAND		RFile1	new		
-		COMMAND		RFile1	Open		PBASE-F32-RFS-PublicApi-3010-001-Open_command06
-		COMMAND		RFs1	ResourceCount		PBASE-F32-RFS-PublicApi-3010-001-ResourceCount_command08
-		COMMAND		RFile1	Close		
-		COMMAND		RFile1	~		
-		COMMAND		RFs1	ResourceCountMarkEnd
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3010
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3122
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3122
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function ResourceCountMarkEnd() test, where number of opened resources is not equals to the number of closed resources.
-//!				Uses API elements: Open(), ResourceCountMarkEnd().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ResourceCountMarkStart().
-//!				3. Call RFile's Open() passing "\base\T_Sfsrv\test.txt" as parameter and EFileRead as the mode in which the file is opened.
-//!				4. Call ResourceCountMarkEnd().
-//!				5. Call Close() for opened file.
-//!				6. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Panic 2 (CSessionFs)
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-OS.ini 
-		CREATE_OBJECT	RFs	RFs1
-		CREATE_OBJECT	RFile	RFile1
-		COMMAND		RFs1	new		
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	ResourceCountMarkStart
-		COMMAND		RFile1	new	
-		COMMAND		RFile1	Open		PBASE-F32-RFS-PublicApi-3122-001-Open_command06
-		COMMAND		RFs1	ResourceCountMarkEnd
-		COMMAND		RFile1	Close		
-		COMMAND		RFile1	~		
-		COMMAND		RFs1	Close		
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	!PanicCode=2 !PanicString="CSessionFs"
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3122
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1088
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1088
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Setting SystemDrive with various drives using SetSystemDrive()
-//!				Uses API elements: SetSystemDrive().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call SetSystemDrive() passing the default drive number as argument.
-//!				3. Call SetSystemDrive() passing different drive letters (should all fail with KErrAlreadyexists)
-//!				4. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	RFs::SetSystemDrive() is supposed to be called only once when the device boots.It will set with the valid drive for the first time.
-//!                         The subsequent call to SetSystemDrive() will result in -11(KErrAlready Exists). If the drive attribute is not valid
-//!                         it results in KernelPanic. Without TCB capability will return KErrPermissionDenied (-46)
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv 	\base\PBASE-F32-RFS-PublicApi-OS.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new		
-		COMMAND			RFs1	Connect
-		COMMAND			RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_command03
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_0
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_1
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_2
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_3
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_4
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_5
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_6
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_7
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_8
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_9
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_10
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_11
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_12
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_13
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_14
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_15
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_16
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_17
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_18
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_19
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_20
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_21
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_22
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_23
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_24
-		COMMAND	!Error=-11	RFs1	SetSystemDrive		PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_25
-		COMMAND			RFs1	Close		
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1088
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RFS-PublicApi-ROM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,341 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-RFS-Mounts-PublicApi-ROM
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Oleg Kuznetsov
-//! @SYMScriptDescription	The test script contains API tests for the functions listed in the description of PBASE-F32-RFS-Mounts-PublicApi.script 
-//!				file that perform operations on a ROM.
-
-
-LOAD_SUITE	T_Sfsrv
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0007
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0007
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function FileSystemName() test with ROM Drive.
-//!				Uses API elements: FileSystemName().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemName() passing the ROM drive number as argument. Check that aName parameter is set to "Win32" under WINSCW and to "rofs" under ARMv5.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	FileSystemName() returns KErrNone and the real name of the file system through the aName output argument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemName		PBASE-F32-RFS-PublicApi-0007-001-FileSystemName_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0007
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1006
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1006
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		IsValidDrive() passing a value between 0 and 26 as parameter.
-//!				Uses API elements: IsValidDrive().
-//! @SYMTestActions		1. Call IsValidDrive() passing  some mounted drive as a parameter(in this particular case it's tested with ROM-Drive's index as parameter).
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function IsValidDrive() returns ETrue.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	IsValidDrive		PBASE-F32-RFS-PublicApi-1006-001-IsValidDrive_command02
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1006
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1016
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1016
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Golovko 
-//! @SYMCreationDate		2/10/2006 
-//! @SYMTestCaseDesc		Drive() function test. Passing exisiting drive index as parameter.
-//!				Uses API elements: Drive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Drive() passing TDriveInfo reference as first parameter and ROM-drive as second parameter.					
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function returns KErrNone and iType field of TDriveInfo equals EMediaRom.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Drive		PBASE-F32-RFS-PublicApi-1016-001-Drive_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1016
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1040
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1040
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		LockDrive() function test. Passing ROM drive index as parameter.
-//!				Uses API elements: LockDrive().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call LockDrive() passing ROM drive's number.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function LockDrive() returns KErrNotSupported.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-5	RFs1	LockDrive		PBASE-F32-RFS-PublicApi-1040-001-LockDrive_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1040
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1042
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1042
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		02/10/2006 
-//! @SYMTestCaseDesc		ReserveDriveSpace() function test. Passing non-writeable drive number as parameter.
-//!				Uses API elements: ReserveDriveSpace().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ReserveDriveSpace() passing non-writeable drives number as drive number parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ReserveDriveSpace() returns KErrDiskFull.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-26	RFs1	ReserveDriveSpace		PBASE-F32-RFS-PublicApi-1042-001-ReserveDriveSpace_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1042
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1060
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1060
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		24/01/2007 
-//! @SYMTestCaseDesc		Subst() test passing a mounted drive as paramater.
-//!				Uses API elements: Subst().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call Subst() passing ROM-drive index and some path as second parameter.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function Subst() returns empty string through reference.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	Subst		PBASE-F32-RFS-PublicApi-1060-001-Subst_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1060
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1066
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1066
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ErasePassword() test. Passing drive's number which doesn't support locking.
-//!				Uses API elements: ErasePassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ErasePassword() passing some drive's number which doesn't supported locking.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ErasePassword() returns KErrNotSupported.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-5	RFs1	ErasePassword		PBASE-F32-RFS-PublicApi-1066-001-ErasePassword_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1066
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1071
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1071
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		ClearPassword() test.
-//!				Uses API elements: ClearPassword()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call ClearPassword() passing some drive's number which doesn't supported locking.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function ClearPassword() returns KErrNotSupported.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-5	RFs1	ClearPassword		PBASE-F32-RFS-PublicApi-1071-001-ClearPassword_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1071
-
-
-START_TESTCASE			PBASE-F32-RFS-PublicApi-1077
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1077
-//! @SYMAPI			RFs
-//! @SYMCreationDate		22/08/2006 
-//! @SYMTestCaseDesc		UnlockDrive() test. Testing with drive doesn't support locking.
-//!				Uses API elements: UnlockDrive()
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call UnlockDrive() passing some drive's number which doesn't supported locking and 'test' as password.	
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		High
-//! @SYMTestExpectedResults	Function UnlockDrive() returns KErrNotSupported.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-5	RFs1	UnlockDrive		PBASE-F32-RFS-PublicApi-1077-001-UnlockDrive_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-RFS-PublicApi-1077
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-1090
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-1090
-//! @SYMAPI			RFs
-//! @SYMAuthor			Anton Grober 
-//! @SYMCreationDate		8/03/2007 
-//! @SYMTestCaseDesc		SetSubst() functions test. Passing ROM drive index as second parameter and existing path to folder as second parameter.
-//!				Uses API elements:  SetSubst().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call SetSubst() passing "ROMDriveTestPath:\base\" as a first parameter and non-mounted valid drive's number as a drive number.
-//!				3. Check that function returned KErrNone.	
-//!				4. Call SetSubst() passing ""(empty descriptor) as a first parameter and non-mounted valid drive's number as a drive number. This will unsubst the substed.
-//!				5. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function SetSubst() returns KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1090-001-SetSubst_command03
-		COMMAND		RFs1	SetSubst		PBASE-F32-RFS-PublicApi-1090-001-SetSubst_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-1090
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3012
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3012
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function IsRomAddress() test.
-//!				Uses API elements: IsFileInRom(), IsRomAddress().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call IsFileInRom(), get address of "<ROMDriveChar>:\base\T_Sfsrv\test_rom.txt"
-//!				3. Call IsRomAddress(), pass address that was got by IsFileInRom as parameter and check that file in rom.
-//!				4. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	File is located in rom.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	IsFileInRom		PBASE-F32-RFS-PublicApi-3012-001-IsFileInRom_command03
-		COMMAND		RFs1	IsRomAddress		PBASE-F32-RFS-PublicApi-3012-001-IsRomAddress_command04
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3012
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-0019
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-0019
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function FileSystemSubType() test with ROM drive.
-//!				Uses API elements: FileSystemSubType().
-//! @SYMTestActions		1. Call Connect() method.
-//!				2. Call FileSystemSubType() passing the ROM drive number as argument. Check that aName parameter is set to "Win32" under WINSCW and to "Rom" under ARMv5.
-//!				3. Call Close() method.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	FileSystemSubType() returns KErrNone and the real sub type name of the file system through the aName output argument.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND		RFs1	new
-		COMMAND		RFs1	Connect
-		COMMAND		RFs1	FileSystemSubType		PBASE-F32-RFS-PublicApi-0019-001-FileSystemSubType_command03
-		COMMAND		RFs1	Close
-		COMMAND		RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-0019
-
-
-START_TESTCASE 			PBASE-F32-RFS-PublicApi-3016
-//! @SYMTestCaseID		PBASE-F32-RFS-PublicApi-3016
-//! @SYMAPI			RFs
-//! @SYMTestCaseDesc		Function InitialisePropertiesFile() test.
-//!				Uses API elements: InitialisePropertiesFile().
-//! @SYMTestActions		1. Call Connect().
-//!				2. Call InitialisePropertiesFile() and pass "<ROMDriveChar>:\base\T_Sfsrv\test_rom.txt" as argument.
-//!				3. Call Close().
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	KErrPermissionDenied, because can only be called from the ESTART process.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_Sfsrv	\base\PBASE-F32-RFS-PublicApi-ROM.ini 
-		CREATE_OBJECT	RFs	RFs1
-		COMMAND			RFs1	new
-		COMMAND			RFs1	Connect
-		COMMAND	!Error=-46	RFs1	InitialisePropertiesFile		PBASE-F32-RFS-PublicApi-3016-001-InitialisePropertiesFile_command03
-		COMMAND			RFs1	Close
-		COMMAND			RFs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RFS-PublicApi-3016
-
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RawDisk-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-ram
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! 	@SYMScriptAuthor 		Alvar Udras, Runno Sgirka
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of RRawDisk class:
-//!	TInt Open(RFs &aFs, TInt aDrive);
-//!	void Close();
-
-
-LOAD_SUITE	t_sfsrv
-DELAY 5000
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1003
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1003
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Open() test. Open a disk channel, passing an invalid drive letter value.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing an fileserver session,
-//!				   -1 as parameters.
-//!				4. Call Close() method to close the channel.
-//!				5. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -6 (KErrArgument).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			rawdisk1	new
-		COMMAND	!Error=-6	rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-1003-001-Open_command05
-		COMMAND			rawdisk1	Close
-		COMMAND			rawdisk1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1003
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1004
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1004
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Close() test. Call Close() without opening a disk channel first.
-//!				Uses API elements: Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Close() method to close the channel.
-//!				4. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Close() method call is completed without errors.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		rawdisk1	new
-		COMMAND		rawdisk1	Close
-		COMMAND		rawdisk1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1004
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-RawDisk-PublicApi-REM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,391 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! 	@file
-//! 	@SYMTestSuiteName		pbase-f32-sfsrv-publicapi-rem
-//!	@SYMScriptTestEnvironment	This test script requires a basic ROM and a MMC card (128 MB recommended, not tested above that).
-//! 	@SYMScriptAuthor 		Alvar Udras, Runno Sgirka
-//! 	@SYMScriptDescription		The test script contains API tests for the following functions of RRawDisk class:
-//!	TInt Open(RFs &aFs, TInt aDrive);
-//!	void Close();
-//!	TInt Read(TInt64 aPos, TDes8 &aDes);
-//!	TInt Write(TInt64 aPos, TDesC8 &aDes);
-//!					The tests are containing risk, e.g. Write() method call can corrupt the boot sector or
-//!					non-writable sector of the disc, which may corrupt the whole disk forever.
-
-
-LOAD_SUITE	t_sfsrv
-DELAY 5000
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-0001
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Functions Open() and Close() test. Open a disk channel and close it.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Call Close() method to close the channel.
-//!				5. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call is completed returning KErrNone. The Close() method call is completed without errors. 
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		rawdisk1	new
-		COMMAND		rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-0001-001-Open_command05
-		COMMAND		rawdisk1	Close
-		COMMAND		rawdisk1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-0001
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-0002
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-0002
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Write() and Read() test. Open a disk channel, write to the disc, verify it by reading and close the channel.
-//!				Uses API elements: Open(), Write(), Read(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Call Write(TInt64 aPos, TDes8 &aDes) method passing position 1024 and string 'Hello Big World!' to write
-//!				   as parameters.
-//!				5. Call Read(TInt64 aPos, TDes8 &aDes) method passing position 1024 and string 'Hello Big World!' for 
-//!				   verification as parameters.
-//!				6. Call Close() method to close the disk.
-//!				7. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Read() and Write() method calls are completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		rawdisk1	new
-		COMMAND		rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-0002-001-Open_command05
-		COMMAND		rawdisk1	Write		PBASE-F32-RawDisk-PublicApi-0002-001-Write_command06
-		COMMAND		rawdisk1	Read		PBASE-F32-RawDisk-PublicApi-0002-001-Read_command07
-		COMMAND		rawdisk1	Close
-		COMMAND		rawdisk1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-0002
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-0003
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-0003
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Write() and Read() test. Open a disk channel, write and read an empty string and close the channel.
-//!				Uses API elements: Open(), Write(), Read(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Call Write(TInt64 aPos, TDes8 &aDes) method passing position 1024 and empty string to write
-//!				   as parameters.
-//!				5. Call Read(TInt64 aPos, TDes8 &aDes) method passing position 1024 and empty string for 
-//!				   verification as parameters.
-//!				6. Call Close() method to close the disk.
-//!				7. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Read() and Write() method calls are completed returning KErrNone.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		rawdisk1	new
-		COMMAND		rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-0003-001-Open_command05
-		COMMAND		rawdisk1	Write		PBASE-F32-RawDisk-PublicApi-0003-001-Write_command06
-		COMMAND		rawdisk1	Read		PBASE-F32-RawDisk-PublicApi-0003-001-Read_command07
-		COMMAND		rawdisk1	Close
-		COMMAND		rawdisk1	~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-0003
-
-
-// 	************************
-//	***  NEGATIVE TESTS  ***
-// 	************************
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1007
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1007
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Test that checks that no other resources can access the disk while direct access to it is in effect.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Create a RFile instance, passing fileserver session, EFileShareAny and {removable drive path}test03.txt as parameters.
-//!				5. Close the RFile instance.
-//!				6. Call Close() method to close the channel.
-//!				7. Format the disk for future usage.
-//!				8. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The RFormat::Open() method call returns error -14 (KErrInUse).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		CREATE_OBJECT	RFile	file
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			rawdisk1	new
-		COMMAND			rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-1007-001-Open_command05
-		COMMAND			file		new
-		COMMAND	!Error=-14	file		Create		PBASE-F32-RawDisk-PublicApi-1007-001-Create_command07
-		COMMAND			file		Close
-		COMMAND			file		~	
-		COMMAND			rawdisk1	Close
-		COMMAND			rawdisk1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1007
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1008
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1008
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Open() test. Call Open() after opening a resource on the disk.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Open an RFormat instance, passing fileserver session, removable drive and EHighDensity as parameters.
-//!				4. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				5. Call Close() method to close the channel.
-//!				6. Close the RFormat instance.
-//!				7. Format the disk for future usage.
-//!				8. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Open() method call returns error -14 (KErrInUse).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			format1		new
-		COMMAND			format1		Open		PBASE-F32-RawDisk-PublicApi-1008-001-Open_command05
-		COMMAND			rawdisk1	new
-		COMMAND	!Error=-14	rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-1008-001-Open_command07		
-		COMMAND			format1		Close
-		COMMAND			format1		~	
-		COMMAND			rawdisk1	Close
-		COMMAND			rawdisk1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1008
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1009
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1009
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Test that checks that calling Close() allows other resources to access the disk.
-//!				Uses API elements: Open(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Call Close() method to close the channel.
-//!				5. Open an RFormat instance, passing fileserver session, removable drive and EHighDensity as parameters.
-//!				6. Close the RFormat instance.
-//!				7. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The RFormat instance can access the disk without errors.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND		rfs1	new
-		COMMAND		rfs1	Connect
-		COMMAND		rawdisk1	new
-		COMMAND		rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-1009-001-Open_command05		
-		COMMAND		rawdisk1	Close
-		COMMAND		rawdisk1	~
-		COMMAND		format1		new
-		COMMAND		format1		Open		PBASE-F32-RawDisk-PublicApi-1009-001-Open_command09
-		COMMAND		format1		Close
-		COMMAND		format1		~
-		COMMAND		rfs1	Close
-		COMMAND		rfs1	~		
-	END_TEST_BLOCK
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1009
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1010
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1010
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Write() test. Open a disk channel, write to the disc, while starting writing from a negative position.
-//!				Uses API elements: Open(), Write(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Call Write(TInt64 aPos, TDes8 &aDes) method passing -1 as position, string 'Hello World!' to write as parameters.
-//!				6. Call Close() method to close the disk.
-//!				7. Format the disk for future usage.
-//!				8. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Write() method call returns error -6 (KErrArgument).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			rawdisk1	new
-		COMMAND			rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-1010-001-Open_command05
-		COMMAND	!Error=-6	rawdisk1	Write		PBASE-F32-RawDisk-PublicApi-1010-001-Write_command06
-		COMMAND			rawdisk1	Close
-		COMMAND			rawdisk1	~
-		COMMAND			format1		new
-		COMMAND			format1		Open		PBASE-F32-RawDisk-PublicApi-1010-001-Open_command10
-		COMMAND			format1		Next
-		COMMAND			format1		Close
-		COMMAND			format1		~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1010
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1011
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1011
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Write() test. Open a disk channel, write to the disc, while starting writing from an out of range position.
-//!				Uses API elements: Open(), Write(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Call Write(TInt64 aPos, TDes8 &aDes) method passing 10000000 as position, string 'Hello World!' as parameters.
-//!				6. Call Close() method to close the disk.
-//!				7. Format the disk for future usage.
-//!				8. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Write() method call returns error -20 (KErrCorrupt).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		CREATE_OBJECT	RFormat	format1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			rawdisk1	new
-		COMMAND			rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-1011-001-Open_command05
-		COMMAND	!Error=-20	rawdisk1	Write		PBASE-F32-RawDisk-PublicApi-1011-001-Write_command06
-		COMMAND			rawdisk1	Close
-		COMMAND			rawdisk1	~
-		COMMAND			format1		new
-		COMMAND			format1		Open		PBASE-F32-RawDisk-PublicApi-1011-001-Open_command10
-		COMMAND			format1		Next
-		COMMAND			format1		Close
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1011
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1012
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1012
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Read() test. Open a disk channel, read from disc, starting reading from a negative position, and close the channel.
-//!				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Call Read(TInt64 aPos, TDes8 &aDes) method passing -1 as position, string 'Hello World!' as parameters.
-//!				5. Call Close() method to close the disk.
-//!				6. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Read() method call returns error -6 (KErrArgument).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			rawdisk1	new
-		COMMAND			rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-1012-001-Open_command05
-		COMMAND	!Error=-6	rawdisk1	Read		PBASE-F32-RawDisk-PublicApi-1012-001-Read_command06
-		COMMAND			rawdisk1	Close
-		COMMAND			rawdisk1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1012
-
-
-START_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1013
-//! @SYMTestCaseID		PBASE-F32-RawDisk-PublicApi-1013
-//! @SYMAPI			RRawDisk
-//! @SYMTestCaseDesc		Function Read() test. Open a disk channel, read from disc, starting reading from an out of range position,
-//!				and close the channel.
-//!				Uses API elements: Open(), Read(), Close().
-//! @SYMTestActions		1. Create a RFs session.
-//!				2. Connect the RFs session.
-//!				3. Call Open(RFs &aFs, TInt aDrive) method to open a direct access channel to disk, passing fileserver session, removable
-//!				   drive as parameters.
-//!				4. Call Read(TInt64 aPos, TDes8 &aDes) method passing 10000000 as position, string 'Hello World!' as parameters.
-//!				5. Call Close() method to close the disk.
-//!				6. Close the RFs session.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	The Read() method call returns error -20 (KErrCorrupt).
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	t_sfsrv	\base\PBASE-F32-RawDisk-PublicApi.ini 
-		CREATE_OBJECT	RFs	rfs1
-		CREATE_OBJECT	RRawDisk	rawdisk1
-		COMMAND			rfs1	new
-		COMMAND			rfs1	Connect
-		COMMAND			rawdisk1	new
-		COMMAND			rawdisk1	Open		PBASE-F32-RawDisk-PublicApi-1013-001-Open_command05
-		COMMAND	!Error=-20	rawdisk1	Read		PBASE-F32-RawDisk-PublicApi-1013-001-Read_command06
-		COMMAND			rawdisk1	Close
-		COMMAND			rawdisk1	~
-		COMMAND			rfs1	Close
-		COMMAND			rfs1	~		
-	END_TEST_BLOCK	
-END_TESTCASE 			PBASE-F32-RawDisk-PublicApi-1013
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-SfSrv-PublicApi.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-Sfsrv-PublicApi
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-/////////////////////////////////////////////////////////////////////
-// PBASE-F32-Sfsrv-PublicApi.script
-//
-// Tests all public elements of the RFs class and other classes.
-// as a means of confidence that the APIs work as expected.
-// 
-// The purpose is to provide a regression test suite of PublishedAll APIs for RFs, and other classes.
-// Negative testing is performed to confirm that correct errors are returned when incorrect parameters are given.
-// The tests are fully automated.
-/////////////////////////////////////////////////////////////////////
-
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-Sfsrv-publicapi-ram.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-Sfsrv-publicapi-rem.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-Sfsrv-publicapi-rom.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-Sfsrv-publicapi-any.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-Sfsrv-publicapi-os.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-Sfsrv-publicapi-nand.script
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-Sfsrv-PublicApi-ANY
-//! @SYMScriptTestEnvironment	This test script requires a basic ANY.
-/////////////////////////////////////////////////////////////////////
-// PBASE-F32-Sfsrv-PublicApi-ANY.script
-//
-// Tests all public elements of the SfSrv class
-// as a means of confidence that the APIs work as expected.
-// 
-// The purpose is to provide a regression test suite of PublishedAll APIs for SfSrv.
-// Negative testing is performed to confirm that correct errors are returned when incorrect parameters are given.
-// The tests are fully automated.
-/////////////////////////////////////////////////////////////////////
-
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-Parse-PublicApi-ANY.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-ParsePtr-PublicApi-ANY.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-ParsePtrC-PublicApi-ANY.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-VolumeInfo-PublicApi-ANY.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-DriveUnit-PublicApi-ANY.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-mounts-publicapi-any.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-drives-publicapi-any.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-files-publicapi-any.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-misc-publicapi-any.script
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-NAND.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-Sfsrv-PublicApi-NAND
-//! @SYMScriptTestEnvironment	This test script requires a NAND memory.
-/////////////////////////////////////////////////////////////////////
-// PBASE-F32-Sfsrv-PublicApi-NAND.script
-//
-// Tests all public elements of the SfSrv class
-// as a means of confidence that the APIs work as expected.
-// 
-// The purpose is to provide a regression test suite of PublishedAll APIs for SfSrv.
-// Negative testing is performed to confirm that correct errors are returned when incorrect parameters are given.
-// The tests are fully automated.
-/////////////////////////////////////////////////////////////////////
-
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-File-PublicApi-NAND.script
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-OS.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-Sfsrv-PublicApi-OS
-//! @SYMScriptTestEnvironment	This test script requires a basic OS.
-/////////////////////////////////////////////////////////////////////
-// PBASE-F32-Sfsrv-PublicApi-OS.script
-//
-// Tests all public elements of the SfSrv class
-// as a means of confidence that the APIs work as expected.
-// 
-// The purpose is to provide a regression test suite of PublishedAll APIs for SfSrv.
-// Negative testing is performed to confirm that correct errors are returned when incorrect parameters are given.
-// The tests are fully automated.
-/////////////////////////////////////////////////////////////////////
-
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-FileMan-PublicApi-OS.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-FindFile-PublicApi-OS.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-publicapi-os.script
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-Sfsrv-PublicApi-RAM
-//! @SYMScriptTestEnvironment	This test script requires a basic RAM.
-/////////////////////////////////////////////////////////////////////
-// PBASE-F32-Sfsrv-PublicApi-RAM.script
-//
-// Tests all public elements of the SfSrv class
-// as a means of confidence that the APIs work as expected.
-// 
-// The purpose is to provide a regression test suite of PublishedAll APIs for SfSrv.
-// Negative testing is performed to confirm that correct errors are returned when incorrect parameters are given.
-// The tests are fully automated.
-/////////////////////////////////////////////////////////////////////
-
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-Dir-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-DirScan-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-Entry-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-EntryArray-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-RDir-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-File-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-FileMan-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-FileText-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-OpenFileScan-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-RawDisk-PublicApi-RAM.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-drives-publicapi-ram.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-files-publicapi-ram.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-misc-publicapi-ram.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-mounts-publicapi-ram.script
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-REM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-Sfsrv-PublicApi-REM
-//! @SYMScriptTestEnvironment	This test script requires a basic REM.
-/////////////////////////////////////////////////////////////////////
-// PBASE-F32-Sfsrv-PublicApi-REM.script
-//
-// Tests all public elements of the SfSrv class
-// as a means of confidence that the APIs work as expected.
-// 
-// The purpose is to provide a regression test suite of PublishedAll APIs for SfSrv.
-// Negative testing is performed to confirm that correct errors are returned when incorrect parameters are given.
-// The tests are fully automated.
-/////////////////////////////////////////////////////////////////////
-
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-FindFile-PublicApi-REM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-REM.script
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-RawDisk-PublicApi-REM.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-drives-publicapi-rem.script
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-Sfsrv-PublicApi-ROM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//! @file
-//! @SYMTestSuiteName		PBASE-F32-Sfsrv-PublicApi-ROM
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-/////////////////////////////////////////////////////////////////////
-// PBASE-F32-Sfsrv-PublicApi-ROM.script
-//
-// Tests all public elements of the SfSrv class
-// as a means of confidence that the APIs work as expected.
-// 
-// The purpose is to provide a regression test suite of PublishedAll APIs for SfSrv.
-// Negative testing is performed to confirm that correct errors are returned when incorrect parameters are given.
-// The tests are fully automated.
-/////////////////////////////////////////////////////////////////////
-
-RUN_SCRIPT	${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-ROM.script
-RUN_SCRIPT	${SYSDRIVE}\base\pbase-f32-rfs-publicapi-rom.script
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/PBASE-F32-VolumeInfo-PublicApi-ANY.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-//!	@file
-//!	@SYMTestSuiteName			pbase-f32-sfsrv-publicapi-any
-//!	@SYMScriptTestEnvironment		This test script requires a basic ROM.
-//!	@SYMScriptAuthor 			Dmitri Trofimov
-//!	@SYMScriptCreationDate			17/12/2006 
-//!	@SYMScriptDescription			The test script contains API tests for the following functions of TVolumeInfo class:
-//!	TVolumeInfo();
-
-
-LOAD_SUITE	T_SfSrv
-//DELAY		5000
-
-
-START_TESTCASE 			PBASE-F32-VolumeInfo-PublicApi-0001
-//! @SYMTestCaseID		PBASE-F32-VolumeInfo-PublicApi-0001
-//! @SYMAPI			TVolumeInfo
-//! @SYMTestCaseDesc		TVolumeInfo() test.
-//!				Uses API elements: TVolumeInfo()
-//! @SYMTestActions		1. Create TVolumeInfo object.
-//!				2. Delete TVolumeInfo object.
-//!
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults	Function does not leave nor panic.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	100	T_SfSrv	\base\PBASE-F32-VolumeInfo-PublicApi.ini
-			CREATE_OBJECT	TVolumeInfo	TVolumeInfo1	
-			COMMAND		TVolumeInfo1	new
-			COMMAND		TVolumeInfo1	~
-	END_TEST_BLOCK
-END_TESTCASE			PBASE-F32-VolumeInfo-PublicApi-0001
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/setup-PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-
-RUN_UTILS MkDir	${SYSDRIVE}\base\
-RUN_UTILS MkDir	${SYSDRIVE}\base\armv5\
-RUN_UTILS MkDir	${SYSDRIVE}\base\winscw\
-RUN_UTILS MkDir	${SYSDRIVE}\base\t_sfsrv\
-
-// copy script files
-
-//SfSrv
-RUN_UTILS CopyFile	z:\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script			${SYSDRIVE}\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.script
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini				${SYSDRIVE}\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini
-
-RUN_UTILS CopyFile	z:\base\t_base.tcs				${SYSDRIVE}\base\t_base.tcs
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_base.tcs
-
-RUN_UTILS CopyFile	z:\base\dual_drive_env.ini					${SYSDRIVE}\base\dual_drive_env.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\dual_drive_env.ini
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\test.txt					${SYSDRIVE}\base\t_sfsrv\test.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\test.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\Test1.txt					${SYSDRIVE}\base\t_sfsrv\Test1.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\Test1.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\Test2.txt					${SYSDRIVE}\base\t_sfsrv\Test2.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\Test2.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\Test3.txt					${SYSDRIVE}\base\t_sfsrv\Test3.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\Test3.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\USBLOAD.ZIP					${SYSDRIVE}\base\t_sfsrv\USBLOAD.ZIP
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\USBLOAD.ZIP
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\1mb						${SYSDRIVE}\base\t_sfsrv\1mb
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\1mb
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\big.txt						${SYSDRIVE}\base\t_sfsrv\big.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\big.txt
--- a/baseapitest/basesvs/validation/f32/sfsrv/scripts/setup-PBASE-F32-SfSrv-PublicApi.script	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,415 +0,0 @@
-//
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description: 
-//
-
-RUN_UTILS MkDir	${SYSDRIVE}\base\
-RUN_UTILS MkDir	${SYSDRIVE}\base\armv5\
-RUN_UTILS MkDir	${SYSDRIVE}\base\winscw\
-RUN_UTILS MkDir	${SYSDRIVE}\base\t_sfsrv\
-
-// copy script files
-
-//SfSrv
-
-RUN_UTILS CopyFile	z:\base\t_base.tcs				${SYSDRIVE}\base\t_base.tcs
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_base.tcs
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Sfsrv-PublicApi.script			${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi.script
-
-
-
-//SfSrv RAM
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Sfsrv-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-RAM.script
-
-
-//SfSrv ROM
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Sfsrv-PublicApi-ROM.script			${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-ROM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-ROM.script
-
-
-//SfSrv REM
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Sfsrv-PublicApi-REM.script			${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-REM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-REM.script
-
-
-
-//SfSrv ANY
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Sfsrv-PublicApi-ANY.script			${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-ANY.script
-
-
-
-//SfSrv OS
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Sfsrv-PublicApi-OS.script			${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-OS.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-OS.script
-
-
-
-//SfSrv NAND
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Sfsrv-PublicApi-NAND.script			${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-NAND.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Sfsrv-PublicApi-NAND.script
-
-
-
-
-//t_parse
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Parse-PublicApi-ANY.script			${SYSDRIVE}\base\PBASE-F32-Parse-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Parse-PublicApi-ANY.script
-
-
-//t_parseptr
-RUN_UTILS CopyFile	z:\base\PBASE-F32-ParsePtr-PublicApi-ANY.script			${SYSDRIVE}\base\PBASE-F32-ParsePtr-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-ParsePtr-PublicApi-ANY.script
-
-
-//t_parseptrc
-RUN_UTILS CopyFile	z:\base\PBASE-F32-ParsePtrC-PublicApi-ANY.script		${SYSDRIVE}\base\PBASE-F32-ParsePtrC-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-ParsePtrC-PublicApi-ANY.script
-
-
-//t_parse-inherited
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script		${SYSDRIVE}\base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Parse-Inherited-PublicApi-ANY.script
-
-
-//t_parseptr-inherited
-RUN_UTILS CopyFile	z:\base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script	${SYSDRIVE}\base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-ParsePtr-Inherited-PublicApi-ANY.script
-
-
-//t_parseptrc-inherited
-RUN_UTILS CopyFile	z:\base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script	${SYSDRIVE}\base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-ParsePtrC-Inherited-PublicApi-ANY.script
-
-
-//t_driveunit
-RUN_UTILS CopyFile	z:\base\PBASE-F32-DriveUnit-PublicApi-ANY.script		${SYSDRIVE}\base\PBASE-F32-DriveUnit-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-DriveUnit-PublicApi-ANY.script
-
-
-//t_format ROM
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Format-PublicApi-ROM.script			${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-ROM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-ROM.script
-
-
-//t_format REM
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Format-PublicApi-REM.script			${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-REM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-REM.script
-
-
-//t_format RAM
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Format-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Format-PublicApi-RAM.script
-
-
-//t_dir
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Dir-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-Dir-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Dir-PublicApi-RAM.script
-
-
-//t_dirscan
-RUN_UTILS CopyFile	z:\base\PBASE-F32-DirScan-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-DirScan-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-DirScan-PublicApi-RAM.script
-
-
-//t_file
-RUN_UTILS CopyFile	z:\base\PBASE-F32-File-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-File-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-File-PublicApi-RAM.script
-
-
-//t_file NAND
-RUN_UTILS CopyFile	z:\base\PBASE-F32-File-PublicApi-NAND.script			${SYSDRIVE}\base\PBASE-F32-File-PublicApi-NAND.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-File-PublicApi-NAND.script
-
-
-
-//t_fileman RAM
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FileMan-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-FileMan-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FileMan-PublicApi-RAM.script
-
-
-//t_fileman OS
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FileMan-PublicApi-OS.script			${SYSDRIVE}\base\PBASE-F32-FileMan-PublicApi-OS.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FileMan-PublicApi-OS.script
-
-
-//t_filenamesidentical
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script	${SYSDRIVE}\base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FileNamesIdentical-PublicApi-RAM.script
-
-
-//t_rdir
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RDir-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-RDir-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RDir-PublicApi-RAM.script
-
-
-//t_Entry
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Entry-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-Entry-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Entry-PublicApi-RAM.script
-
-
-//t_entryarray
-RUN_UTILS CopyFile	z:\base\PBASE-F32-EntryArray-PublicApi-RAM.script		${SYSDRIVE}\base\PBASE-F32-EntryArray-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-EntryArray-PublicApi-RAM.script
-
-
-//t_filetext
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FileText-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-FileText-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FileText-PublicApi-RAM.script
-
-
-//t_findfile REM
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FindFile-PublicApi-REM.script			${SYSDRIVE}\base\PBASE-F32-FindFile-PublicApi-REM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FindFile-PublicApi-REM.script
-
-
-//t_findfile OS
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FindFile-PublicApi-OS.script			${SYSDRIVE}\base\PBASE-F32-FindFile-PublicApi-OS.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FindFile-PublicApi-OS.script
-
-
-//t_OpenFileScan
-RUN_UTILS CopyFile	z:\base\PBASE-F32-OpenFileScan-PublicApi-RAM.script		${SYSDRIVE}\base\PBASE-F32-OpenFileScan-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-OpenFileScan-PublicApi-RAM.script
-
-
-//t_VolumeInfo
-RUN_UTILS CopyFile	z:\base\PBASE-F32-VolumeInfo-PublicApi-ANY.script		${SYSDRIVE}\base\PBASE-F32-VolumeInfo-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-VolumeInfo-PublicApi-ANY.script
-
-
-//t_rawdisk
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RawDisk-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-RawDisk-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RawDisk-PublicApi-RAM.script
-
-
-//t_rawdisk
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RawDisk-PublicApi-REM.script			${SYSDRIVE}\base\PBASE-F32-RawDisk-PublicApi-REM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RawDisk-PublicApi-REM.script
-
-
-//RFs
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.script		${SYSDRIVE}\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Drives-PublicApi-ANY.script		${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-ANY.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Files-PublicApi-ANY.script		${SYSDRIVE}\base\PBASE-F32-RFS-Files-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Files-PublicApi-ANY.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Misc-PublicApi-ANY.script			${SYSDRIVE}\base\PBASE-F32-RFS-Misc-PublicApi-ANY.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Misc-PublicApi-ANY.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-PublicApi-OS.script			${SYSDRIVE}\base\PBASE-F32-RFS-PublicApi-OS.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-PublicApi-OS.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Drives-PublicApi-RAM.script		${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-RAM.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Files-PublicApi-RAM.script		${SYSDRIVE}\base\PBASE-F32-RFS-Files-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Files-PublicApi-RAM.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Misc-PublicApi-RAM.script			${SYSDRIVE}\base\PBASE-F32-RFS-Misc-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Misc-PublicApi-RAM.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.script		${SYSDRIVE}\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-PublicApi-ROM.script			${SYSDRIVE}\base\PBASE-F32-RFS-PublicApi-ROM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-PublicApi-ROM.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Drives-PublicApi-REM.script		${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-REM.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-REM.script
-
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.script	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.script
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.script
-
-
-// copy ini data file
-
-//t_parse
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Parse-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-Parse-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Parse-PublicApi.ini
-
-//t_parseptr
-RUN_UTILS CopyFile	z:\base\PBASE-F32-ParsePtr-PublicApi.ini			${SYSDRIVE}\base\PBASE-F32-ParsePtr-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-ParsePtr-PublicApi.ini
-
-//t_parseptrc
-RUN_UTILS CopyFile	z:\base\PBASE-F32-ParsePtrC-PublicApi.ini			${SYSDRIVE}\base\PBASE-F32-ParsePtrC-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-ParsePtrC-PublicApi.ini
-
-//t_parsebase-inherited
-RUN_UTILS CopyFile	z:\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini		${SYSDRIVE}\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-ParseBase-Inherited-PublicApi.ini
-
-//t_driveunit
-RUN_UTILS CopyFile	z:\base\PBASE-F32-DriveUnit-PublicApi.ini			${SYSDRIVE}\base\PBASE-F32-DriveUnit-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-DriveUnit-PublicApi.ini
-
-//t_format
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Format-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-Format-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Format-PublicApi.ini
-
-//t_dir 
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Dir-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-Dir-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Dir-PublicApi.ini
-
-//t_dirscan 
-RUN_UTILS CopyFile	z:\base\PBASE-F32-DirScan-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-DirScan-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-DirScan-PublicApi.ini
-
-//t_file 
-RUN_UTILS CopyFile	z:\base\PBASE-F32-File-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-File-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-File-PublicApi.ini
-
-//t_fileman OS
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FileMan-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-FileMan-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FileMan-PublicApi.ini
-
-//t_filenamesidentical
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FileNamesIdentical-PublicApi.ini		${SYSDRIVE}\base\PBASE-F32-FileNamesIdentical-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FileNamesIdentical-PublicApi.ini
-
-//t_rdir
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RDir-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-RDir-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RDir-PublicApi.ini
-
-//t_Entry
-RUN_UTILS CopyFile	z:\base\PBASE-F32-Entry-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-Entry-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-Entry-PublicApi.ini
-
-//t_entryarray
-RUN_UTILS CopyFile	z:\base\PBASE-F32-EntryArray-PublicApi.ini			${SYSDRIVE}\base\PBASE-F32-EntryArray-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-EntryArray-PublicApi.ini
-
-//t_filetext
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FileText-PublicApi.ini			${SYSDRIVE}\base\PBASE-F32-FileText-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FileText-PublicApi.ini
-
-//t_findfile
-RUN_UTILS CopyFile	z:\base\PBASE-F32-FindFile-PublicApi.ini			${SYSDRIVE}\base\PBASE-F32-FindFile-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-FindFile-PublicApi.ini
-
-//t_OpenFileScan
-RUN_UTILS CopyFile	z:\base\PBASE-F32-OpenFileScan-PublicApi.ini			${SYSDRIVE}\base\PBASE-F32-OpenFileScan-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-OpenFileScan-PublicApi.ini
-
-//t_VolumeInfo
-RUN_UTILS CopyFile	z:\base\PBASE-F32-VolumeInfo-PublicApi.ini			${SYSDRIVE}\base\PBASE-F32-VolumeInfo-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-VolumeInfo-PublicApi.ini
-
-//t_rawdisk
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RawDisk-PublicApi.ini				${SYSDRIVE}\base\PBASE-F32-RawDisk-PublicApi.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RawDisk-PublicApi.ini
-
-
-//RFs
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Mounts-PublicApi-ANY.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-ANY.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Files-PublicApi-ANY.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Misc-PublicApi-ANY.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-PublicApi-OS.ini				${SYSDRIVE}\base\PBASE-F32-RFS-PublicApi-OS.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-PublicApi-OS.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-RAM.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Files-PublicApi-RAM.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Misc-PublicApi-RAM.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Mounts-PublicApi-RAM.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-PublicApi-ROM.ini				${SYSDRIVE}\base\PBASE-F32-RFS-PublicApi-ROM.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-PublicApi-ROM.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini			${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-REM.ini
-
-RUN_UTILS CopyFile	z:\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini		${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini
-
-RUN_UTILS CopyFile	z:\base\base_f32_env.ini					${SYSDRIVE}\base\base_f32_env.ini
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\base_f32_env.ini
-
-// copy other data files
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\test.txt					${SYSDRIVE}\base\t_sfsrv\test.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\test.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\Test1.txt					${SYSDRIVE}\base\t_sfsrv\Test1.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\Test1.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\Test2.txt					${SYSDRIVE}\base\t_sfsrv\Test2.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\Test2.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\Test3.txt					${SYSDRIVE}\base\t_sfsrv\Test3.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\Test3.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\USBLOAD.ZIP					${SYSDRIVE}\base\t_sfsrv\USBLOAD.ZIP
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\USBLOAD.ZIP
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\1mb						${SYSDRIVE}\base\t_sfsrv\1mb
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\1mb
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\any.txt						${SYSDRIVE}\base\t_sfsrv\any.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\any.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\big_line.txt					${SYSDRIVE}\base\t_sfsrv\big_line.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\big_line.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\filetext_eof.txt				${SYSDRIVE}\base\t_sfsrv\filetext_eof.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\filetext_eof.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\filetext_read.txt				${SYSDRIVE}\base\t_sfsrv\filetext_read.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\filetext_read.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\multiline.txt					${SYSDRIVE}\base\t_sfsrv\multiline.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\multiline.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\oneliner.txt					${SYSDRIVE}\base\t_sfsrv\oneliner.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\oneliner.txt
-
-RUN_UTILS CopyFile	z:\base\t_sfsrv\new_file.txt					${SYSDRIVE}\base\t_sfsrv\new_file.txt
-RUN_UTILS MakeReadWrite	${SYSDRIVE}\base\t_sfsrv\new_file.txt
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_ActiveNotifyChange.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_ActiveNotifyChange
-*/
-
-//	User includes
-#include "T_ActiveNotifyChange.h"
-
-CT_ActiveNotifyChange* CT_ActiveNotifyChange::NewL(TInt aCount, TInt aAsyncErrorIndex, MActiveCallback& aCallback, TInt aPriority)
-/**
- * Two phase constructor
- */
-	{
-	CT_ActiveNotifyChange*	ret = new (ELeave) CT_ActiveNotifyChange(aCount, aAsyncErrorIndex, aCallback, aPriority);
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;	
-	}
-
-CT_ActiveNotifyChange* CT_ActiveNotifyChange::NewLC(TInt aCount, TInt aAsyncErrorIndex, MActiveCallback& aCallback, TInt aPriority)
-/**
- * Two phase constructor
- */
-	{
-	CT_ActiveNotifyChange*	ret = new (ELeave) CT_ActiveNotifyChange(aCount, aAsyncErrorIndex, aCallback, aPriority);
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	return ret;	
-	}
-
-CT_ActiveNotifyChange::CT_ActiveNotifyChange(TInt aCount, TInt aAsyncErrorIndex, MActiveCallback& aCallback, TInt aPriority)
-/**
- * Protected constructor. First phase construction
- */
-:	CActiveCallback(aCallback, aPriority)
-,	iCount(aCount)
-,	iAsyncErrorIndex(aAsyncErrorIndex)
-	{
-	}
-
-void CT_ActiveNotifyChange::Activate()
-	{
-	CActiveCallback::Activate(iAsyncErrorIndex);
-	}
-
-TInt CT_ActiveNotifyChange::DecCount()
-	{
-	return --iCount;
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_DirData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,369 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-v
-This contains CT_DirData
-*/
-
-//	User includes
-#include "T_DirData.h"
-#include "T_SfSrvServer.h"
-
-/*@{*/
-///	Parameters
-_LIT(KArrayElementNumber,						"element_number");
-_LIT(KExpected,									"expected");
-_LIT(KSortkey,									"sortkey");
-_LIT(KNumSortkey,								"numsortkey");
-_LIT(KEntryObject,								"entryObject");
-
-///Commands
-_LIT(KCmdCount,									"Count");
-_LIT(KCmdOperatorBrackets,						"[]");
-_LIT(KCmdSort,									"Sort");
-_LIT(KCmdDestructor,							"~");
-
-
-//Sort keys
-_LIT(KESortNone,								"ESortNone");
-_LIT(KESortByName,								"ESortByName");
-_LIT(KESortByExt,								"ESortByExt");
-_LIT(KESortBySize,								"ESortBySize");
-_LIT(KESortByDate,								"ESortByDate");
-_LIT(KESortByUid,								"ESortByUid");
-_LIT(KEDirsAnyOrder,							"EDirsAnyOrder");
-_LIT(KEDirsFirst,								"EDirsFirst");
-_LIT(KEDirsLast,								"EDirsLast");
-_LIT(KEAscending,								"EAscending");
-_LIT(KEDescending,								"EDescending");
-_LIT(KEDirDescending,							"EDirDescending");
-
-
-CT_DirData* CT_DirData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_DirData* ret = new (ELeave) CT_DirData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-
-
-CT_DirData::CT_DirData()
-:	iDir(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-
-
-void CT_DirData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-
-
-CT_DirData::~CT_DirData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-
-
-TAny* CT_DirData::GetObject()
-	{
-	return iDir;
-	}
-	
-	
-void CT_DirData::SetObjectL(TAny* aAny)
-	{
-	DoCleanup();
-	iDir = static_cast<CDir*> (aAny);
-	}
-
-
-void CT_DirData::DisownObjectL()
-	{
-	iDir = NULL;
-	}
-	
-	
-inline TCleanupOperation CT_DirData::CleanupOperation()
-	{
-	return CleanupOperation;
-	}
-
-
-void CT_DirData::CleanupOperation(TAny* aAny)
-	{
-	CDir* dir=static_cast<CDir*>(aAny);
-	delete dir;
-	}
-
-
-TBool CT_DirData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection	the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-
-	if (aCommand == KCmdCount)
-		{
-		DoCmdCount(aSection);
-		}
-	else if (aCommand == KCmdOperatorBrackets)
-		{
-		DoCmdOperatorBracketsL(aSection);
-		}
-	else if (aCommand == KCmdSort)
-		{
-		DoCmdSort(aSection);
-		}
-	else if (aCommand == KCmdDestructor)
-		{
-		DoCleanup();
-		}
-	else
-		{
-		retVal = EFalse;
-		}
-	return retVal;
-	}
-
-
-void CT_DirData::DoCleanup()
-	{
-	INFO_PRINTF1(_L("Doing cleanup"));
-	if (iDir)
-		{
-		delete iDir;
-		iDir = NULL;
-		}
-	}
-	
-void CT_DirData::DoCmdCount(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Counts directory entries!"));
-	
-	TInt	expected;
-	if (GET_MANDATORY_INT_PARAMETER(KExpected, aSection, expected))
-		{
-		TInt count = iDir->Count();
-		if (count != expected)
-			{
-			ERR_PRINTF3(_L("Result didn't match with expected result! COUNT: %d, expected: %d"), count, expected);
-			SetBlockResult(EFail);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("Result matched with expected result (%d)!"), count);
-			}
-		}
-	}
-	
-	
-void CT_DirData::DoCmdOperatorBracketsL(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Getting element and compare it with expected!"));
-	
-	TInt	elementNumber;
-		
-	if (GET_MANDATORY_INT_PARAMETER(KArrayElementNumber, aSection, elementNumber))
-		{
-        INFO_PRINTF2( _L( "Get element[%d]" ), elementNumber);
-		TEntry* entryObject = new(ELeave) TEntry();
-		CleanupStack::PushL(entryObject);
-		
-		*entryObject = iDir->operator[](elementNumber);
-
-	    if ( !FileserverUtil::VerifyTEntryDataFromIniL(*this, aSection, *entryObject))
-   		    {
-   		    SetBlockResult(EFail);
-   		    }
-    		    
-		TPtrC	entryObjectName;
-		if (GET_OPTIONAL_STRING_PARAMETER(KEntryObject, aSection, entryObjectName))
-			{
-			CT_EntryData* entryWrapperObject = static_cast<CT_EntryData*>(GetDataWrapperL(entryObjectName));
-		    if(entryWrapperObject)
-				{
-				entryWrapperObject->SetObjectL(entryObject);
-				entryObject = NULL;
-				}
-			else
-				{
-				SetBlockResult(EFail);
-				}
-			}
-			
-		CleanupStack::Pop();
-		delete entryObject;
-		entryObject = NULL;
-		}
-	}	
-   	
-void CT_DirData::DoCmdSort(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Sorting directory entries!"));
-	
-	TPtrC	sortKey;
-		
-	if (GET_OPTIONAL_STRING_PARAMETER(KSortkey, aSection, sortKey))
-		{	
-		TUint fixedKey = 0;
-		
-		if ( !ConvertSortKeys(sortKey, fixedKey) )
-			{
-			ERR_PRINTF2(_L("Given sortkey (%S) is invalid"), &sortKey);
-			SetBlockResult(EFail);
-			}
-					
-		TInt err = iDir->Sort(fixedKey);
-		
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Directory entries have not been sorted! Error code = %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Directory entries have been sorted!"));
-			}
-		}
-	else
-		{
-		TInt	numSortKey;
-		if (GET_MANDATORY_INT_PARAMETER(KNumSortkey, aSection, numSortKey))
-			{
-			TInt err = iDir->Sort(numSortKey);
-			
-			if (err != KErrNone)
-				{
-				ERR_PRINTF2(_L("Directory entries has not been sorted! Error code = %d"), err);
-				SetError(err);
-				}
-			else
-				{
-				INFO_PRINTF1(_L("Directory entries has been sorted!"));
-				}
-			}
-		}
-	INFO_PRINTF1(_L("Results after sorting!"));
-	for (TInt i = 0; i < iDir->Count(); i++)
-	    {
-		INFO_PRINTF3(_L("%d) %S"), i+1, &(*iDir)[i].iName);
-		}
-	}
-	
-TBool CT_DirData::ConvertSortKeys(TDesC &aConstantName, TUint& aSortKey)
-	{
-	
-	TBool ret = ETrue;
-	
-	if (aConstantName == KESortByName)
-		{
-		aSortKey = ESortByName;
-		}
-	else if (aConstantName == KESortByExt)
-		{
-		aSortKey = ESortByExt;
-		}
-	else if (aConstantName == KESortBySize)
-		{
-		aSortKey = ESortBySize;
-		}
-	else if (aConstantName == KESortByDate)
-		{
-		aSortKey = ESortByDate;
-		}
-	else if (aConstantName == KESortByUid)
-		{
-		aSortKey = ESortByUid;
-		}
-	else if (aConstantName == KEDirsAnyOrder)
-		{
-		aSortKey = EDirsAnyOrder;
-		}
-	else if (aConstantName == KEDirsFirst)
-		{
-		aSortKey = EDirsFirst;
-		}
-	else if (aConstantName == KEDirsLast)
-		{
-		aSortKey = EDirsLast;
-		}
-	else if (aConstantName == KEAscending)
-		{
-		aSortKey = EAscending;
-		}
-	else if (aConstantName == KEDescending)
-		{
-		aSortKey = EDescending;
-		}
-	else if (aConstantName == KEDirDescending)
-		{
-		aSortKey = EDirDescending;
-		}
-	else if (aConstantName == KESortNone)
-		{
-		aSortKey = ESortNone;
-		}
-	else
-		{
-		TInt	location = aConstantName.Match(_L("*|*"));
-		if( location != KErrNotFound )
-			{
-			//Converting Left part of the data
-			TPtrC	tempStr = aConstantName.Left(location);
-			ret = ConvertSortKeys(tempStr, aSortKey);
-
-			//Converting right data can be with another "|"
-			tempStr.Set(aConstantName.Mid(location + 1));
-
-			TUint	tmp;
-			if ( ConvertSortKeys(tempStr, tmp) )
-				{
-				aSortKey |= tmp;
-				}
-			else
-				{
-				ret = EFalse;
-				}
-			}
-		}
-
-	return ret;
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_DirScanData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,480 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-v
-This contains CT_DirScanData
-*/
-
-//	User includes
-#include "T_DirScanData.h"
-#include "T_SfSrvServer.h"
-
-/*@{*/
-///	Parameters
-_LIT(KAttMask,							"attmask" );
-_LIT(KRfsObject,						"rfsObject");
-_LIT(KDirObject,						"dirObject");
-_LIT(KExpected,							"expected");
-_LIT(KPath,								"path");
-_LIT(KEntrySortKey,						"sortkey");
-_LIT(KScanDirection,					"scandirection");
-
-///Commands
-_LIT(KCmdNewL,							"NewL");
-_LIT(KCmdNewLC,							"NewLC");
-_LIT(KCmdSetScanDataL,					"SetScanDataL");
-_LIT(KCmdFullPath,						"FullPath");
-_LIT(KCmdAbbreviatedPath,				"AbbreviatedPath");
-_LIT(KCmdNextL,							"NextL");
-_LIT(KCmdDestructor,					"~");
-
-//	Sort key
-_LIT(KESortNone,						"ESortNone");
-_LIT(KESortByName,						"ESortByName");
-_LIT(KESortByExt,						"ESortByExt");
-_LIT(KESortBySize,						"ESortBySize");
-_LIT(KESortByDate,						"ESortByDate");
-_LIT(KESortByUid,						"ESortByUid");
-_LIT(KEDirsAnyOrder,					"EDirsAnyOrder");
-_LIT(KEDirsFirst,						"EDirsFirst");
-_LIT(KEDirsLast,						"EDirsLast");
-_LIT(KEAscending,						"EAscending");
-_LIT(KEDescending,						"EDescending");
-_LIT(KEDirDescending,					"EDirDescending");
-
-// Scan directions
-_LIT(KEScanUpTree,	 					"EScanUpTree");
-_LIT(KEScanDownTree,	 				"EScanDownTree");
-
-
-CT_DirScanData* CT_DirScanData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_DirScanData* ret = new (ELeave) CT_DirScanData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-	
-
-CT_DirScanData::CT_DirScanData()
-:	iDirScan(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-
-
-void CT_DirScanData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-
-
-CT_DirScanData::~CT_DirScanData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-
-
-TAny* CT_DirScanData::GetObject()
-	{
-	return iDirScan;
-	}
-
-
-TBool	CT_DirScanData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection	the section in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool	retVal = ETrue;
-
-	if (aCommand == KCmdNewL)
-		{
-		DoCmdNewL(aSection);
-		}
-	else if (aCommand == KCmdDestructor)
-		{
-		DoCleanup();
-		}
-	else if (aCommand == KCmdNewLC)
-		{
-		DoCmdNewLC(aSection);
-		}
-	else if (aCommand == KCmdSetScanDataL)
-		{
-		DoCmdSetScanDataL(aSection);
-		}
-	else if (aCommand == KCmdNextL)
-		{
-		DoCmdNextL(aSection);
-		}
-	else if (aCommand == KCmdAbbreviatedPath)
-		{
-		DoCmdAbbreviatedPath(aSection);
-		}
-	else if (aCommand == KCmdFullPath)
-		{
-		DoCmdFullPath(aSection);
-		}
-	else
-		{
-		retVal = EFalse;
-		}
-	return retVal;
-	}
-
-void CT_DirScanData::DoCleanup()
-	{
-	INFO_PRINTF1(_L("Doing cleanup!"));
-	
-	if (iDirScan)
-		{
-		delete iDirScan;
-		iDirScan = NULL;
-		}
-	}
-		
-void CT_DirScanData::DoCmdNewL(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Constructing CDirScan object!"));
-	
-	RFs*	rfsObject = NULL;
-	TPtrC	rfsObjectName;
-	if (GET_MANDATORY_STRING_PARAMETER(KRfsObject, aSection, rfsObjectName))
-		{
-		rfsObject = (RFs*)GetDataObjectL(rfsObjectName);
-		}
-	
-	DoCleanup();
-	TRAPD (error, iDirScan = CDirScan::NewL(*rfsObject));
-	if (error == KErrNone)
-		{
-		INFO_PRINTF1(_L("CDirScan object has been created with NewL constructor!"));			
-		}
-	else
-		{
-		ERR_PRINTF2(_L("CDirScan object is not created with NewL constructor! Error code: %d"), error);
-		SetError(error);
-		}
-	}
-	
-void CT_DirScanData::DoCmdNewLC(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Constructing CDirScan object!"));
-	
-	RFs*	rfsObject = NULL;
-	TPtrC	rfsObjectName;
-	if (GET_MANDATORY_STRING_PARAMETER(KRfsObject, aSection, rfsObjectName))
-		{
-		rfsObject = (RFs*)GetDataObjectL(rfsObjectName);
-		}
-	
-	DoCleanup();
-	TRAPD (error, iDirScan = CDirScan::NewLC(*rfsObject); CleanupStack::Pop(iDirScan) );
-	if (error == KErrNone)
-		{
-		INFO_PRINTF1(_L("CDirScan object has been created with NewLC constructor!"));
-		}
-	else
-		{
-		ERR_PRINTF2(_L("CDirScan object is not created with NewLC constructor! Error code: %d"), error);
-		SetError(error);
-		}
-	}
-
-void CT_DirScanData::DoCmdSetScanDataL(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Setting data scanning!"));
-	
-	TBool	dataOk = ETrue;
-	
-	TPtrC	path;
-	if (!GET_MANDATORY_STRING_PARAMETER(KPath(), aSection, path))
-		{
-		dataOk = EFalse;
-		}
-
-	TUint	attMask = KEntryAttHidden;
-	if ( !FileserverUtil::GetAttMask(*this, aSection, KAttMask(), attMask))
-        {
-       	dataOk = EFalse;
-       	}
-
-	TPtrC	entrySortKey;
-	TUint	sortKey = ESortNone;
-	
-	if (GET_OPTIONAL_STRING_PARAMETER(KEntrySortKey(), aSection, entrySortKey))
-		{
-		if ( !ConvertToSortKey(entrySortKey, sortKey) )
-			{
-			TInt	intTemp;
-			if ( GET_MANDATORY_INT_PARAMETER(KEntrySortKey(), aSection, intTemp) )
-				{
-				sortKey=intTemp;
-				}
-			else
-				{
-				dataOk = EFalse;
-				}
-			}
-		}
-		
-	TPtrC						entryScanDirection;
-	CDirScan::TScanDirection	scanDirection = CDirScan::EScanDownTree;
-	
-	if (GET_OPTIONAL_STRING_PARAMETER(KScanDirection(), aSection, entryScanDirection))
-		{
-		if ( !ConvertToScanDirection(entryScanDirection, scanDirection))
-            {
-           	dataOk = EFalse;
-           	}
-		}
-		
-	
-	if (dataOk)
-		{
-		TRAPD (err, iDirScan->SetScanDataL(path, attMask, sortKey, scanDirection));
-		if(err == KErrNone)
-			{
-			INFO_PRINTF1(_L("SetScanDataL complete!"));
-			}
-		else
-			{
-			ERR_PRINTF2(_L("SetScanDataL() Error: %d"), err);
-			SetError(err);
-			}
-		}
-	}	
-
-void CT_DirScanData::DoCmdNextL(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Scanning next directory entries!"));
-	
-	CDir*		dirObject = NULL;
-	CT_DirData* dirWrapperObject = NULL;
-	TPtrC		dirObjectName;
-	
-	if (GET_MANDATORY_STRING_PARAMETER(KDirObject, aSection, dirObjectName))
-		{
-		dirWrapperObject = static_cast<CT_DirData*>(GetDataWrapperL(dirObjectName));
-		}
-	TRAPD (err, iDirScan->NextL(dirObject));
-	if (err == KErrNone)
-		{
-		if (dirObject == NULL)
-			{
-			INFO_PRINTF1(_L("CDir instance is NULL, there is no directory left to go."));
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Scanning the next directory entry completed successfully!"));
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Can't scan the next directory entry in the structure Error code: %d"), err);
-		SetError(err);
-		}
-		
-	if (dirObject)
-		{
-		if(dirWrapperObject)
-			{
-			dirWrapperObject->SetObjectL(dirObject);
-			}
-		else
-		    {
-		    delete dirObject;
-		    dirObject = NULL;			        
-		    }
-		}	
-	}
-	
-void CT_DirScanData::DoCmdAbbreviatedPath(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Getting directory abbreviated path!"));
-	
-	TPtrC	expected;
-	if (GET_MANDATORY_STRING_PARAMETER(KExpected(), aSection, expected))
-		{
-		TPtrC	abbPath;
-		abbPath.Set(iDirScan->AbbreviatedPath());
-		
-		if (abbPath != expected)
-			{
-			ERR_PRINTF3(_L("Result (%S) didn't match with expected result (%S)!"), &abbPath, &expected);
-			SetBlockResult(EFail);
-			}
-		else 
-			{
-			INFO_PRINTF2(_L("Result (%S) match with expected result!"), &abbPath);
-			}
-		}
-	}
-
-void CT_DirScanData::DoCmdFullPath(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Getting directory full path!"));
-	
-	TPtrC	expected;
-	if (GET_MANDATORY_STRING_PARAMETER(KExpected(), aSection, expected))
-		{
-		TPtrC	fullPath;
-		fullPath.Set(iDirScan->FullPath());
-		
-		if (fullPath != expected)
-			{
-			ERR_PRINTF3(_L("Result (%S) didn't match with expected result (%S)!"), &fullPath, &expected);
-			SetBlockResult(EFail);
-			}
-		else 
-			{
-			INFO_PRINTF2(_L("Result (%S) match with expected result!"), &fullPath);
-			}
-		}
-	}
-	
-	
-TBool CT_DirScanData::ConvertToSortKey(const TDesC& aSortKeyStr, TUint& aSortKey)
-	{
-	TBool ret = ETrue;
-
-	if (aSortKeyStr == KESortNone)
-		{
-		aSortKey = ESortNone;
-		}
-	else if (aSortKeyStr == KESortByName)
-		{
-		aSortKey = ESortByName;
-		}
-	else if (aSortKeyStr == KESortByExt)
-		{
-		aSortKey = ESortByExt;
-		}
-	else if (aSortKeyStr == KESortBySize)
-		{
-		aSortKey = ESortBySize;
-		}
-	else if (aSortKeyStr == KESortByDate)
-		{
-		aSortKey = ESortByDate;
-		}
-	else if (aSortKeyStr == KESortByUid)
-		{
-		aSortKey = ESortByUid;
-		}
-	else if (aSortKeyStr == KEDirsAnyOrder)
-		{
-		aSortKey = EDirsAnyOrder;
-		}
-	else if (aSortKeyStr == KEDirsFirst)
-		{
-		aSortKey = EDirsFirst;
-		}
-	else if (aSortKeyStr == KEDirsLast)
-		{
-		aSortKey = EDirsLast;
-		}
-	else if (aSortKeyStr == KEAscending)
-		{
-		aSortKey = EAscending;
-		}
-	else if (aSortKeyStr == KEDescending)
-		{
-		aSortKey = EDescending;
-		}
-	else if (aSortKeyStr == KEDirDescending)
-		{
-		aSortKey = EDirDescending;
-		}
-	else if (aSortKeyStr.Match((_L("*|*"))) != KErrNotFound)
-		{
-		TUint tmpSortKey;
-
-		TInt location = aSortKeyStr.Match(_L("*|*"));
-		//Converting Left part of the data
-		TPtrC left = aSortKeyStr.Left(location);
-		if (ConvertToSortKey(left, tmpSortKey))
-			{
-			aSortKey = tmpSortKey;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-
-		//Converting right data can be with another "|"
-		TPtrC right = aSortKeyStr.Mid(location + 1);
-
-		if (ConvertToSortKey(right, tmpSortKey))
-			{
-			aSortKey = aSortKey | tmpSortKey;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	}
-
-
-	
-TBool CT_DirScanData::ConvertToScanDirection(const TDesC& aScanDirectionStr, CDirScan::TScanDirection& aScanDirection)
-	{
-	TBool ret = ETrue;
-
-	if (aScanDirectionStr == KEScanUpTree)
-		{
-		aScanDirection = CDirScan::EScanUpTree;
-		}
-	else if (aScanDirectionStr == KEScanDownTree)
-		{
-		aScanDirection = CDirScan::EScanDownTree;
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_DriveUnitData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,283 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_DriveUnitData
-*/
-
-//	User includes
-#include "T_DriveUnitData.h"
-
-/*@{*/
-///	Parameters
-_LIT(KDriveNameType,					"driveNameType");
-_LIT(KDriveName,						"driveName");
-_LIT(KDriveExpValue,                    "driveExpValue");
-_LIT(KDriveNameExpValue,				"driveNameExpValue");
-
-///	Commands
-_LIT(KCmdNew,							"new");
-_LIT(KCmdDestructor,					"~");
-_LIT(KCmdAssign,                        "=");
-_LIT(KCmdConvertToInt,                  "convertToInt");
-_LIT(KCmdName,					        "name");
-/*@}*/
-
-CT_DriveUnitData* CT_DriveUnitData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_DriveUnitData* ret = new (ELeave) CT_DriveUnitData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-
-CT_DriveUnitData::CT_DriveUnitData()
-:	iDriveUnit(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-
-void CT_DriveUnitData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/	
-	{
-	}
-
-CT_DriveUnitData::~CT_DriveUnitData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-
-void CT_DriveUnitData::DoCleanup()
-/**
-* Contains cleanup implementation
-*/
-	{
-	if (iDriveUnit)
-		{
-		INFO_PRINTF1(_L("Deleting current TDriveUnit"));
-		delete iDriveUnit;
-		iDriveUnit = NULL;
-		}
-	}
-
-TAny* CT_DriveUnitData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iDriveUnit;
-	}
-
-TBool CT_DriveUnitData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
-/**
- * Process a command read from the ini file
- *
- * @param	aCommand requiring command to be processed
- * @param	aSection the section in the ini file requiring the command to be processed
- * @param	aAsyncErrorIndex the index of asynchronous command error code belongs to.
- *
- * @leave	system wide error
- *
- * @return	ETrue if the command is processed
- */
-	{
-	TBool retVal = ETrue;
-
-	if (aCommand == KCmdNew)
-		{
-		DoCmdNewL(aSection);
-		}
-	else if (aCommand == KCmdDestructor)
-		{
-		DoCmdDestructor();
-		}
-	else if (aCommand == KCmdAssign)
-	    {
-	    DoCmdAssign(aSection);
-	    }
-	else if (aCommand == KCmdConvertToInt)
-	    {
-	    DoCmdConvertToInt(aSection);
-	    }
-	else if (aCommand == KCmdName)
-	    {
-	    DoCmdName(aSection);
-	    }
-	else
-		{
-		retVal = EFalse;
-		}
-	return retVal;
-	}
-
-void CT_DriveUnitData::DoCmdNewL(const TDesC& aSection)
-/** Creates new TDriveUnit class instance */
-	{
-	//Deletes previous TDriveUnit class instance if it was already created.
-	DoCleanup();
-
-	INFO_PRINTF1(_L("Create new TDriveUnit class instance"));
-    
-	TPtrC driveNameType;
-	if (GET_MANDATORY_STRING_PARAMETER(KDriveNameType(), aSection, driveNameType))
-	    {
-
-	    if (driveNameType == _L("number"))
-	        {
-	       	TInt driveNumber;
-        	if (GET_MANDATORY_INT_PARAMETER(KDriveName(), aSection, driveNumber))
-	            {
-            	// do create
-            	TRAPD(err, iDriveUnit = new (ELeave) TDriveUnit(driveNumber));
-            	
-            	if (err != KErrNone)
-        			{
-        			ERR_PRINTF2(_L("Error creating TDriveUnit(driveNumber): %d"), err);
-        			SetError( err );
-        			}
-	            }
-	        }
-        else if (driveNameType == _L("letter"))
-            {
-            TPtrC driveLetter;
-            if (GET_MANDATORY_STRING_PARAMETER(KDriveName(), aSection, driveLetter))
-                {
-               	// do create
-            	TRAPD(err, iDriveUnit = new (ELeave) TDriveUnit(driveLetter));
-                
-                if (err != KErrNone)
-        			{
-        			ERR_PRINTF2(_L("Error creating TDriveUnit(driveLetter): %d"), err);
-        			SetError( err );
-        			}
-                }
-            }
-        else
-            {
-            TRAPD(err, iDriveUnit = new (ELeave) TDriveUnit());
-
-        	if (err != KErrNone)
-        		{
-        		ERR_PRINTF2(_L("Error creating TDriveUnit(): %d"), err);
-        		SetError( err );
-        		}
-            }
-        }
-	}
-
-void CT_DriveUnitData::DoCmdAssign(const TDesC& aSection)
-/** Assigns the drive number or letter to the drive unit */
-    {
-	TPtrC driveNameType;
-	if (GET_MANDATORY_STRING_PARAMETER(KDriveNameType(), aSection, driveNameType))
-	    {
-	    if (driveNameType == _L("number"))
-	        {
-            TInt driveNumber;
-        	if (GET_MANDATORY_INT_PARAMETER(KDriveName(), aSection, driveNumber))
-        	    {
-        	    INFO_PRINTF1(_L("Assign a new drive number to the drive unit"));
-        	    *iDriveUnit = iDriveUnit->operator=(driveNumber);
-        	    
-        	    }
-	        }
-	    else if (driveNameType == _L("letter"))
-	        {
-            TPtrC driveLetter;
-            if (GET_MANDATORY_STRING_PARAMETER(KDriveName(), aSection, driveLetter))
-                {
-                INFO_PRINTF1(_L("Assign a new drive letter to the drive unit"));
-                *iDriveUnit = iDriveUnit->operator=(driveLetter);
-                }
-	        }
-        else
-            {
-            ERR_PRINTF1(_L("Drive name type is not specified!"));
-            SetBlockResult(EFail);
-            }
-	    }
-    }
-
-void CT_DriveUnitData::DoCmdConvertToInt(const TDesC& aSection)
-/** Converts the drive unit to integer */
-    {
-    INFO_PRINTF1(_L("Convert the drive unit to an integer value"));
-
-    TInt intValue = iDriveUnit->operator TInt();
-    INFO_PRINTF2(_L("Drive unit integer value is %d"), intValue);
-
-    TInt driveExpValue;
-	if (GET_OPTIONAL_INT_PARAMETER(KDriveExpValue(), aSection, driveExpValue))
-	    {	    
-        if ( driveExpValue != intValue )
-            {
-            ERR_PRINTF3(_L("Drive expected integer value does not match! Expected value: %d, actual value: %d"), driveExpValue, intValue);
-            SetBlockResult(EFail);
-            }
-	    else
-	    	{
-	    	INFO_PRINTF1(_L("Drive expected integer value matches the actual value!"));
-	    	}
-	    }    
-    }
-
-void CT_DriveUnitData::DoCmdName(const TDesC& aSection)
-/** Get the drive unit name as text */
-    {
-    INFO_PRINTF1(_L("Get the drive unit name as text with a colon in the end using Name()"));
-
-    TDriveName driveName = iDriveUnit->Name();
-
-    INFO_PRINTF2(_L("Drive name: %S"), &driveName);
-    
-    TPtrC driveNameExpValue;
-    if (GET_OPTIONAL_STRING_PARAMETER(KDriveNameExpValue(), aSection, driveNameExpValue))
-	    {	    
-        if ( driveNameExpValue != driveName )
-            {
-            ERR_PRINTF3(_L("Drive expected name value does not match! Expected value: %S, actual value: %S"), &driveNameExpValue, &driveName);
-            SetBlockResult(EFail);
-            }
-	    else
-	    	{
-	    	INFO_PRINTF1(_L("Drive expected name value matches the actual value!"));
-	    	}
-	    } 
-    }
-
-void CT_DriveUnitData::DoCmdDestructor()
-/** Destroy TDriveUnit the object */
-	{
-	DoCleanup();
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_EntryArrayData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_EntryArrayData.h"
-#include "T_EntryData.h"
-#include "FileserverUtil.h"
-
-// Commands
-_LIT( KCmdCount,				"count" );
-_LIT( KCmdDelete,				"~" );
-_LIT( KCmdNew,					"new" );
-_LIT( KCmdIndexOperator,		"[]" );
-
-// Parameters
-_LIT( KParamDestination,		"destination" );
-_LIT( KParamExpected,			"expected" );
-_LIT( KParamIndex,				"index" );
-
-
-CT_EntryArrayData* CT_EntryArrayData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_EntryArrayData* ret = new (ELeave) CT_EntryArrayData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_EntryArrayData::CT_EntryArrayData()
-:	iEntryArray(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-	
-void CT_EntryArrayData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_EntryArrayData::~CT_EntryArrayData()
-/**
-* Destructor.
-*/
-
-	{
-	DoCmdDelete();
-	}
-	
-TAny* CT_EntryArrayData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-
-	{
-	return iEntryArray;
-	}
-
-TBool CT_EntryArrayData::DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/ )
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/	
-	{
-	TBool retVal = ETrue;
-	
-	if ( aCommand == KCmdIndexOperator )
-		{
-		DoCmdIndexOperatorL( aSection );
-		}
-	else if ( aCommand == KCmdCount )
-		{
-		DoCmdCount( aSection );
-		}
-	else if ( aCommand == KCmdDelete )
-		{
-		DoCmdDelete();
-		}
-	else if ( aCommand == KCmdNew )
-		{
-		DoCmdNew();
-		}
-	else
-	    {
-	    retVal = EFalse;    
-	    }
-	
-	return retVal;
-	}
-	
-void CT_EntryArrayData::DoCmdIndexOperatorL( const TDesC& aSection )
-/**
-* Assigns an element of TEntryArray to another TEntry object using "=" operator
-*/
-	{
-	TInt index;
-	TPtrC entryObjectName;
-	
-	if( GET_MANDATORY_INT_PARAMETER( KParamIndex, aSection, index ) && 
-		GET_MANDATORY_STRING_PARAMETER( KParamDestination, aSection, entryObjectName ))
-		{
-		TEntry* entry = new(ELeave) TEntry();
-		CleanupStack::PushL(entry);
-		
-		*entry = iEntryArray->operator[](index);
-		CT_EntryData* entryWrapperObject = static_cast<CT_EntryData*>(GetDataWrapperL(entryObjectName));
-		
-		if(!entryWrapperObject)
-		    {
-			ERR_PRINTF2(_L("%S is not initialised"), &entryObjectName);
-		    SetBlockResult(EFail); 
-		    CleanupStack::PopAndDestroy(entry);
-		    }
-		else
-			{
-			entryWrapperObject->SetObjectL(entry);
-			CleanupStack::Pop(entry);
-			}
-		}
-	}
-	
-void CT_EntryArrayData::DoCmdCount( const TDesC& aSection )
-/**
-* Checks if TEntryArray has expected number of elements
-*/
-	{
-	TInt expected;	
-	if( GET_MANDATORY_INT_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		INFO_PRINTF2( _L( "Count(). Expected value = %d" ), expected );
-		
-		TInt result = iEntryArray->Count();
-		if ( result != expected )
-			{
-			ERR_PRINTF3(_L("Count %d != expected %d"), result, expected );
-			SetBlockResult( EFail );
-			}
-		}
-	}
-	
-void CT_EntryArrayData::DoCmdDelete()
-/**
-* Deletes TEntryArray class instance
-*/
-    {
-	DoCleanup();
-    }
-	
-void CT_EntryArrayData::DoCmdNew()
-/**
-* Creates new TEntryArray class instance
-*/
-	{
-	DoCmdDelete();
-	
-	INFO_PRINTF1( _L( "Create new TEntryArray() class instance." ) );
-	TRAPD( err, iEntryArray = new (ELeave) TEntryArray() );
-	if ( err != KErrNone )
-		{
-		ERR_PRINTF2( _L( "new TEntryArray() error %d" ), err );
-		SetBlockResult( EFail );
-		}
-	}
-	
-	
-void CT_EntryArrayData::SetObjectL( TAny* aAny )
-/**
-* Set the wrapped data object with new value
-*/
-	{
-	DoCleanup();
-	iEntryArray = static_cast<TEntryArray*> ( aAny );
-	}
-	
-void CT_EntryArrayData::DoCleanup()
-/** Deltes TEntry class instance */
-    {
-	INFO_PRINTF1( _L( "Delete TEntryArray class instance" ) );
-	delete iEntryArray;
-	iEntryArray = NULL;
-    }
-
-	
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_EntryData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,526 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_EntryData.h"
-#include "T_SfSrvServer.h"
-#include "FileserverUtil.h"
-
-// Commands
-_LIT( KCmdAssignmentOperator,	"=" );
-_LIT( KCmdIndexOperator,		"[]" );
-_LIT( KCmdDelete,				"~" );
-_LIT( KCmdIsArchive,			"IsArchive" );
-_LIT( KCmdIsDir,				"IsDir" );
-_LIT( KCmdIsHidden,				"IsHidden" );
-_LIT( KCmdIsReadOnly,			"IsReadOnly" );
-_LIT( KCmdIsSystem,				"IsSystem" );
-_LIT( KCmdIsTypeValid,			"IsTypeValid" );
-_LIT( KCmdIsUidPresent,			"IsUidPresent" );
-_LIT( KCmdMostDerivedUid,		"MostDerivedUid" );
-_LIT( KCmdNew,					"new" );
-_LIT( KCmdSetAttribute,			"SetAttribute" );
-
-// Parameters
-_LIT( KParamAttribute,			"attribute" );
-_LIT( KParamObject,				"object" );
-_LIT( KExpected,				"expected" );
-_LIT( KParamIndex,				"index" );
-_LIT( KParamState,				"state" );
-_LIT( KValue,					"value" );
-
-// Attributes
-_LIT(KEntryAttNormalStr, 		"KEntryAttNormal");
-_LIT(KEntryAttReadOnlyStr, 		"KEntryAttReadOnly");
-_LIT(KEntryAttHiddenStr, 		"KEntryAttHidden");
-_LIT(KEntryAttSystemStr, 		"KEntryAttSystem");
-_LIT(KEntryAttVolumeStr,		"KEntryAttVolume");
-_LIT(KEntryAttDirStr, 			"KEntryAttDir");
-_LIT(KEntryAttArchiveStr, 		"KEntryAttArchive");
-_LIT(KEntryAttXIPStr, 			"KEntryAttXIP");
-
-
-// other string values
-#define KTimeFormatSize 		30
-
-
-CT_EntryData* CT_EntryData::NewL( )
-/**
-* Two phase constructor
-*/
-	{
-	CT_EntryData* ret = new (ELeave) CT_EntryData( );
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_EntryData::CT_EntryData( )
-:	iEntry(NULL)
-,	iFs(NULL)	
-
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-	
-void CT_EntryData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_EntryData::~CT_EntryData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-	
-void CT_EntryData::DoCleanup()
-/** Deltes TEntry class instance */
-    {
-	INFO_PRINTF1( _L( "Delete TEntry class instance" ) );
-	delete iEntry;
-	iEntry = NULL;
-    }
-    
-TAny* CT_EntryData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iEntry;
-	}
-
-void CT_EntryData::SetObjectL( TAny* aAny )
-/**
-* Set the wrapped data object with new value
-*/
-	{
-	DoCleanup();
-	iEntry = static_cast<TEntry*> ( aAny );
-	}
-
-void CT_EntryData::DisownObjectL()
-/**
-* Clear the wrapped data object pointer w/o de-initialization
-*/
-	{
-	iEntry = NULL;
-	}
-	
-inline TCleanupOperation CT_EntryData::CleanupOperation()
-/**
-* Return static cleanup function
-*/
-	{
-	return CleanupOperation;
-	}
-
-void CT_EntryData::CleanupOperation( TAny* aAny )
-/**
-* Static cleanup function
-*/
-	{
-	TEntry* entry = static_cast<TEntry*> ( aAny );
-	delete entry;
-	}
-
-TBool CT_EntryData::DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-	
-	if ( aCommand == KCmdAssignmentOperator )
-		{
-		DoCmdAssignmentOperatorL( aSection );
-		}
-	else if ( aCommand == KCmdIndexOperator )
-		{
-		DoCmdIndexOperator( aSection );
-		}
-	else if ( aCommand == KCmdDelete )
-		{
-		DoCleanup();
-		}
-	else if ( aCommand == KCmdIsArchive )
-		{
-		DoCmdIsArchive( aSection );
-		}
-	else if ( aCommand == KCmdIsDir )
-		{
-		DoCmdIsDir( aSection );
-		}
-	else if ( aCommand == KCmdIsHidden )
-		{
-		DoCmdIsHidden( aSection );
-		}
-	else if ( aCommand == KCmdIsReadOnly )
-		{
-		DoCmdIsReadOnly( aSection );
-		}
-	else if ( aCommand == KCmdIsSystem )
-		{
-		DoCmdIsSystem( aSection );
-		}
-	else if ( aCommand == KCmdIsTypeValid )
-		{
-		DoCmdIsTypeValid( aSection );
-		}
-	else if ( aCommand == KCmdIsUidPresent )
-		{
-		DoCmdIsUidPresent( aSection );
-		}
-	else if ( aCommand == KCmdMostDerivedUid )
-		{
-		DoCmdMostDerived( aSection );
-		}
-	else if ( aCommand == KCmdNew )
-		{
-		DoCmdNew( aSection );
-		}
-	else if ( aCommand == KCmdSetAttribute )
-		{
-		DoCmdSetAttribute( aSection );
-		}
-	else
-	    {
-	    retVal = EFalse;    
-	    }
-	
-	return retVal;
-	}
-
-void CT_EntryData::DoCmdNew( const TDesC& aSection )
-/** Creates new TEntry class instance */
-	{
-	DoCleanup();
-	
-	TPtrC entryObjectName;	
-	if( GET_OPTIONAL_STRING_PARAMETER( KParamObject, aSection, entryObjectName ) )
-		{
-		INFO_PRINTF1( _L( "Create new TEntry(TEntry) class instance." ) );
-		
-		TEntry* entryObject = NULL;
-		TRAPD( err, entryObject = (TEntry*)GetDataObjectL(entryObjectName));
-		if ( err == KErrNone )
-			{
-			TRAPD( err, iEntry = new (ELeave) TEntry(*entryObject) );
-			if ( err != KErrNone )
-				{
-				ERR_PRINTF2( _L( "new TEntry(TEntry) error %d" ), err );
-				SetError( err );
-				}
-			}
-		else
-			{
-			ERR_PRINTF3( _L( "Unrecognized object name parameter value: %S. Error %d"), &entryObjectName, err );
-			SetBlockResult( EFail );
-			}
-		}
-	else
-		{
-		INFO_PRINTF1( _L( "Create new TEntry() class instance." ) );
-		TRAPD( err, iEntry = new (ELeave) TEntry() );
-		if ( err!=KErrNone )
-			{
-			ERR_PRINTF2( _L( "new TEntry() error %d" ), err );
-			SetError( err );
-			}
-		}
-	}
-	
-void CT_EntryData::DoCmdIndexOperator( const TDesC& aSection )
-/** Checks if the given UID is the same as required */
-	{
-	TInt iniIndex;	
-	if ( GET_MANDATORY_INT_PARAMETER( KParamIndex, aSection, iniIndex ) )
-		{
-		TInt value = (*iEntry)[iniIndex].iUid;
-		INFO_PRINTF3( _L( "UID[%d] = %d" ), iniIndex, value );		
-		
-		TInt iniExpected;
-		if ( GET_OPTIONAL_INT_PARAMETER( KExpected, aSection, iniExpected ) )
-			{			
-			if ( value != iniExpected )
-				{
-				INFO_PRINTF3( _L( "values not the same %d != %d" ), value, iniExpected );
-				SetBlockResult( EFail );
-				}
-			}
-		}
-	}
-	
-void CT_EntryData::DoCmdAssignmentOperatorL( const TDesC& aSection )
-/** Assigns another TEntry to this TEntry using "=" operator */
-	{
-	TPtrC entryObjectName;
-	if( GET_MANDATORY_STRING_PARAMETER( KParamObject, aSection, entryObjectName ) )
-		{
-		INFO_PRINTF2( _L( "Assign a %S to this TEntry" ), &entryObjectName );
-		
-		TEntry* entryObject = NULL;
-		TRAPD( err, entryObject = (TEntry*)GetDataObjectL(entryObjectName));
-		if ( err == KErrNone && entryObject)
-			{
-			*iEntry = iEntry->operator=(*entryObject);
-			}
-		else
-			{
-			ERR_PRINTF3( _L( "Object not found or not initialised: %S. Error %d"), &entryObjectName, err );
-			SetBlockResult( EFail );
-			}
-		}
-
-	if ( !FileserverUtil::VerifyTEntryDataFromIniL(*this, aSection, *iEntry))
-		{
-		SetBlockResult(EFail);
-		}
-	}
-	
-void CT_EntryData::DoCmdIsArchive( const TDesC& aSection )
-/** Checks if TEntry has Archive attribute using IsArchive() function */
-	{
-	INFO_PRINTF1( _L( "IsArchive()" ) );
-	TBool result = iEntry->IsArchive();
-		
-	TBool expected;
-	if( GET_MANDATORY_BOOL_PARAMETER( KExpected, aSection, expected ) )
-		{
-		if ( !( CompareBool(result, expected) ) )
-			{
-			ERR_PRINTF1( _L( "Error compare function result and expected value" ));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-	
-void CT_EntryData::DoCmdIsDir( const TDesC& aSection )
-/** Checks if TEntry has Dir attribute using IsDir() function */
-	{
-	INFO_PRINTF1( _L( "IsDir()" ) );
-	TBool result = iEntry->IsDir();
-						
-	TBool expected;
-	if( GET_MANDATORY_BOOL_PARAMETER( KExpected, aSection, expected ) )
-		{
-		if ( !( CompareBool(result, expected) ) )
-			{
-			ERR_PRINTF1( _L( "Error compare function result and expected value" ));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-	
-void CT_EntryData::DoCmdIsHidden( const TDesC& aSection )
-/** Checks if TEntry has Hidden attribute using IsHidden() function */
-	{
-	INFO_PRINTF1( _L( "IsHidden()" ) );
-	TBool result = iEntry->IsHidden();
-		
-	TBool expected;
-	if( GET_MANDATORY_BOOL_PARAMETER( KExpected, aSection, expected ) )
-		{
-		if ( !( CompareBool(result, expected) ) )
-			{
-			ERR_PRINTF1( _L( "Error compare function result and expected value" ));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-void CT_EntryData::DoCmdIsReadOnly( const TDesC& aSection )
-/** Checks if TEntry has ReadOnly attribute using IsReadOnly() function */
-	{
-	INFO_PRINTF1( _L( "IsReadOnly()" ) );
-	TBool result = iEntry->IsReadOnly();
-		
-	TBool expected;
-	if( GET_MANDATORY_BOOL_PARAMETER( KExpected, aSection, expected ) )
-		{
-		if ( !( CompareBool(result, expected) ) )
-			{
-			ERR_PRINTF1( _L( "Error compare function result and expected value" ));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-void CT_EntryData::DoCmdIsSystem( const TDesC& aSection )
-/** Checks if TEntry has System attribute using IsSystem() function */
-	{
-	INFO_PRINTF1( _L( "IsSystem()" ) );
-	TBool result = iEntry->IsSystem();
-	
-	TBool expected;
-	if( GET_MANDATORY_BOOL_PARAMETER( KExpected, aSection, expected ) )
-		{
-		if ( !( CompareBool(result, expected) ) )
-			{
-			ERR_PRINTF1( _L( "Error compare function result and expected value" ));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-void CT_EntryData::DoCmdIsTypeValid( const TDesC& aSection )
-/** Checks if TEntry has a valid UID using IsTypeValid() function */
-	{
-	INFO_PRINTF1( _L( "IsTypeValid()" ) );
-	TBool result = iEntry->IsTypeValid();
-		
-	TBool expected;
-	if( GET_MANDATORY_BOOL_PARAMETER( KExpected, aSection, expected ) )
-		{
-		if ( !( CompareBool(result, expected) ) )
-			{
-			ERR_PRINTF1( _L( "Error compare function result and expected value" ));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-	
-void CT_EntryData::DoCmdIsUidPresent( const TDesC& aSection )
-/** Checks if TEntry has a valid UID using IsTypeValid() function */
-	{
-	TInt theIntUid;
-	TBool expected;
-	if( GET_MANDATORY_BOOL_PARAMETER( KExpected, aSection, expected ) &&
-		GET_MANDATORY_INT_PARAMETER( KValue, aSection, theIntUid ) )
-		{
-		INFO_PRINTF2( _L( "IsUidPresent( Uid(%d) )" ), theIntUid );
-		TUid theUid;
-		theUid.iUid = theIntUid;
-		
-		TBool result = iEntry->IsUidPresent( theUid );
-		
-		if ( !( CompareBool(result, expected) ) )
-			{
-			ERR_PRINTF1( _L( "Error compare function result and expected value" ));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-void CT_EntryData::DoCmdMostDerived( const TDesC& aSection )
-/** checks if UID with given index is the same as the most derived one by using MostDerived() function */
-	{
-	TInt id = iEntry->MostDerivedUid().iUid;		
-	INFO_PRINTF2( _L( "MostDerivedUid = %d" ), id);
-		
-	TInt expected;
-	if( GET_OPTIONAL_INT_PARAMETER( KExpected, aSection, expected ) )
-		{		
-		if ( expected  != id )
-			{
-			ERR_PRINTF3( _L( "Error compare UID %d != expected %d" ), id, expected );
-			SetBlockResult( EFail );
-			}
-		}
-	}
-	
-void CT_EntryData::DoCmdSetAttribute( const TDesC& aSection )
-/** Sets or resets attributes */
-	{
-	TPtrC attrName;
-	TBool attrState;	
-	if( GET_MANDATORY_BOOL_PARAMETER( KParamState, aSection, attrState ) &&
-		GET_MANDATORY_STRING_PARAMETER( KParamAttribute, aSection, attrName ) )
-		{
-		TBool errHappened = EFalse;
-		TUint attr;
-		if (attrName == KEntryAttNormalStr)
-			{
-			attr = KEntryAttNormal;
-			}
-		else if (attrName == KEntryAttReadOnlyStr)
-			{
-			attr = KEntryAttReadOnly;
-			}
-		else if (attrName == KEntryAttHiddenStr)
-			{
-			attr = KEntryAttHidden;
-			}
-		else if (attrName == KEntryAttSystemStr)
-			{
-			attr = KEntryAttSystem;
-			}
-		else if (attrName == KEntryAttVolumeStr)
-			{
-			attr = KEntryAttVolume;
-			}
-		else if (attrName == KEntryAttDirStr)
-			{
-			attr = KEntryAttDir;
-			}
-		else if (attrName == KEntryAttArchiveStr)
-			{
-			attr = KEntryAttArchive;
-			}
-		else if (attrName == KEntryAttXIPStr)
-			{
-			attr = KEntryAttXIP;
-			}
-		else
-			{
-			errHappened = ETrue;
-			}
-			
-		if ( errHappened )
-			{
-			ERR_PRINTF2( _L( "Unknown attribute name parameter: %S" ), &attrName );
-			SetBlockResult( EFail );
-			}
-		else
-			{
-			TPtrC attrStateString;
-			GET_MANDATORY_STRING_PARAMETER( KParamState, aSection, attrStateString );
-			INFO_PRINTF3( _L( "SetAttribute(%S, %S)" ),  &attrName, &attrStateString);
-			
-			if ( attrState ) // set attribute
-				{
-				iEntry->iAtt = iEntry->iAtt | attr;
-				}
-			else // reset attribute
-				{
-				iEntry->iAtt = iEntry->iAtt ^ ( iEntry->iAtt & attr );
-				}
-			}
-		}
-	}
-
-
-TBool CT_EntryData::CompareBool( TBool aResult, TBool aExpected )
-/** compare 2 TBool values, which can be !=0 and !=1 - some TEntry functions return 2, 3 etc */
-	{
-	return ( ( aResult > 0 ) == ( aExpected > 0 ) );
-	}
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FileActiveCallback.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FileActiveCallback
-*/
-
-//	User includes
-#include "T_FileActiveCallback.h"
-
-CT_FileActiveCallback* CT_FileActiveCallback::NewL(MActiveCallback& aCallback, TInt aPriority)
-/**
- * Two phase constructor
- */
-	{
-	CT_FileActiveCallback*	ret = NewLC(aCallback, aPriority);
-	CleanupStack::Pop(ret);
-	return ret;	
-	}
-
-CT_FileActiveCallback* CT_FileActiveCallback::NewLC(MActiveCallback& aCallback, TInt aPriority)
-/**
- * Two phase constructor
- */
-	{
-	CT_FileActiveCallback*	ret = new (ELeave) CT_FileActiveCallback(aCallback, aPriority);
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	return ret;	
-	}
-
-CT_FileActiveCallback::CT_FileActiveCallback(MActiveCallback& aCallback, TInt aPriority)
-/**
- * Protected constructor. First phase construction
- */
-:	CActiveCallback(aCallback, aPriority),
-    iFileData(NULL),
-    iSection(NULL)
-	{
-	}
-	
-CT_FileActiveCallback::~CT_FileActiveCallback()
-	{ 	
-	delete iFileData;
-	iFileData = NULL;
-	}
-
-void CT_FileActiveCallback::Activate()
-	{
-	CActiveCallback::Activate(iAsyncErrorIndex);
-	}
-	
-void CT_FileActiveCallback::Activate(TInt aAsyncErrorIndex)
-	{
-	CActiveCallback::Activate(aAsyncErrorIndex);
-	}	
-
-TInt CT_FileActiveCallback::DecCount()
-	{
-	return --iCount;
-	}
-
-void CT_FileActiveCallback::SetSection(const TDesC& aSection)
-	{
-	this->iSection=const_cast<TDesC*>(&aSection);
-	}
-	
-void CT_FileActiveCallback::CreateFileDataBufferL(TInt aLength)
-	{
-	iFileData = HBufC8::NewL(aLength);
-	}
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FileData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2091 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FileData
-*/
-
-//	User includes
-#include "T_FileData.h"
-
-
-/*@{*/
-///	Parameters
-_LIT(KFile,								"file");
-_LIT(KUParamPath,						"path");
-_LIT(KUParamName,						"name");
-_LIT(KRFsName,							"RFs");
-_LIT(KFileMode,							"file_mode");
-_LIT(KUParamExpectedString,				"expected_string");
-_LIT(KUParamAsync,						"async");
-_LIT(KUParamBufferLength,				"buffer_length");
-_LIT(KUParamLength,						"length");
-_LIT(KUParamStartPos,					"start_pos");
-_LIT(KUParamEndPos,						"end_pos");
-_LIT(KUParamUsage,						"usage");
-_LIT(KUParamPos,						"position");
-_LIT(KSeek, 							"seek");
-_LIT(KUParamCancelAll,					"cancel_all");
-_LIT(KUParamData, 						"datawrite");
-_LIT(KUParamSize, 						"size");
-_LIT(KUParamExpectedSize,				"expected_size");
-_LIT(KUParamCompareValue,				"compare_value");
-_LIT(KUParamSetAttMask,					"set_att_mask");
-_LIT(KUParamClearAttMask, 				"clear_att_mask");
-_LIT(KUParamDate, 						"date");
-_LIT(KFileObjectName,					"file_object_name");
-_LIT(KUParamOwnerType,					"owner_type");
-_LIT(KUParamComparePath,				"compare_path");
-
-// OwnerType
-
-_LIT(KEOwnerProcess, 					"EOwnerProcess");
-_LIT(KEOwnerThread, 					"EOwnerThread");
-
-// Block Usage
-
-_LIT(KEBlockMapUsagePaging, 			"EBlockMapUsagePaging");
-_LIT(KETestDebug, 						"ETestDebug");
-
-// FileMode
-_LIT(KEFileShareExclusive,	 			"EFileShareExclusive");
-_LIT(KEFileShareReadersOnly,	 		"EFileShareReadersOnly");
-_LIT(KEFileShareAny,	 				"EFileShareAny");
-_LIT(KEFileShareReadersOrWriters,	 	"EFileShareReadersOrWriters");
-_LIT(KEFileStream,	 					"EFileStream");
-_LIT(KEFileStreamText,					"EFileStreamText");
-_LIT(KEFileRead,	 					"EFileRead");
-_LIT(KEFileWrite,						"EFileWrite");
-_LIT(KEFileReadAsyncAll,	 			"EFileReadAsyncAll");
-
-
-// Seek
-_LIT(KESeekStart,						"ESeekStart");
-_LIT(KESeekCurrent,						"ESeekCurrent");
-_LIT(KESeekEnd,							"ESeekEnd");
-
-///	Commands
-_LIT(KCmdNew,							"new");
-_LIT(KCmdClose,							"Close");
-_LIT(KCmdDestructor,					"~");
-_LIT(KCmdBlockMap,						"BlockMap");
-_LIT(KCmdOpen,							"Open");
-_LIT(KCmdCreate,						"Create");
-_LIT(KCmdWrite,							"Write");
-_LIT(KCmdReplace, 						"Replace");
-_LIT(KCmdRead,							"Read");
-_LIT(KCmdFlush,							"Flush");
-_LIT(KCmdTemp,							"Temp");
-_LIT(KCmdRename,						"Rename");
-_LIT(KCmdSeek,							"Seek");
-_LIT(KCmdReadCancel,					"ReadCancel");
-_LIT(KCmdLock,							"Lock");
-_LIT(KCmdUnLock,						"UnLock");
-_LIT(KCmdSize, 							"Size");
-_LIT(KCmdSetSize, 						"SetSize");
-_LIT(KCmdAtt,							"Att");
-_LIT(KCmdSetAtt,						"SetAtt");
-_LIT(KCmdModified, 						"Modified");
-_LIT(KCmdSetModified,					"SetModified");
-_LIT(KCmdSet,							"Set");
-_LIT(KCmdChangeMode, 					"ChangeMode");
-_LIT(KCmdDrive,							"Drive");
-_LIT(KCmdDuplicate, 					"Duplicate");
-_LIT(KCmdName,							"Name");
-_LIT(KCmdFullName,						"FullName");
-
-
-//Attributes
-_LIT(KDEntryAttNormal,  				"KEntryAttNormal");
-_LIT(KDEntryAttReadOnly, 				"KEntryAttReadOnly");
-_LIT(KDEntryAttArchive,					"KEntryAttArchive");
-_LIT(KDEntryAttHidden,					"KEntryAttHidden");
-_LIT(KDEntryAttSystem,					"KEntryAttSystem");
-_LIT(KDEntryAttVolume,					"KEntryAttVolume");
-_LIT(KDEntryAttDir,						"KEntryAttDir");
-_LIT(KDEntryAttXIP,						"KEntryAttXIP");
-_LIT(KDEntryAttRemote,					"KEntryAttRemote");
-
-//constants
-const TInt KDefaultDescSize = 64;
-
-/*@}*/
-
-CT_FileData* CT_FileData::NewL()
-/**
- * Two phase constructor
- */
-	{
-	CT_FileData* ret = new (ELeave) CT_FileData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-
-CT_FileData::CT_FileData()
-/**
- * Protected constructor. First phase construction
- */
-:	iFile(NULL)
-	{
-	}
-
-void CT_FileData::ConstructL()
-/**
- * Protected constructor. Second phase construction
- */
-	{
-	iFileOpened = EFalse;
-	}
-
-CT_FileData::~CT_FileData()
-/**
- * Destructor.
- */
-	{
-	DoCleanup();
-	}
-
-void CT_FileData::DoCleanup()
-/**
- * Contains cleanup implementation
- */
-	{
-	//Deleting RFile.
-	if(iFile != NULL)
-		{
-		INFO_PRINTF1(_L("Deleting current RFile"));
-		delete iFile;
-		iFile = NULL;
-		}
-	iReadCallbackArray.Close();
-	iWriteCallbackArray.Close();
-	iFlushCallbackArray.Close();
-	}
-
-TAny* CT_FileData::GetObject()
-/**
- * Return a pointer to the object that the data wraps
- *
- * @return pointer to the object that the data wraps
- */
-	{
-	return iFile;
-	}
-
-TBool CT_FileData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
-/**
- * Process a command read from the ini file
- *
- * @param aCommand	the command to process
- * @param aSection		the entry in the ini file requiring the command to be processed
- * @param aAsyncErrorIndex the index of asynchronous command error code belongs to.
- *
- * @return ETrue if the command is processed
- */
-	{
-	TBool retVal = ETrue;
-
-	if (aCommand == KCmdNew)
-		{
-		DoCmdNewL();
-		}
-	else if (aCommand == KCmdDestructor)
-		{
-		DoCmdDestructor();
-		}
-	else if (aCommand == KCmdOpen)
-		{
-		DoCmdOpenL(aSection);
-		}
-	else if (aCommand == KCmdWrite)
-		{
-		DoCmdWriteL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdClose)
-		{
-		DoCmdClose();
-		}
-	else if (aCommand == KCmdCreate)
-		{
-		DoCmdCreateL(aSection);
-		}
-	else if (aCommand == KCmdReplace)
-		{
-		DoCmdReplaceL(aSection);
-		}
-	else if (aCommand == KCmdRead)
-		{
-		DoCmdReadL(aSection, aAsyncErrorIndex);
-		}	
-	else if (aCommand == KCmdFlush)
-		{
-		DoCmdFlushL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdTemp)
-		{
-		DoCmdTempL(aSection);
-		}	
-	else if (aCommand == KCmdRename)
-		{
-		DoCmdRenameL(aSection);
-		}
-	else if (aCommand == KCmdSeek)
-		{
-		DoCmdSeekL(aSection);
-		}
-	else if (aCommand == KCmdReadCancel)
-		{
-		DoCmdReadCancelL(aSection);
-		}	
-	else if (aCommand == KCmdLock)
-		{
-		DoCmdLockL(aSection);
-		}
-	else if (aCommand == KCmdUnLock)
-		{
-		DoCmdUnLockL(aSection);
-		}
-	else if (aCommand == KCmdSize)
-		{
-		DoCmdSizeL(aSection);
-		}		
-	else if (aCommand == KCmdSetSize)
-		{
-		DoCmdSetSizeL(aSection);
-		}
-	else if (aCommand == KCmdAtt)
-		{
-		DoCmdAttL(aSection);
-		}		
-	else if (aCommand == KCmdSetAtt)
-		{
-		DoCmdSetAttL(aSection);
-		}		
-	else if (aCommand == KCmdModified)
-		{
-		DoCmdModifiedL(aSection);
-		}
-	else if (aCommand == KCmdSetModified)
-		{
-		DoCmdSetModifiedL(aSection);
-		}
-	else if (aCommand == KCmdSet)
-		{
-		DoCmdSetL(aSection);
-		}
-	else if (aCommand == KCmdChangeMode)
-		{
-		DoCmdChangeModeL(aSection);
-		}
-	else if (aCommand == KCmdDrive)
-		{
-		DoCmdDriveL(aSection);
-		}
-	else if (aCommand == KCmdName)
-		{
-		DoCmdNameL(aSection);
-		}
-	else if (aCommand == KCmdDuplicate)
-		{
-		DoCmdDuplicateL(aSection);
-		}
-	else if (aCommand == KCmdFullName)
-		{
-		DoCmdFullName(aSection);
-		}
-	else if (aCommand == KCmdBlockMap)
-		{
-		DoCmdBlockMap(aSection);
-		}
-	else
-		{
-		retVal = EFalse;
-		}
-	return retVal;
-	}
-
-void CT_FileData::DoCmdNewL()
-/** Creates new RFile class instance */
-	{
-	//Deletes previous RFile class instance if it was already created.
-	DoCleanup();
-
-	INFO_PRINTF1(_L("Create new RFile class instance"));
-
-	// do create
-	TRAPD(err, iFile = new (ELeave) RFile());
-	if ( err!=KErrNone )
-		{
-		ERR_PRINTF2(_L("Error returned by New()%d"), err);
-		SetError(err);
-		}
-	}
-
-void CT_FileData::DoCmdDestructor()
-/** Destroy RFile the object */
-	{
-	DoCleanup();
-	}
-
-void CT_FileData::DoCmdOpenL(const TDesC& aSection)
-/**	Opens files */
-	{
-	RFs*	rfsObject=NULL;
-	TPtrC	rfsObjectName;
-	TBool	dataOk=GET_MANDATORY_STRING_PARAMETER(KRFsName(), aSection, rfsObjectName);
-	if ( dataOk )
-		{
-		rfsObject=(RFs*)GetDataObjectL(rfsObjectName);
-		}
-
-	TPtrC	filePath;
-	if ( !GET_MANDATORY_STRING_PARAMETER(KFile(), aSection, filePath) )
-		{
-		dataOk=EFalse;
-		}
-
-	TUint	fileMode = 0;
-	if ( !GetFileModeL(KFileMode, aSection, fileMode) )
-		{
-		ERR_PRINTF2(_L("Open() error reading parameter. %S"), &KFileMode());
-		SetBlockResult(EFail);
-		dataOk=EFalse;
-		}
-
-	if ( dataOk )
-		{
-		if (rfsObject)
-			{
-			TInt	err = iFile->Open(*rfsObject, filePath, fileMode);
-			if ( err!=KErrNone )
-				{
-				ERR_PRINTF2(_L("Open() failed with Error:%d"), err);
-				SetError(err);
-				}
-			else
-				{
-				iFileOpened = true;
-				}
-			}
-		else
-			{
-			ERR_PRINTF1(_L("RFs object is NULL"));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-
-void CT_FileData::DoCmdClose()
-/** Close file	 */
-	{
-	INFO_PRINTF1(_L("Closing RFile"));
-	iFile->Close();
-	}
-
-void CT_FileData::DoCmdCreateL(const TDesC& aSection)
-/** create a new file */
-	{
-	RFs*	rfsObject=NULL;
-	TPtrC	rfsObjectName;
-	TBool	dataOk = ETrue;
-	if ( GET_MANDATORY_STRING_PARAMETER(KRFsName, aSection, rfsObjectName) )
-		{
-		rfsObject=(RFs*)GetDataObjectL(rfsObjectName);
-		}
-	else
-		{
-		dataOk = EFalse;
-		}
-
-	//	Gets name of file from ini file.
-	TPtrC	name;
-	if ( !GET_MANDATORY_STRING_PARAMETER(KUParamName(), aSection, name) )
-		{
-		dataOk = EFalse;
-		}
-
-	TUint	fileMode = 0;
-	if ( !GetFileModeL(KFileMode, aSection, fileMode) )
-		{
-		ERR_PRINTF2(_L("Create() error reading parameter. %S"), &KFileMode());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	if ( dataOk )
-		{
-		//	Creates and opens a new file for writing.
-		if (rfsObject)
-			{
-			TInt	err = iFile->Create(*rfsObject, name, fileMode);
-			if ( err!=KErrNone )
-				{
-				ERR_PRINTF2(_L("Create(), error create() = %d"), err);
-				SetError(err);
-				}
-			}
-		else
-			{
-			ERR_PRINTF1(_L("RFs object is NULL"));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-	
-void CT_FileData::DoCmdReplaceL(const TDesC& aSection)
-/** replace a existing file or create new */
-	{
-	TPtrC rfsObjectName;
-	RFs* rfsObject = NULL;
-	
-	TBool	dataOk = ETrue;
-	if ( GET_MANDATORY_STRING_PARAMETER(KRFsName, aSection, rfsObjectName) )
-		{
-		rfsObject=(RFs*)GetDataObjectL(rfsObjectName);
-		}
-
-	//	Gets name of file from ini file.
-	TPtrC path;
-	if (!GET_MANDATORY_STRING_PARAMETER(KFile(), aSection, path))
-		{
-		dataOk = EFalse;
-		}
-	
-	TUint fileMode = 0;
-	if(!GetFileModeL(KFileMode, aSection, fileMode))
-		{
-		ERR_PRINTF2(_L("Replace() error reading parameter. %S"), &KFileMode());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	//	Creates and opens a new file for writing.
-	if ( dataOk )
-		{
-		//	Creates and opens a new file for writing.
-		if (rfsObject)
-			{
-			TInt	err = iFile->Replace(*rfsObject, path, fileMode);
-			if ( err!=KErrNone )
-				{
-				ERR_PRINTF2(_L("Replace() failed with error = %d"), err);
-				SetError(err);
-				}
-			else
-				{
-				iFileOpened = ETrue;
-				INFO_PRINTF2(_L("File: %S is replaced successfuly"), &path);				
-				}
-			}
-		else
-			{
-			ERR_PRINTF1(_L("RFs object is NULL"));
-			SetBlockResult(EFail);
-			}
-		}
-
-	}	
-
-void CT_FileData::DoCmdReadL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-/** wrapper for read commands */
-	{
-	TBool async = EFalse;
-		if(GET_OPTIONAL_BOOL_PARAMETER(KUParamAsync, aSection, async))
-			{
-			if (async)
-				{
-				DoAsynchronousReadsL(aSection, aAsyncErrorIndex);	
-				}
-			else
-				{
-				DoSynchronousReadsL(aSection);
-				}
-			
-			}
-		else
-			{
-			DoSynchronousReadsL(aSection);
-			}
-	}
-
-TBool CT_FileData::GetFileModeL(const TDesC& aParameterName, const TDesC& aSection, TUint& aFileMode)
-/** process the filemode from ini  */
-	{
-	TBool ret = ETrue;
-	
-	TPtrC aModeStr;
-	
-	if(GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, aModeStr))
-		{
-		//break the file mode string to array of file modes
-		//in case there's more than one filemode		
-		RPointerArray<HBufC> fileModes = SplitL(aModeStr, "|");		
-			
-		for ( int i = 0 ; i < fileModes.Count() ; i++ )
-			{
-			if (*fileModes[i] == KEFileShareExclusive)
-				{
-				aFileMode = aFileMode | EFileShareExclusive ;
-				}
-			else if (*fileModes[i] ==  KEFileShareReadersOnly)
-				{
-				aFileMode = aFileMode | EFileShareReadersOnly;
-				}
-			else if (*fileModes[i] ==  KEFileShareAny)
-				{
-				aFileMode = aFileMode | EFileShareAny;
-				}		
-			else if (*fileModes[i] ==  KEFileShareReadersOrWriters)
-				{
-				aFileMode = aFileMode | EFileShareReadersOrWriters;
-				}					
-			else if (*fileModes[i] ==  KEFileStream)
-				{
-				aFileMode = aFileMode | EFileStream;
-				}					
-			else if (*fileModes[i] ==  KEFileStreamText)
-				{
-				aFileMode = aFileMode | EFileStreamText;
-				}					
-			else if (*fileModes[i] ==  KEFileRead)
-				{
-				aFileMode = aFileMode | EFileRead;
-				}					
-			else if (*fileModes[i] ==  KEFileWrite)
-				{
-				aFileMode = aFileMode | EFileWrite;
-				}
-			else if (*fileModes[i] ==  KEFileReadAsyncAll)
-				{
-				aFileMode = aFileMode | EFileReadAsyncAll;
-				}
-			else
-				{
-				aFileMode = EFileShareAny;
-				ret = EFalse;
-				}
-			}
-			
-		for (int j=0 ; j<fileModes.Count() ; j++)
-			{
-			HBufC* temp = fileModes[j];
-			delete temp;
-			temp = NULL;
-			}
-			
-		fileModes.Close();
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	}
-
-
-void CT_FileData::DoSynchronousReadsL(const TDesC& aSection)
-/** process all synchronous reads */
-	{	
-	TInt length;
-	TInt pos;
-	
-	HBufC8* filedata = NULL;	
-	TInt bufferLength;
-	
-//get optional buffer length from ini file	
-	if (GET_OPTIONAL_INT_PARAMETER(KUParamBufferLength, aSection, bufferLength))
-		{
-		filedata = HBufC8::NewLC(bufferLength);
-		}
-	else
-		{
-		filedata = HBufC8::NewLC(KDefaultDescSize);
-		}
-				
-		
-	TPtr8 filedataPtr = filedata->Des();
-	TInt err = 0;
-//devide which read to call, by switching between parameters fetched from ini file.	
-	if(GET_OPTIONAL_INT_PARAMETER(KUParamLength, aSection, length))
-		{
-		if(GET_OPTIONAL_INT_PARAMETER(KUParamPos, aSection, pos))
-			{
-			INFO_PRINTF1(_L("calling RFile::Read(TInt& aPos, TDes8 &aData, TInt aLen)"));
-			err = iFile->Read(pos, filedataPtr, length);
-			HandleExpectedString(filedataPtr, aSection);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("calling RFile::Read(TDes8 &aData, TInt aLen)"));
-			err = iFile->Read(filedataPtr, length);
-			HandleExpectedString(filedataPtr, aSection);
-			}
-		}
-	else
-		{
-		if(GET_OPTIONAL_INT_PARAMETER(KUParamPos, aSection, pos))
-			{
-			INFO_PRINTF1(_L("calling RFile::Read(TInt& aPos, TDes8 &aData)"));
-			err = iFile->Read(pos, filedataPtr);
-			HandleExpectedString(filedataPtr, aSection);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("calling RFile::Read(TDes8 &aData)"));
-			err = iFile->Read(filedataPtr);
-			HandleExpectedString(filedataPtr, aSection);
-			}
-		}
-		
-	TBuf<KDefaultDescSize> filedata16;
-	filedata16.Copy(filedataPtr);
-	INFO_PRINTF2(_L("read \"%S\" from file"), &filedata16);		
-		
-//did the read complete with error code?		
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("error executing synchronous read %d"), err);
-		SetError(err);
-		}
-		
-	CleanupStack::PopAndDestroy(1);		
-		
-	}
-		
-void CT_FileData::DoAsynchronousReadsL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-/**process all asynchronous reads */
-	{
-	TInt length;
-	TInt pos;
-	
-	CT_FileActiveCallback* active = CT_FileActiveCallback::NewL(*this);
-	iReadCallbackArray.Append(active);
-		
-	TInt bufferLength;
-	
-	//Get the buffer length, and create the buffer for activeCallback object
-	if (GET_OPTIONAL_INT_PARAMETER(KUParamBufferLength, aSection, bufferLength))
-		{
-		active->CreateFileDataBufferL(bufferLength);
-		}
-	else
-		{
-		active->CreateFileDataBufferL(KDefaultDescSize);
-		}	
-		
-	TPtr8 fileDataPtr = active->iFileData->Des();
-		
-	//decide which read to call	
-	if(GET_OPTIONAL_INT_PARAMETER(KUParamLength, aSection, length))
-		{
-		if(GET_OPTIONAL_INT_PARAMETER(KUParamPos, aSection, pos))
-			{
-			INFO_PRINTF1(_L("calling RFile::Read(TInt& aPos, TDes8 &aData, TInt aLen, TRequestiStatus aiStatus)"));
-			iFile->Read(pos, fileDataPtr, length,active->iStatus);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("calling RFile::Read(TDes8 &aData, TInt aLen, TRequestiStatus aiStatus)"));
-			iFile->Read(fileDataPtr, length, active->iStatus);
-			}
-		}
-	else
-		{
-		if(GET_OPTIONAL_INT_PARAMETER(KUParamPos, aSection, pos))
-			{
-			INFO_PRINTF1(_L("calling RFile::Read(TInt& aPos, TDes8 &aData, TRequestiStatus aiStatus)"));
-			iFile->Read(pos, fileDataPtr, active->iStatus);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("calling RFile::Read(TDesC &aData, TRequestiStatus aiStatus)"));
-			iFile->Read(fileDataPtr, active->iStatus);
-			}
-		}
-		
-	//acitvate callback object
-	active->SetSection(aSection);
-	active->Activate(aAsyncErrorIndex);
-	IncOutstanding();
-
-	}
-	
-	
-void CT_FileData::HandleExpectedString(const TDesC& aReadedData, const TDesC& aSection)
-/** compare the expected string with readed string, takes 16-bit parameter*/
-	{
-	TPtrC expectedString;
-	if(GET_OPTIONAL_STRING_PARAMETER(KUParamExpectedString, aSection, expectedString))
-		{
-		if (aReadedData == expectedString)
-			{
-			INFO_PRINTF1(_L("expected string matches with the data read"));			
-			}
-		else
-			{
-			ERR_PRINTF1(_L("expected string does not match with the data read"));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-	
-
-void CT_FileData::HandleExpectedString(const TDesC8& aReadedData, const TDesC& aSection)
-/** compare the expected string with readed string, takes 16-bit parameter */
-	{
-	TBuf<KDefaultDescSize> readedData16;
-	readedData16.Copy(aReadedData);
-	TPtrC expectedString;
-	if(GET_OPTIONAL_STRING_PARAMETER(KUParamExpectedString, aSection, expectedString))
-		{
-		if (readedData16 == expectedString)
-			{
-			INFO_PRINTF1(_L("expected string matches with the data read"));			
-			}
-		else
-			{
-			ERR_PRINTF1(_L("expected string does not match with the data read"));
-			SetBlockResult(EFail);
-			}
-		}
-	}		
-	
-	
-void CT_FileData::DoCmdFlushL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-/** flush all the internal buffers to file */
-	{
-	TBool async = false;
-	TInt err = 0;
-	//get the parameter from ini, to decide which version of RFile::Flush to call
-	GET_OPTIONAL_BOOL_PARAMETER(KUParamAsync, aSection, async);
-	if (async == true)
-		{		
-		CActiveCallback* active = CActiveCallback::NewL(*this);
-		iFlushCallbackArray.Append( active );
-		iFile->Flush(active->iStatus);
-		active->Activate(aAsyncErrorIndex);
-		IncOutstanding();
-		}
-	else
-		{
-		err = iFile->Flush();
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Flush() failed with error code. %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Succesfully flushed the file"));
-			}
-		}	
-	}	
-	
-
-void CT_FileData::DoCmdTempL(const TDesC& aSection)
-/* create temporary file */
-	{
-	
-	TPtrC rfsObjectName;
-	RFs* rfsObject = NULL;
-	
-	TBool	dataOk=GET_MANDATORY_STRING_PARAMETER(KRFsName, aSection, rfsObjectName);
-	if ( dataOk )
-		{
-		rfsObject=(RFs*)GetDataObjectL(rfsObjectName);
-		}
-
-	//	Gets name of file from ini file.
-	TPtrC path;
-	if (!GET_MANDATORY_STRING_PARAMETER(KUParamPath(), aSection, path))
-		{
-		dataOk=EFalse;
-		}
-	
-	TUint fileMode = 0;
-	if(!GetFileModeL(KFileMode, aSection, fileMode))
-		{
-		ERR_PRINTF2(_L("Temp() error reading parameter. %S"), &KFileMode());
-		SetBlockResult(EFail);
-		dataOk=EFalse;
-		}
-
-	//	Creates Temporary file.
-	TFileName fileName;
-	if ( dataOk )
-		{
-		if (rfsObject)
-			{
-			TInt	err = iFile->Temp(*rfsObject, path, fileName,fileMode);
-			INFO_PRINTF2(_L("File: %S is created"), &fileName);			
-			if ( err!=KErrNone )
-				{
-				ERR_PRINTF2(_L("Temp() failed with error = %d"), err);
-				SetError(err);
-				}
-			else
-				{
-				iFileOpened = ETrue;				
-				}				
-			}
-		else
-			{
-			ERR_PRINTF1(_L("RFs object is NULL"));
-			SetBlockResult(EFail);
-			}
-		}	
-	
-	}	
-	
-void CT_FileData::DoCmdRenameL(const TDesC& aSection)
-/** rename the file */
-	{
-	
-	TPtrC newName;
-	//get the name from ini and rename the file.
-	if(GET_MANDATORY_STRING_PARAMETER(KUParamName(), aSection, newName))
-		{	
-		TInt err = iFile->Rename(newName);
-	
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Rename() failed with error code %d"), err);
-			SetError(err);
-			}
-		}
-	
-	}	
-	
-void CT_FileData::DoCmdSeekL(const TDesC& aSection)
-/** set the file cursor to specified location in file */
-	{
-	TSeek seek = ESeekStart;
-	TBool dataOk = EFalse;
-	TInt pos;
-
-	//convert the mode string from ini to TSeek
-	if(ConvertToSeek(KSeek, aSection,seek))
-		{
-		dataOk = GET_MANDATORY_INT_PARAMETER(KUParamPos(), aSection, pos);		
-		}	
-		
-	if(dataOk)
-		{
-		TInt err = iFile->Seek(seek, pos);
-	
-		if(err != KErrNone)	
-			{
-			ERR_PRINTF2(_L("Seek(), error seeking() = %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Succesfully seeked the file"));
-			}
-		}
-	}	
-	
-TBool CT_FileData::ConvertToSeek(const TDesC& aParameterName, const TDesC& aSection, TSeek& aSeek)
-/** convert a seek mode string from ini to TSeek */
-	{
-	TBool ret = ETrue;
-	
-	TPtrC aModeStr;
-	
-	if(GET_MANDATORY_STRING_PARAMETER(aParameterName, aSection, aModeStr))
-		{
-		
-		if (aModeStr == KESeekStart)
-			{
-			aSeek = ESeekStart;
-			}
-		else if (aModeStr == KESeekCurrent)
-			{
-			aSeek = ESeekCurrent;
-			}
-		else if (aModeStr == KESeekEnd)
-			{
-			aSeek = ESeekEnd;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	}	
-	
-	
-void CT_FileData::DoCmdReadCancelL(const TDesC& aSection)
-/** wrapper for readcancels */
-	{
-	
-	TBool cancelAll;
-	
-	//decide which ReadCancel to call
-	if(GET_OPTIONAL_BOOL_PARAMETER(KUParamCancelAll, aSection, cancelAll))
-		{
-		if (cancelAll == true)
-			{
-			ReadCancelAll();
-			}
-		else
-			{
-			ReadCancel();
-			}
-		}
-	else
-		{
-		ReadCancel();
-		}
-	}	
-		
-void CT_FileData::ReadCancel()
-/** will cancel the last active request by default */
-	{
-	iFile->ReadCancel(iReadCallbackArray[iReadCallbackArray.Count()-1]->iStatus);
-	}
-	
-void CT_FileData::ReadCancelAll()
-/** cancel all outstanding read requests */
-	{
-	iFile->ReadCancel();
-	}
-
-// the write implementation
-void CT_FileData::DoCmdWriteL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-/** wrapper for write commands */
-	{
-	TBool async = EFalse;
-	//decide which write to call
-	GET_OPTIONAL_BOOL_PARAMETER(KUParamAsync, aSection, async);
-	if (async == true)
-		{
-		DoAsynchronousWritesL(aSection, aAsyncErrorIndex);	
-		}
-	else
-		{
-		DoSynchronousWritesL(aSection);
-		}
-	}
-	
-void CT_FileData::DoAsynchronousWritesL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-/** call asynchronous writes */
-	{
-	HBufC8* dataWrite8;
-	TInt bufferLength;
-	
-	//Get the buffer length, and create the buffer for activeCallback object
-	if (GET_OPTIONAL_INT_PARAMETER(KUParamBufferLength, aSection, bufferLength))
-		{
-		dataWrite8 = HBufC8::NewLC(bufferLength);
-		}
-	else
-		{
-		dataWrite8 = HBufC8::NewLC(KDefaultDescSize);
-		}	
-	TPtr8 data8Ptr = dataWrite8->Des();
-	
-	TPtrC data;
-	// Get the data to write
-	if(GET_MANDATORY_STRING_PARAMETER(KUParamData(), aSection, data))
-		{
-		//convert it to 8-bit
-		data8Ptr.Copy(data);
-		
-		CActiveCallback* active = CActiveCallback::NewL(*this);
-	
-		iWriteCallbackArray.Append( active );
-		
-		TInt length;
-		TInt pos;	
-		//now, decide which read to call
-		if(GET_OPTIONAL_INT_PARAMETER(KUParamLength, aSection, length))
-			{
-			if(GET_OPTIONAL_INT_PARAMETER(KUParamPos, aSection, pos))
-				{
-				INFO_PRINTF1(_L("calling RFile::Write(TInt& aPos, TDesC8 &aData, TInt aLen, TRequestStatus &aStatus)"));
-				iFile->Write(pos, *dataWrite8, length, active->iStatus);
-				}
-			else
-				{
-				INFO_PRINTF1(_L("calling RFile::Write(TDesC8 &aData, TInt aLen, , TRequestStatus &aStatus)"));
-				iFile->Write(*dataWrite8, length, active->iStatus);
-				}
-			}
-		else
-			{
-			if(GET_OPTIONAL_INT_PARAMETER(KUParamPos, aSection, pos))
-				{
-				INFO_PRINTF1(_L("calling RFile::Write(TInt& aPos, TDesC8 &aData, TRequestStatus &aStatus)"));
-				iFile->Write(pos, *dataWrite8, active->iStatus);
-				}
-			else
-				{
-				INFO_PRINTF1(_L("calling RFile::Write(TDesC8 &aData, TRequestStatus &aStatus)"));
-				iFile->Write(*dataWrite8, active->iStatus);
-				}
-			}
-			
-		active->Activate(aAsyncErrorIndex);
-		IncOutstanding();
-		}
-
-	CleanupStack::PopAndDestroy();	
-	}
-	
-void CT_FileData::DoSynchronousWritesL(const TDesC& aSection)
-/** cakk synchronous writes */
-	{
-	HBufC8* dataWrite8;
-	TInt bufferLength;
-	
-	//Get the buffer length, and create the buffer for activeCallback object
-	if (GET_OPTIONAL_INT_PARAMETER(KUParamBufferLength, aSection, bufferLength))
-		{
-		dataWrite8 = HBufC8::NewLC(bufferLength);
-		}
-	else
-		{
-		dataWrite8 = HBufC8::NewLC(KDefaultDescSize);
-		}	
-	TPtr8 data8Ptr = dataWrite8->Des();
-	TInt err = 0;
-	
-	TPtrC data;	
-	// get the data
-	if (GET_MANDATORY_STRING_PARAMETER(KUParamData(), aSection, data))
-		{
-		//convert it to 8-bit		
-		data8Ptr.Copy(data);
-		
-		TInt length;
-		TInt pos;
-		
-		//will decide which write to call 
-		if(GET_OPTIONAL_INT_PARAMETER(KUParamLength, aSection, length))
-			{
-			if(GET_OPTIONAL_INT_PARAMETER(KUParamPos, aSection, pos))
-				{
-				INFO_PRINTF1(_L("calling RFile::Write(TInt& aPos, TDesC8 &aData, TInt aLen)"));
-				err = iFile->Write(pos, *dataWrite8, length);
-				}
-			else
-				{
-				INFO_PRINTF1(_L("calling RFile::Write(TDesC8 &aData, TInt aLen)"));
-				err = iFile->Write(*dataWrite8, length);
-				}
-			}
-		else
-			{
-			if(GET_OPTIONAL_INT_PARAMETER(KUParamPos, aSection, pos))
-				{
-				INFO_PRINTF1(_L("calling RFile::Write(TInt& aPos, TDesC8 &aData)"));
-				err = iFile->Write(pos, *dataWrite8);
-				}
-			else
-				{
-				INFO_PRINTF1(_L("calling RFile::Write(TDesC8 &aData)"));
-				err = iFile->Write(*dataWrite8);
-				}
-			}
-			
-		if (err == KErrNone)
-			{
-			INFO_PRINTF2(_L("written \"%S\" to file"), &data);
-			}
-		else
-			{
-			ERR_PRINTF2(_L("Error executing synchronous write %d"), err);
-			SetError(err);
-			}
-		}
-	CleanupStack::PopAndDestroy();	
-	}	
-	
-void CT_FileData::DoCmdLockL(const TDesC& aSection)
-/** lock a region in file */
-	{
-	
-	TInt pos=0;
-	TBool dataOk = ETrue;
-	
-	//get the position
-	if(!GET_MANDATORY_INT_PARAMETER(KUParamPos(), aSection, pos))
-		{
-		dataOk = EFalse;
-		}
-		
-	TInt length=0;	
-	
-	// get the length
-	if(!GET_MANDATORY_INT_PARAMETER(KUParamLength(), aSection, length))
-		{
-		dataOk = EFalse;
-		}
-	
-	//Lock!!
-	if (dataOk)
-		{
-		TInt err = iFile->Lock(pos, length);
-		
-		if(err!=KErrNone)
-			{
-			ERR_PRINTF2(_L("Lock() error locking file. %d"), err);
-			SetError(err);	
-			}	
-		}
-
-	}	
-	
-	
-void CT_FileData::DoCmdUnLockL(const TDesC& aSection)
-/** unlock a region that has been previously locked */
-	{
-	TBool dataOk = ETrue;
-	
-	TInt pos=0;
-	
-	//get the position
-	if(!GET_MANDATORY_INT_PARAMETER(KUParamPos(), aSection, pos))
-		{
-		dataOk = EFalse;
-		}
-
-	TInt length=0;
-	
-	// get the length
-	if(!GET_MANDATORY_INT_PARAMETER(KUParamLength(), aSection, length))
-		{
-		dataOk = EFalse;
-		}
-	
-	//call UnLock
-	if (dataOk)
-		{
-		TInt err = iFile->UnLock(pos, length);
-		
-		if(err!=KErrNone)
-			{
-			ERR_PRINTF2(_L("UnLock() error unlocking file. %d"), err);
-			SetError(err);	
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Succesfully unlocked the file"));
-			}
-		}
-	
-	}	
-	
-	
-void CT_FileData::DoCmdSizeL(const TDesC& aSection)
-/** get file size */
-	{
-	
-	TInt expectedSize =  0;
-	
-	TInt size = 0;
-	TInt err = iFile->Size(size);
-	INFO_PRINTF2(_L("The Size of the file is %d bytes"), size);	
-	
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("Size() error getting file size. %d"), err);
-		SetError(err);
-		}
-	else
-		{
-		//get expected size from ini
-		if(GET_OPTIONAL_INT_PARAMETER(KUParamExpectedSize(), aSection, expectedSize))		
-			{
-			if(expectedSize != size)
-				{
-				ERR_PRINTF3(_L("The file size does not match the expected size %d != %d"), size, expectedSize)				
-				SetBlockResult(EFail);
-				}
-			}
-		}
-	
-	}
-
-void CT_FileData::DoCmdSetSizeL(const TDesC& aSection)
-/** set file size */
-	{
-	TInt size=0;
-	
-	if(GET_MANDATORY_INT_PARAMETER(KUParamSize(), aSection, size))
-		{
-		TInt err = iFile->SetSize(size);
-		
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetSize() error setting file size. %d"), err);
-			SetError(err);	
-			}
-		else
-			{
-			INFO_PRINTF2(_L("The Size of the fail is set to %d bytes"), size);	
-			}			
-		}
-	}	
-	
-void CT_FileData::DoCmdAttL(const TDesC& aSection)
-/** get file attributes */
-	{
-	
-	TUint attValue = 0;
-	
-	TInt err = iFile->Att(attValue);
-	
-	PrintFileAttributes(attValue);
-	
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("Att() getting attributes. %d"), err);
-		SetError(err);	
-		}
-	else
-		{
-		TUint bitmask = 0x000000FF;
-		//lets filter out symbian specific bits
-		attValue = attValue & bitmask;
-			
-		TUint attCompare = 0;
-		
-		//compare the expected att value with the file attributes
-		if (ConvertToAttributeL(KUParamCompareValue, aSection, attCompare))
-			{
-			if (attCompare == attValue)
-				{
-				INFO_PRINTF1(_L("attributes match"));
-				}
-			else
-				{
-				ERR_PRINTF1(_L("Attributes does not match"));
-				SetBlockResult(EFail);
-				}
-			}
-				
-		}
-	
-	}
-	
-void CT_FileData::DoCmdSetAttL(const TDesC& aSection)
-/** set file attributes */
-	{
-	
-	TUint setAttMask = 0;
-	TBool dataOk = ETrue;
-	
-	//get the attribute mask to set
-	if(!ConvertToAttributeL(KUParamSetAttMask, aSection, setAttMask))
-		{
-		ERR_PRINTF2(_L("SetATt() error reading parameter. %S"), &KUParamSetAttMask());
-		SetBlockResult(EFail);	
-		dataOk = EFalse;
-		}
-		
-	TUint clearAttMask = 0;
-	
-	//get the attribute mask to clear
-	if(!ConvertToAttributeL(KUParamClearAttMask, aSection, clearAttMask))
-		{
-		ERR_PRINTF2(_L("SetAtt() error reading parameter. %S"), &KUParamClearAttMask());
-		SetBlockResult(EFail);	
-		dataOk = EFalse;
-		}
-		
-	// all ok? let's call SetAtt		
-	if (dataOk)
-		{
-		TInt err = iFile->SetAtt(setAttMask, clearAttMask);
-		
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetAtt() failed with, err: %d"), err);
-			SetError(err);	
-			}
-		else
-			{
-			INFO_PRINTF1(_L("The attribute value has been set"));	
-			}	
-		}
-		
-	}	
-	
-	
-TBool CT_FileData::ConvertToAttributeL(const TDesC& aParameterName, const TDesC& aSection, TUint& aAttribute)
-/** convert attribute string from ini to file attribute bitmask */
-	{
-	TBool ret = ETrue;
-	
-	TPtrC aModeStr;
-	
-	if(GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, aModeStr))
-		{
-		//break the file mode string to array of file modes
-		//in case there's more than one filemode		
-		RPointerArray<HBufC> fileModes = SplitL(aModeStr, "|");		
-			
-		for ( int i = 0 ; i < fileModes.Count() ; i++ )
-			{
-			if (aModeStr == KDEntryAttNormal)
-				{
-				aAttribute = aAttribute | KEntryAttNormal;
-				}
-			else if (aModeStr == KDEntryAttReadOnly)
-				{
-				aAttribute = aAttribute | KEntryAttReadOnly;
-				}
-			else if (aModeStr == KDEntryAttArchive)
-				{
-				aAttribute = aAttribute | KEntryAttArchive;
-				}
-			else if (aModeStr == KDEntryAttHidden)
-				{
-				aAttribute = aAttribute | KEntryAttHidden;
-				}
-
-			else if (aModeStr == KDEntryAttSystem)
-				{
-				aAttribute = aAttribute | KEntryAttSystem;
-				}
-
-			else if (aModeStr == KDEntryAttVolume)
-				{
-				aAttribute = aAttribute | KEntryAttVolume;
-				}
-
-			else if (aModeStr == KDEntryAttDir)
-				{
-				aAttribute = aAttribute | KEntryAttDir;
-				}
-
-			else if (aModeStr == KDEntryAttXIP)
-				{
-				aAttribute = aAttribute | KEntryAttXIP;
-				}
-
-			else if (aModeStr == KDEntryAttRemote)
-				{
-				aAttribute = aAttribute | KEntryAttRemote;
-				}
-			else
-				{
-				ret = EFalse;
-				}
-			}
-			
-		for (int j=0 ; j<fileModes.Count() ; j++)
-			{
-			HBufC* temp = fileModes[j];
-			delete temp;
-			temp = NULL;
-			}
-			
-		fileModes.Close();
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	
-	}	
-	
-void CT_FileData::DoCmdModifiedL(const TDesC& aSection)
-/** get file modification date */
-	{
-	
-	TTime time;
-	
-	TInt err = iFile->Modified(time);
-	
-	_LIT(KDateString,"%E%D%X%N%Y %1 %2 %3");	
-		
-	TBuf<KDefaultDescSize> dateString;
-	
-	//format the time to string	
-	TRAPD(err2, time.FormatL(dateString, KDateString));
-	
-	if(err2 != KErrNone)
-		{
-		ERR_PRINTF2(_L("Modified() error formating date string err: %d"), err);
-		}
-	
-	INFO_PRINTF2(_L("Modified() returned: %S"), &dateString);
-	
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("Modified() failed with, err: %d"), err);
-		SetError(err);	
-		}
-	else
-		{
-		
-		//compare the file modification date with the date readed from inin
-		TPtrC compValue;
-		
-		if (GET_OPTIONAL_STRING_PARAMETER(KUParamCompareValue, aSection, compValue))
-			{
-			
-			TTime compTime;
-			err = compTime.Set(compValue);
-			
-			if ( err != KErrNone )
-				{
-				ERR_PRINTF1(_L("invalid compare value"));
-				}
-			else
-				{
-				if (compTime == time)
-					{
-					INFO_PRINTF1(_L("The dates match"));
-					}
-				else
-					{
-					ERR_PRINTF1(_L("The values do not match"));
-					SetBlockResult(EFail);
-					}
-				}
-				
-			}		
-		}		
-	}
-
-void CT_FileData::DoCmdSetModifiedL(const TDesC& aSection)
-/** set file modification date */
-	{
-	
-	TPtrC dateDesc;
-	TBool dataOk = ETrue;
-	TTime time;
-	TInt err = KErrNone;
-	
-	if(!GET_MANDATORY_STRING_PARAMETER(KUParamDate(), aSection, dateDesc))
-		{
-		dataOk = EFalse;
-		}
-	else
-		{
-		err = time.Set(dateDesc);
-		}
-	
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("time.Set() failed with error code %d"), err);
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-		
-	if (dataOk)
-		{
-		err = iFile->SetModified(time);
-		
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetModified() failed with error code %d"), err);
-			SetError(err);			
-			}		
-		}
-	}
-	
-void CT_FileData::DoCmdSetL(const TDesC& aSection)
-/** set file attributes and modification time */
-	{
-	TPtrC dateDesc;
-	TBool dataOk = ETrue;
-	TInt err = KErrNone;
-	TTime time;
-	
-	//get and process the date string
-	if(!GET_MANDATORY_STRING_PARAMETER(KUParamDate(), aSection, dateDesc))
-		{
-		dataOk = EFalse;
-		}
-	else
-		{
-		err = time.Set(dateDesc);
-		}		
-		
-	TUint setAttMask = 0;
-		
-	// get the attribute masks	
-	if(!ConvertToAttributeL(KUParamSetAttMask, aSection,setAttMask))
-		{
-		dataOk = EFalse;
-		}	
-		
-	TUint clearAttMask = 0;	
-		
-	if(!ConvertToAttributeL(KUParamClearAttMask, aSection, clearAttMask))
-		{
-		dataOk = EFalse;
-		}			
-	// if all Ok then proceed with Set	
-	if (dataOk)
-		{
-		err = iFile->Set(time, setAttMask, clearAttMask);
-		
-		if ( err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Set() failed with error code %d"), err);
-			SetError(err);
-			}		
-		}
-	}
-	
-void CT_FileData::DoCmdChangeModeL(const TDesC& aSection)
-/** Change the file mode */
-	{
-	TUint fileMode = 0;
-	
-	if(!GetFileModeL(KFileMode, aSection, fileMode))
-		{
-		ERR_PRINTF2(_L("Set() error reading parameter. %S"), &KFileMode());
-		SetBlockResult(EFail);	
-		}
-	else
-		{
-		TInt err = iFile->ChangeMode((TFileMode)fileMode);
-		
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF2(_L("ChangeMode() failed with error code %d"), err);
-			SetError(err);
-			}	
-		}
-	}	
-	
-void CT_FileData::DoCmdDriveL(const TDesC& aSection)
-/** Get the drive info, in which the file is stored */
-	{
-	TDriveInfo driveInfo;
-	TInt driveNumber;
-	int err = iFile->Drive(driveNumber, driveInfo);
-	
-	INFO_PRINTF2(_L("TDriveInfo.iType    =%d"), driveInfo.iType);
-	INFO_PRINTF2(_L("TDriveInfo.iBattery =%d"), driveInfo.iBattery);
-	INFO_PRINTF2(_L("TDriveInfo.iDriveAtt=0x%X"), driveInfo.iDriveAtt);
-	INFO_PRINTF2(_L("Drivenumber 		 =%d"), driveNumber);	
-	
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("Drive() failed with error code %d"), err);
-		SetError(err);
-		}
-	else
-		{
-		TInt compDriveNumber;
-			
-		if ( GET_OPTIONAL_INT_PARAMETER(KUParamCompareValue, aSection, compDriveNumber))
-			{
-				if ( compDriveNumber == driveNumber )
-					{
-					INFO_PRINTF3(_L("drivenumbers match %d == %d "), compDriveNumber, driveNumber);
-					}
-				else 
-					{
-					ERR_PRINTF3(_L("drivenumbers do not match %d != %d"), compDriveNumber, driveNumber);
-					SetBlockResult(EFail);
-					}
-			}		
-		}
-	
-	}	
-	
-void CT_FileData::DoCmdDuplicateL(const TDesC& aSection)
-/** Duplicate the file */
-	{
-	TPtrC rFileObjectName;
-	TBool dataOk = GET_MANDATORY_STRING_PARAMETER(KFileObjectName, aSection, rFileObjectName);
-		
-	// get the RFile handle to duplicate	
-	RFile* rFileObject = NULL;
-	if (dataOk)
-		{
-		rFileObject=(RFile*)GetDataObjectL(rFileObjectName);
-	
-		if(rFileObject == NULL)
-			{
-			ERR_PRINTF2(_L("Duplicate() error getting object. %S"), KFileObjectName);
-			SetBlockResult(EFail);	
-			dataOk = EFalse;
-			}
-		}
-		
-	// if handle ok then procees with duplication	
-	if (dataOk)
-		{
-		TOwnerType ownerType;
-			
-		TInt err = KErrNone;	
-		// determine the owner type to pass to duplicate
-		if (ConvertToOwnerType(KUParamOwnerType, aSection, ownerType) && dataOk)
-			{
-			err = iFile->Duplicate(*rFileObject, ownerType);
-			}
-		else
-			{
-			err = iFile->Duplicate(*rFileObject);
-			}
-			
-		
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Duplicate() error duplicating %d"), err);
-			SetError(err);
-			}
-		else
-			{	
-			//lets mark the file to be opened
-			iFileOpened = ETrue;		
-			}
-		}
-	
-	}	
-	
-TBool CT_FileData::ConvertToOwnerType(const TDesC& aParameterName, const TDesC& aSection, TOwnerType& aResult)
-/** convert the ownerType string from ini to EOwnerType */
-	{
-	
-	TBool ret = ETrue;
-	
-	TPtrC ownerTypeString;
-	
-	if(GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, ownerTypeString))
-		{
-		
-		if (ownerTypeString == KEOwnerProcess )
-			{
-			aResult = EOwnerProcess;
-			}
-		else if (ownerTypeString == KEOwnerThread)
-			{
-			aResult = EOwnerThread;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	}	
-	
-void CT_FileData::DoCmdFullName(const TDesC& aSection)
-/** get the file fullname */
-	{
-	TBuf<128> name;
-	TInt err = iFile->FullName(name);
-	
-	INFO_PRINTF2(_L("FullName() returned  %S"), &name);		
-	
-	if(err != KErrNone)
-		{
-		ERR_PRINTF2(_L("FullName() error, returned. %d"), err);
-		SetError(err);	
-		}
-	else
-		{
-		TPtrC path;	
-		if(GET_OPTIONAL_STRING_PARAMETER(KUParamComparePath, aSection, path))
-			{
-			if (path == name)
-				{
-				INFO_PRINTF1(_L("the paths match"));	
-				}
-			else
-				{
-				ERR_PRINTF1(_L("the paths do not match"));
-				SetBlockResult(EFail);
-				}
-			}				
-		}
-	}	
-	
-void CT_FileData::DoCmdNameL(const TDesC& aSection)
-/** get the file name */
-	{
-	TBuf<KDefaultDescSize> name;
-	TInt err = iFile->Name(name);
-	INFO_PRINTF2(_L("Name() returned  %S"), &name);	
-	
-	if(err != KErrNone)
-		{
-		ERR_PRINTF2(_L("Name() error, returned. %d"), err);
-		SetError(err);	
-		}
-	else	
-		{
-		
-				
-		TPtrC compValue;	
-			
-		if (GET_OPTIONAL_STRING_PARAMETER(KUParamCompareValue, aSection, compValue))
-			{
-			if (compValue == name)
-				{
-				INFO_PRINTF3(_L("The names match %S == %S"), &name, &compValue);
-				}
-			else
-				{
-				ERR_PRINTF3(_L("The names do not match %S == %S"), &name, &compValue);			
-				SetBlockResult(EFail);
-				}
-			}		
-		}
-	}	
-
-TBool CT_FileData::ConvertToBlockMapUsage(const TDesC& aParameterName, const TDesC& aSection, TBlockMapUsage& aResult)
-	{
-	
-	TBool ret = ETrue;
-	
-	TPtrC blockmapeUsageString;
-	
-	if(GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, blockmapeUsageString))
-		{
-		
-		if (blockmapeUsageString == KEBlockMapUsagePaging )
-			{
-			aResult = EBlockMapUsagePaging;
-			}
-		else if (blockmapeUsageString == KETestDebug)
-			{
-			aResult = ETestDebug;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	}	
-	
-void CT_FileData::DoCmdBlockMap(const TDesC& aSection)
-	{
-	TInt64 startPos = 0;
-	GET_OPTIONAL_INT64_PARAMETER(KUParamStartPos, aSection, startPos);
-		
-	SBlockMapInfo blockMapInfo;
-	TInt err = KErrNone;
-	TInt64 endPos = -1;
-	if (GET_OPTIONAL_INT64_PARAMETER(KUParamEndPos, aSection, endPos))
-		{
-		TBlockMapUsage usage;
-		if (ConvertToBlockMapUsage(KUParamUsage, aSection, usage))
-			{
-			err = iFile->BlockMap(blockMapInfo, startPos, endPos, usage);
-			}
-		else
-			{
-			err = iFile->BlockMap(blockMapInfo, startPos, endPos);
-			}
-		}
-	else
-		{
-		TBlockMapUsage usage;
-		if (ConvertToBlockMapUsage(KUParamUsage, aSection, usage))
-			{
-			err = iFile->BlockMap(blockMapInfo, startPos, usage);
-			}
-		else
-			{		
-			err = iFile->BlockMap(blockMapInfo, startPos);
-			}
-		}
-		
-	if (KErrNone != err)
-		{
-		ERR_PRINTF2(_L("BlockMap Returned an error %d"), err);
-		SetError(err);
-		}
-	if (KErrNone == err || KErrCompletion == err)
-		{
-		INFO_PRINTF2(_L("Returned start position %d"), startPos);
-
-		INFO_PRINTF2(_L("Local drive number %d"), blockMapInfo.iLocalDriveNumber);
-		INFO_PRINTF2(_L("Block start address %d"), blockMapInfo.iStartBlockAddress);
-		INFO_PRINTF2(_L("Block start offset %u"), blockMapInfo.iBlockStartOffset);
-		INFO_PRINTF2(_L("Block graduality %u"), blockMapInfo.iBlockGranularity);	
-		}
-	
-	}
-
-//function that adds the buffer to the end of the array
-void CT_FileData::ToArrayL(RPointerArray<HBufC>& aArray, HBufC*& aBuffer)
-	{
-	HBufC* arrayElement = HBufC::NewL(aBuffer->Length());
-	TPtr arrayElementPtr = arrayElement->Des();
-	arrayElementPtr.Copy(*aBuffer);
-	arrayElementPtr.TrimAll();
-	aArray.Append(arrayElement);
-	arrayElement = NULL;
-	}
-	
-
-// helper function to split filemodes or attributes to array
-RPointerArray<HBufC> CT_FileData::SplitL(const TDesC& aInput, const char* aToken)
-	{
-	RPointerArray<HBufC> fileModeArray;
-	HBufC*  buffer = HBufC::NewL(aInput.Length());
-	TPtr bufferPtr = buffer->Des();
-	for (int i=0;i<aInput.Length();i++)
-		{
-		if (aInput[i] == *aToken)
-			{
-			ToArrayL(fileModeArray, buffer);
-			delete buffer;	
-				
-			buffer = NULL;
-			buffer = HBufC::NewL( aInput.Length() - i);	
-			bufferPtr = buffer->Des();
-			}
-		else
-			{
-			bufferPtr.Append(aInput[i]);
-			}
-		}
-	
-	ToArrayL(fileModeArray, buffer);		
-	delete buffer;
-	
-	buffer = NULL;		
-		
-	return fileModeArray;
- 	
-	}
-	
-void CT_FileData::DoCancel(CActive* aActive, TInt aIndex)
-	{
-	TBool	foundActiveObject = EFalse;
-
-	TInt	index=0;
-	TInt	count=0;
-
-	count=iReadCallbackArray.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iReadCallbackArray[index] )
-			{
-			INFO_PRINTF1(_L("DoCancel iReadCallbackArray called"));
-			foundActiveObject = ETrue;
-			iReadCallbackArray.Remove(index);
-	 		}
-		}
-
-	count=iWriteCallbackArray.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iWriteCallbackArray[index] )
-			{
-			INFO_PRINTF1(_L("DoCancel iWriteCallbackArray called"));
-			foundActiveObject = ETrue;
-			iWriteCallbackArray.Remove(index);
-	 		}
-		}
-
-	// See if it is in iFlushCallbackArray
-	count=iFlushCallbackArray.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iFlushCallbackArray[index] )
-			{
-			INFO_PRINTF1(_L("DoCancel iFlushCallbackArray called"));
-			foundActiveObject = ETrue;
-			iFlushCallbackArray.Remove(index);
-	 		}
-		}
-
- 	if( foundActiveObject )
- 		{
-		TInt	err = aActive->iStatus.Int();
-		if( err != KErrNone )
-			{
-			ERR_PRINTF2(_L("DoCancel Error %d"), err);
-			SetAsyncError( aIndex, err );
-			}
-
-		// Reset the outstanding request state
-		DecOutstanding();
-
-		delete aActive;
-		}
-	else
-		{
- 		ERR_PRINTF1(_L("Stray DoCancel signal"));
- 		SetBlockResult(EFail);
-		}
-	}
-
-void CT_FileData::RunL(CActive* aActive, TInt aIndex)
-	{
-
-	
-	TBool	foundActiveObject = EFalse;
-	TInt	index=0;
-	TInt	count=0;
-	
-	count=iReadCallbackArray.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iReadCallbackArray[index] )
-			{
-			foundActiveObject = ETrue;
-			TInt	err = aActive->iStatus.Int();
-			
-			TBuf<KDefaultDescSize> info;
-			info.Copy(iReadCallbackArray[index]->iFileData->Des());
-			INFO_PRINTF2(_L("readed \"%S\" from file"), &info);
-			
-			HandleExpectedString(iReadCallbackArray[index]->iFileData->Des(), *iReadCallbackArray[index]->iSection);
-			
-			if( err != KErrNone )
-				{
-				ERR_PRINTF2(_L("Async Read error %d"), err);
-				SetAsyncError( aIndex, err );
-				}
-			else
-				{
-				INFO_PRINTF1(_L("Succesfully completed Async Read"));
-				}
-				
-			iReadCallbackArray.Remove(index);	
-			delete aActive;
-			
-	 		}
-		}
-		
-	count=iWriteCallbackArray.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iWriteCallbackArray[index] )
-			{
-			foundActiveObject = ETrue;
-			TInt	err = aActive->iStatus.Int();
-			
-			if( err != KErrNone )
-				{
-				ERR_PRINTF2(_L("Async Write Error %d"), err);
-				SetAsyncError( aIndex, err );
-				}				
-			else
-				{
-				INFO_PRINTF1(_L("Succesfully completed Async Write"));
-				}
-			iWriteCallbackArray.Remove(index);				
-			delete aActive;			
-	 		}
-		}	
-		
-	count=iFlushCallbackArray.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iFlushCallbackArray[index] )
-			{
-			foundActiveObject = ETrue;
-			TInt	err = aActive->iStatus.Int();
-			
-			if( err != KErrNone )
-				{
-				ERR_PRINTF2(_L("Async Flush Error %d"), err);
-				SetAsyncError( aIndex, err );
-				}				
-			iFlushCallbackArray.Remove(index);				
-			delete aActive;			
-	 		}
-		}				
-	
-	DecOutstanding();
-	}
-
-void CT_FileData::PrintFileAttributes(TUint aAttValue)
-/** Prints file attributes */
-	{
-	if ((aAttValue & KEntryAttNormal) == KEntryAttNormal)
-		{
-		INFO_PRINTF1(_L("KEntryAttNormal"));
-		}
-	if ((aAttValue & KEntryAttReadOnly) == KEntryAttReadOnly)
-		{
-		INFO_PRINTF1(_L("KEntryAttReadOnly"));
-		}
-		
-	if ((aAttValue & KEntryAttHidden) == KEntryAttHidden)
-		{
-		INFO_PRINTF1(_L("KEntryAttHidden"));
-		}
-
-	if ((aAttValue & KEntryAttSystem) == KEntryAttSystem)
-		{
-		INFO_PRINTF1(_L("KEntryAttSystem"));
-		}
-
-	if ((aAttValue & KEntryAttVolume) == KEntryAttVolume)
-		{
-		INFO_PRINTF1(_L("KEntryAttVolume"));
-		}
-
-	if ((aAttValue & KEntryAttDir) == KEntryAttDir)
-		{
-		INFO_PRINTF1(_L("KEntryAttDir"));
-		}
-
-	if ((aAttValue & KEntryAttArchive) == KEntryAttArchive)
-		{
-		INFO_PRINTF1(_L("KEntryAttArchive"));
-		}
-
-	if ((aAttValue & KEntryAttXIP) == KEntryAttXIP)
-		{
-		INFO_PRINTF1(_L("KEntryAttXIP"));
-		}
-
-	if ((aAttValue & KEntryAttRemote) == KEntryAttRemote)
-		{
-		INFO_PRINTF1(_L("KEntryAttRemote"));
-		}	
-	}
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FileManData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1999 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FileManData
-*/
-
-//	User includes
-#include "T_FileManData.h"
-#include "T_SfSrvServer.h"
-
-const TInt KMaxFileNameLength		=255;
-
-/*@{*/
-///	Parameters
-_LIT(KPath,										"path");
-_LIT(KFileName,									"filename");
-_LIT(KFileFrom,									"filefrom");
-_LIT(KFileTo,									"fileto");
-_LIT(KOldName,									"oldname");
-_LIT(KNewName,									"newname");
-_LIT(KRFsObject,								"rfsObject");
-_LIT(KRFileObject,								"rfileObject");
-_LIT(KUseObserver,								"use_observer");
-_LIT(KAsync,									"async");
-_LIT(KTime,										"time");
-_LIT(KSetMask,									"setmask");
-_LIT(KClearMask,								"clearmask");
-_LIT(KOperation,								"operation");
-_LIT(KCurrentAction,							"current_action");
-_LIT(KBytes,									"bytes");
-_LIT(KError,									"error");
-_LIT(KTarget,									"target");
-_LIT(KSource,									"source");
-_LIT(KNotifyType,								"notify_type");
-_LIT(KReadHistory,								"read_history");
-_LIT(KName,										"name");
-_LIT(KNullDesCStr,								"KNullDesC");
-_LIT(KTotalBytes,								"total_bytes");
-_LIT(KFlag,										"flag");
-_LIT(KClearHistory,								"clear_history");
-_LIT(KSetTcontrol,								"set_tcontrol");
-//For searching file names.
-_LIT(KPattern, 									"*%S*");
-
-/// Commands
-_LIT(KCmdNewL,									"NewL");
-_LIT(KCmdAttribs,								"Attribs");
-_LIT(KCmdCopy,									"Copy");
-_LIT(KCmdMove,									"Move");
-_LIT(KCmdDelete,								"Delete");
-_LIT(KCmdRename,								"Rename");
-_LIT(KCmdRmDir,									"RmDir");
-_LIT(KCmdSetObserver,							"SetObserver");
-_LIT(KCmdCurrentAction,							"CurrentAction");
-_LIT(KCmdGetCurrentTarget,						"GetCurrentTarget");
-_LIT(KCmdGetCurrentSource,						"GetCurrentSource");
-_LIT(KCmdBytesTransferredByCopyStep,			"BytesTransferredByCopyStep");
-_LIT(KCmdCurrentEntry,							"CurrentEntry");
-_LIT(KCmdAbbreviatedPath,						"AbbreviatedPath");
-_LIT(KCmdFullPath,								"FullPath");
-_LIT(KCmdGetLastError,							"GetLastError");
-_LIT(KCmdGetMoreInfoAboutError,					"GetMoreInfoAboutError");
-_LIT(KCmdDestructor,							"~");
-
-// TActions
-_LIT(KENone,									"ENone");
-_LIT(KEAttribs,									"EAttribs");
-_LIT(KECopy,									"ECopy");
-_LIT(KEDelete,									"EDelete");
-_LIT(KEMove,									"EMove");
-_LIT(KERename,									"ERename");
-_LIT(KERmDir,									"ERmDir");
-_LIT(KERenameInvalidEntry,						"ERenameInvalidEntry");
-_LIT(KECopyFromHandle,							"ECopyFromHandle");
-
-
-// TSwitch
-_LIT(KEOverWrite,								"EOverWrite");
-_LIT(KERecurse,									"ERecurse");
-
-// TControl
-_LIT(KEContinue,								"EContinue");
-_LIT(KEAbort,									"EAbort");
-_LIT(KECancel,									"ECancel");
-_LIT(KERetry,									"ERetry");
-
-// TFileManError
-_LIT(KENoExtraInformation,						"ENoExtraInformation");
-_LIT(KEInitializationFailed,					"EInitializationFailed");
-_LIT(KEScanNextDirectoryFailed,					"EScanNextDirectoryFailed");
-_LIT(KESrcOpenFailed,							"ESrcOpenFailed");
-_LIT(KETrgOpenFailed,							"ETrgOpenFailed");
-_LIT(KENoFilesProcessed,						"ENoFilesProcessed");
-
-//Notifys
-_LIT(KNotifyStarted,							"started");
-_LIT(KNotifyOperation,							"operation");
-_LIT(KNotifyEnded,								"ended");
-
-
-
-CT_FileManData* CT_FileManData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_FileManData* ret = new (ELeave) CT_FileManData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-
-
-CT_FileManData::CT_FileManData()
-:	iFileMan(NULL)
-,	iAsyncErrorIndex(0)
-,	iAsyncCall(EFalse)
-,	iFileManObserver(NULL)
-,	iUseTControl(EFalse)
-
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-
-
-void CT_FileManData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-
-
-CT_FileManData::~CT_FileManData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	
-	iAttribs.ResetAndDestroy();
-	iCopy.ResetAndDestroy();
-	iDelete.ResetAndDestroy();
-	iMove.ResetAndDestroy();
-	iRename.ResetAndDestroy();
-	iRmDir.ResetAndDestroy();
-	
-	ClearHistory();
-	}
-	
-TAny* CT_FileManData::GetObject()
-	{
-	return iFileMan;
-	}
-	
-
-TBool CT_FileManData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection	the section in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-
-	if (aCommand == KCmdNewL)
-		{
-		DoCmdNewL(aSection);
-		}
-	else if (aCommand == KCmdDestructor)
-		{
-		DoCleanup();
-		}
-	else if (aCommand == KCmdAttribs)
-		{
-		DoCmdAttribsL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdCopy)
-		{ 
-		DoCmdCopyL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdMove)
-		{
-		DoCmdMoveL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdDelete)
-		{
-		DoCmdDeleteL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdRename)
-		{
-		DoCmdRenameL(aSection, aAsyncErrorIndex);
-		}	
-	else if (aCommand == KCmdRmDir)
-		{
-		DoCmdRmDirL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdSetObserver)
-		{
-		DoCmdSetObserver();
-		}
-	else if (aCommand == KCmdCurrentAction)
-		{
-		DoCmdCurrentAction(aSection);
-		}
-	else if (aCommand == KCmdGetCurrentTarget)
-		{
-		DoCmdGetCurrentTarget(aSection);
-		}
-	else if (aCommand == KCmdGetCurrentSource)
-		{
-		DoCmdGetCurrentSource(aSection);
-		}
-	else if (aCommand == KCmdBytesTransferredByCopyStep)
-		{
-		DoCmdBytesTransferredByCopyStep(aSection);
-		}
-	else if(aCommand == KCmdCurrentEntry)
-		{
-		DoCmdCurrentEntryL(aSection);
-		}
-	else if(aCommand == KCmdAbbreviatedPath)
-		{
-		DoCmdAbbreviatedPath(aSection);
-		}
-	else if(aCommand == KCmdFullPath)
-		{
-		DoCmdFullPath(aSection);
-		}
-	else if(aCommand == KCmdGetLastError)
-		{
-		DoCmdGetLastError(aSection);
-		}
-	else if(aCommand == KCmdGetMoreInfoAboutError)
-		{
-		DoCmdGetMoreInfoAboutError(aSection);
-		}
-	return retVal;
-	}
-
-void CT_FileManData::DoCleanup()
-	{
-	INFO_PRINTF1(_L("Doing cleanup"));
-	
-	if (iFileMan)
-		{
-		delete(iFileMan);
-		iFileMan = NULL;
-		}
-	ClearHistory();
-	}
-	
-/**	Inform the observer that an operation is about to start **/
-MFileManObserver::TControl CT_FileManData::NotifyFileManStarted()
-	{		
-	THistoryData *record = new THistoryData();
-	CreateHistoryRecord(*record);
-	iStartedHistory.Append(record);
-	if(record->iLastError != KErrNone)
-		{
-		if(iAsyncCall)
-			{
-			SetAsyncError(iAsyncErrorIndex, record->iLastError);
-			iAsyncCall = EFalse;
-			}
-		else
-			{
-			SetError(record->iLastError);
-			}
-		}
-	TControl ret = EContinue;	
-	//Check if we need to return TControl value specified in INI.
-	if(iUseTControl && iObserverNotifyType == ENotifyStarted)
-		{
-		TBuf<KMaxFileNameLength> buffer;
-		buffer.Format(KPattern(), &iNotifyFileName);
-		//Check if we need to return TControl for this file.
-		if(record->iCurrentSource.Match(buffer) != KErrNotFound)
-			{
-			iUseTControl = EFalse;
-			ret = iTControl;
-			}
-		}
-	return ret;
-	}
-	
-/**	Informs the observer that an operation, i.e. a copy or a move, is proceeding.	**/	
-MFileManObserver::TControl CT_FileManData::NotifyFileManOperation()
-	{	
-	THistoryData *record = new THistoryData();
-	CreateHistoryRecord(*record);
-	iOperationHistory.Append(record);
-	if(record->iLastError != KErrNone)
-		{
-		if(iAsyncCall)
-			{
-			SetAsyncError(iAsyncErrorIndex, record->iLastError);
-			iAsyncCall = EFalse;
-			}
-		else
-			{
-			SetError(record->iLastError);
-			}
-		}
-	TControl ret = EContinue;
-	//Check if we need to return TControl value specified in INI.
-	if(iUseTControl && iObserverNotifyType == ENotifyOperation)
-		{
-		TBuf<KMaxFileNameLength> buffer;
-		buffer.Format(KPattern(), &iNotifyFileName);
-		//Check if we need to return TControl for this file.
-		if(record->iCurrentSource.Match(buffer) != KErrNotFound)
-			{
-			iUseTControl = EFalse;
-			ret = iTControl;
-			}
-		}
-	return ret;
-	}
-	
-/**	Informs the observer that an operation is complete.	**/	
-MFileManObserver::TControl CT_FileManData::NotifyFileManEnded()
-	{
-	THistoryData *record = new THistoryData();
-	CreateHistoryRecord(*record);
-	iEndedHistory.Append(record);
-	if(record->iLastError != KErrNone)
-		{
-		if(iAsyncCall)
-			{
-			SetAsyncError(iAsyncErrorIndex, record->iLastError);
-			iAsyncCall = EFalse;
-			}
-		else
-			{
-			SetError(record->iLastError);
-			}
-		}
-	TControl ret = EContinue;
-	//Check if we need to return TControl value specified in INI.
-	if(iUseTControl && iObserverNotifyType == ENotifyEnded)
-		{
-		TBuf<KMaxFileNameLength> buffer;
-		buffer.Format(KPattern(), &iNotifyFileName);
-		//Check if we need to return TControl for this file.
-		if(record->iCurrentSource.Match(buffer) != KErrNotFound)
-			{
-			iUseTControl = EFalse;
-			ret = iTControl;
-			}
-		}
-	return ret; 
-	}
-
-void CT_FileManData::DoCmdNewL(const TDesC& aSection)
-	{	
-	DoCleanup();
-	TBool useObserver = EFalse;
-	
-	GET_OPTIONAL_BOOL_PARAMETER(KUseObserver, aSection, useObserver);
-	
-	TPtrC	rfsObjectName;
-	RFs*	rfsObject = NULL;
-	if (GET_MANDATORY_STRING_PARAMETER(KRFsObject, aSection, rfsObjectName))
-		{
-		rfsObject = (RFs*)GetDataObjectL(rfsObjectName);
-		}
-	
-	TInt err = KErrNone;
-	if(useObserver)
-		{
-		INFO_PRINTF1(_L("CFileMan::NewL(RFs, MFileManObserver)"));
-		TRAP(err, iFileMan = CFileMan::NewL(*rfsObject, iFileManObserver));
-		}
-	else
-		{
-		INFO_PRINTF1(_L("CFileMan::NewL(RFs)"));
-		TRAP(err, iFileMan = CFileMan::NewL(*rfsObject));
-		}
-	if (err != KErrNone)
-		{
-		ERR_PRINTF1(_L("CFileMan object is not created"));
-		SetBlockResult(EFail);
-		}
-	}
-	
-void CT_FileManData::DoCmdAttribsL(const TDesC& aSection, TInt aAsyncErrorIndex)
-	{
-	INFO_PRINTF1(_L("Setting attributes!"));
-	
-	TBool dataOk = ETrue;
-	
-	//Reading path for file or files.	
-	TPtrC	fileName;
-	if (!GET_MANDATORY_STRING_PARAMETER(KFileName, aSection, fileName))
-		{
-		dataOk = EFalse;
-		}
-	
-	//Reading new TTime from ini
-	TPtrC inputTime;
-	TTime iniTime;
-	if(GET_MANDATORY_STRING_PARAMETER(KTime, aSection, inputTime))
-		{	
-		TInt err = iniTime.Set(inputTime);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF3(_L("Cannot convert (%S) to time. Error: %d"), &inputTime ,err);
-			dataOk = EFalse;
-			SetBlockResult(EFail);
-			}
-		}
-	else
-		{
-		dataOk = EFalse;
-		}
-		
-	//Reading Async parameter (True/False)	
-	TBool async = EFalse;
-	if(!GET_MANDATORY_BOOL_PARAMETER(KAsync, aSection, async))
-		{
-		dataOk = EFalse;
-		}
-	//Read SetMask attribute
-	TUint setMask;
-	if(!FileserverUtil::GetAttMask(*this, aSection, KSetMask(), setMask))
-		{
-		dataOk = EFalse;
-		}
-		
-	//Read ClearMask attribute
-	TUint clearMask;
-	if(!FileserverUtil::GetAttMask(*this, aSection, KClearMask(), clearMask))
-		{
-		dataOk = EFalse;
-		}
-		
-	//Read operation TSwitch
-	TUint operation;
-	if(!GetOperationFromConfig(KOperation(), aSection, operation))
-		{
-		dataOk = EFalse;
-		}
-	if(dataOk)
-		{
-		TInt error = KErrNone;
-		if(async)
-			{
-			CActiveCallback* active = CActiveCallback::NewLC(*this);
-			iAttribs.AppendL(active);
-			CleanupStack::Pop(active);
-			error = iFileMan->Attribs(fileName, setMask, clearMask, iniTime, operation, active->iStatus);
-			if(error == KErrNone)
-				{
-				active->Activate(aAsyncErrorIndex);
-				iAsyncErrorIndex = aAsyncErrorIndex;
-				iAsyncCall = ETrue;
-				IncOutstanding();
-				}
-			}
-		else
-			{
-			error = iFileMan->Attribs(fileName, setMask, clearMask, iniTime, operation);
-			}
-		if (error != KErrNone)
-			{
-			ERR_PRINTF3(_L("Attribs(%S) Error: %d"), &fileName, error);
-			SetError(error);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("Attribs operation on (%S) is successfull!"), &fileName);
-			}
-		}
-	}
-void CT_FileManData::DoCmdCopyL(const TDesC& aSection, TInt aAsyncErrorIndex)
-	{
-	TBool clearHistory = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KClearHistory, aSection, clearHistory);
-	if(clearHistory)
-		{
-		ClearHistory();
-		}
-	TBool setTControl = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KSetTcontrol, aSection, setTControl);
-	if(setTControl)
-		{
-		ReadTControl(aSection);
-		}
-	
-	INFO_PRINTF1(_L("Coping files!"));	
-	TBool dataOk = ETrue;
-	TPtrC oldName;
-	TPtrC rfileObjectName;
-	RFile*	rfileObject = NULL;
-	
-	if (!GET_OPTIONAL_STRING_PARAMETER(KOldName, aSection, oldName))
-		{
-		if (GET_OPTIONAL_STRING_PARAMETER(KRFileObject, aSection, rfileObjectName))
-			{
-			rfileObject = (RFile*)GetDataObjectL(rfileObjectName);
-			}
-		else
-			{
-			ERR_PRINTF1(_L("Cannot read \"oldname\" or \"rfileObject\" arguments!"));
-			SetBlockResult(EFail);
-			dataOk = EFalse;
-			}
-		}
-		
-	TPtrC newName;
-	if (!GET_MANDATORY_STRING_PARAMETER(KNewName, aSection, newName))
-		{
-		dataOk = EFalse;
-		}
-		
-	TUint operation;
-	if (!GetOperationFromConfig(KOperation, aSection, operation))
-		{
-		dataOk = EFalse;
-		}
-	TBool async;
-	if (!GET_MANDATORY_BOOL_PARAMETER(KAsync, aSection, async))
-		{
-		dataOk = EFalse;
-		}
-		
-	if(dataOk)
-		{
-		TInt error = KErrNone;
-		if(async)
-			{
-			CActiveCallback* active = CActiveCallback::NewLC(*this);
-			iCopy.AppendL(active);
-			CleanupStack::Pop(active);
-			if(rfileObject)
-				{
-				error = iFileMan->Copy(*rfileObject, newName, operation, active->iStatus);
-				}
-			else
-				{
-				error = iFileMan->Copy(oldName, newName, operation, active->iStatus);	
-				}
-			if(error == KErrNone)
-				{
-				active->Activate(aAsyncErrorIndex);
-				iAsyncErrorIndex = aAsyncErrorIndex;
-				iAsyncCall = ETrue;
-	            IncOutstanding();
-				}
-			}
-		else
-			{
-   			if(rfileObject)
-   				{
-   				error = iFileMan->Copy(*rfileObject, newName, operation);	
-   				}
-   			else
-   				{
-   				error = iFileMan->Copy(oldName, newName, operation);
-   				}
-			}
-		if (error != KErrNone)
-			{
-			ERR_PRINTF2(_L("Copy(), Error: %d"), error);
-			SetError(error);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Copy() operation is successfully!"));
-			}	
-		}
-	}
-		
-void CT_FileManData::DoCmdDeleteL(const TDesC& aSection, TInt aAsyncErrorIndex)
-	{
-	TBool clearHistory = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KClearHistory, aSection, clearHistory);
-	if(clearHistory)
-		{
-		ClearHistory();
-		}
-	TBool setTControl = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KSetTcontrol, aSection, setTControl);
-	if(setTControl)
-		{
-		ReadTControl(aSection);
-		}
-		
-	INFO_PRINTF1(_L("Deleting files!"));
-	
-	TBool dataOk = ETrue;
-	TPtrC	fileName;
-	if (GET_MANDATORY_STRING_PARAMETER(KFileName, aSection, fileName))
-		{
-		if(fileName == KNullDesCStr)
-			{
-			fileName.Set(KNullDesC);	
-			}
-		}
-	else
-		{
-		dataOk = EFalse;
-		}
-	TUint operation;
-	if(!GetOperationFromConfig(KOperation, aSection, operation))
-		{
-		dataOk = EFalse;
-		}
-	TBool async = EFalse;
-	if (!GET_MANDATORY_BOOL_PARAMETER(KAsync, aSection, async))
-		{
-		dataOk = EFalse;
-		}
-	if(dataOk)
-		{
-		TInt error = KErrNone;
-		if(async)
-			{
-			CActiveCallback* active = CActiveCallback::NewLC(*this);
-			iDelete.AppendL(active);
-		    CleanupStack::Pop(active);
-		    error = iFileMan->Delete(fileName, operation, active->iStatus);
-			if (error == KErrNone)
-				{
-				active->Activate(aAsyncErrorIndex);
-				iAsyncErrorIndex = aAsyncErrorIndex;
-				iAsyncCall = ETrue;
-	            IncOutstanding();
-				}
-			}
-		else
-			{
-			error = iFileMan->Delete(fileName, operation);
-			}
-			
-		if (error != KErrNone)
-			{
-			ERR_PRINTF3(_L("Delete (%S), Error: %d"), &fileName, error);
-			SetError(error);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("Delete (%S) operation is successfully!"), &fileName);
-			}
-		}
-	}
-	
-void CT_FileManData::DoCmdMoveL(const TDesC& aSection, TInt aAsyncErrorIndex)
-	{
-	TBool clearHistory = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KClearHistory, aSection, clearHistory);
-	if(clearHistory)
-		{
-		ClearHistory();
-		}
-	TBool setTControl = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KSetTcontrol, aSection, setTControl);
-	if(setTControl)
-		{
-		ReadTControl(aSection);
-		}
-		
-	INFO_PRINTF1(_L("Moving files!"));
-	
-	TBool	dataOk = ETrue;
-	TPtrC	fileFrom;
-	if (!GET_MANDATORY_STRING_PARAMETER(KFileFrom, aSection, fileFrom))
-		{
-		dataOk = EFalse;
-		}
-		
-	TPtrC	fileTo;
-	if (!GET_MANDATORY_STRING_PARAMETER(KFileTo, aSection, fileTo))
-		{
-		dataOk = EFalse;	
-		}
-	TBool	async;
-	if (!GET_MANDATORY_BOOL_PARAMETER(KAsync, aSection, async))
-		{
-		dataOk = EFalse;	
-		}
-	TUint operation;
-	if (!GetOperationFromConfig(KOperation, aSection, operation))
-		{
-		dataOk = EFalse;	
-		}
-	if(dataOk)
-		{
-		TInt error = KErrNone;
-		if(async)
-			{
-			CActiveCallback*	active = CActiveCallback::NewLC(*this);
-			iMove.AppendL(active);
-	        CleanupStack::Pop(active);	
-	        error = iFileMan->Move(fileFrom, fileTo, operation, active->iStatus);
-	        if(error == KErrNone)
-	        	{
-	        	active->Activate(aAsyncErrorIndex);
-				iAsyncErrorIndex = aAsyncErrorIndex;
-				iAsyncCall = ETrue;
-	            IncOutstanding();
-	        	}
-			}
-		else
-			{
-			error = iFileMan->Move(fileFrom, fileTo, operation);
-			}
-		if (error != KErrNone)
-			{
-			ERR_PRINTF2(_L("Move(), Error: %d"), error);
-			SetError(error);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Move() operation is successfully!"));
-			}
-		}	
-	}
-		
-void CT_FileManData::DoCmdRenameL(const TDesC& aSection, TInt aAsyncErrorIndex)
-	{
-	TBool clearHistory = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KClearHistory, aSection, clearHistory);
-	if(clearHistory)
-		{
-		ClearHistory();
-		}
-	TBool setTControl = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KSetTcontrol, aSection, setTControl);
-	if(setTControl)
-		{
-		ReadTControl(aSection);
-		}
-	INFO_PRINTF1(_L("Renaming files!"));
-		
-	TBool dataOk = ETrue;
-	
-	//Reading Old Name
-	TPtrC	oldName;
-	if (!GET_MANDATORY_STRING_PARAMETER(KOldName, aSection, oldName))
-		{
-		dataOk = EFalse;
-		}
-		
-	//Reading New Name
-	TPtrC	newName;
-	if (!GET_MANDATORY_STRING_PARAMETER(KNewName, aSection, newName))
-		{
-		dataOk = EFalse;
-		}
-		
-	//Rading TSwitch - Operation
-	TUint operation;
-	if (!GetOperationFromConfig(KOperation(), aSection, operation))
-		{
-		dataOk = EFalse;
-		}
-	//Reading async
-	TBool async;
-	if (!GET_MANDATORY_BOOL_PARAMETER(KAsync, aSection, async))
-		{
-		dataOk = EFalse;
-		}
-	if(dataOk)
-		{
-		TInt error = KErrNone;
-		if(async)
-			{
-			CActiveCallback* active = CActiveCallback::NewLC(*this);
-			iRename.AppendL(active);
-			CleanupStack::Pop(active);
-			error = iFileMan->Rename(oldName, newName, operation, active->iStatus);
-			if(error == KErrNone)	
-				{
-				active->Activate(aAsyncErrorIndex);
-				iAsyncErrorIndex = aAsyncErrorIndex;
-				iAsyncCall = ETrue;
-				IncOutstanding();
-				}			
-			}
-		else
-			{
-			error = iFileMan->Rename(oldName, newName, operation);
-			}
-		if (error != KErrNone)
-			{
-			ERR_PRINTF2(_L("Rename() Error: %d"), error);
-			SetError(error);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Rename() operation is successfully!"));
-			}
-		}	
-	}
-		
-void CT_FileManData::DoCmdRmDirL(const TDesC& aSection, TInt aAsyncErrorIndex)
-	{
-	INFO_PRINTF1(_L("Removing directory!"));
-	
-	TBool	dataOk = ETrue;
-	TPtrC	path;
-	
-	if (!GET_MANDATORY_STRING_PARAMETER(KPath, aSection, path))
-		{
-		dataOk = EFalse;
-		}
-		
-	TBool async = EFalse;
-	if (!GET_MANDATORY_BOOL_PARAMETER(KAsync, aSection, async))
-		{
-		dataOk = EFalse;
-		}
-		
-	if(dataOk)
-		{
-		TInt error = KErrNone;
-		if(async)
-			{
-			CActiveCallback* active = CActiveCallback::NewLC(*this);
-			iRmDir.AppendL(active);
-			CleanupStack::Pop(active);
-			error = iFileMan->RmDir(path, active->iStatus);
-			if(error == KErrNone)
-				{
-				active->Activate(aAsyncErrorIndex);
-				iAsyncErrorIndex = aAsyncErrorIndex;
-				iAsyncCall = ETrue;
-				IncOutstanding();
-				}
-			}
-		else
-			{
-			error = iFileMan->RmDir(path);
-			}
-		if (error != KErrNone)
-			{
-			ERR_PRINTF3(_L("RmDir(%S), Error: %d"), &path, error);
-			SetError(error);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("Callled RmDir(%S)"), &path);
-			}
-		}
-	}
-	
-void CT_FileManData::DoCmdSetObserver()
-	{
-	INFO_PRINTF1(_L("Setting observer"));
-	
-	iFileMan->SetObserver(this);
-	}
-	
-void CT_FileManData::DoCmdCurrentAction(const TDesC& aSection)
-	{
-	TBool readHistory = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	CFileMan::TAction currentAction = CFileMan::ENone;
-	TBool found = ETrue;
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			CFileMan::TAction expectedAction;
-			found = EFalse;
-			if(GetActionFromConfig(KCurrentAction(), aSection, expectedAction))
-				{
-				CFileMan::TAction action;
-				TInt count = history->Count();
-				/** Search for expected TAction in history **/
-				for(TInt i = 0; (i < count) && (!found); i++)
-					{
-					action = ((*history)[i])->iCurrentAction;
-					if( action == expectedAction)
-						{
-						currentAction = action;
-						found = ETrue;
-						}
-					}
-				if(!found)
-					{
-					TPtrC expectedActionStr;
-					ConvertActionToString(expectedAction, expectedActionStr);
-					ERR_PRINTF2(_L("CurrentAction() %S not found in history!"), &expectedActionStr);
-					SetBlockResult(EFail);
-					}
-				}
-			else
-				{
-				ERR_PRINTF2(_L("Cannot read %S"), &KCurrentAction());
-				SetBlockResult(EFail);
-				}
-			}
-		}
-	else
-		{
-		currentAction = iFileMan->CurrentAction();	
-		}
-		
-	if(found)
-		{
-		TPtrC actionStr;
-		ConvertActionToString(currentAction, actionStr);
-		
-		CFileMan::TAction expectedAction;
-		if(GetActionFromConfig(KCurrentAction(), aSection, expectedAction))
-			{
-			TPtrC expectedActionStr;
-			ConvertActionToString(expectedAction, expectedActionStr);
-			if(expectedAction != currentAction)
-				{
-				ERR_PRINTF3(_L("CurrentAction(): %S != %S Expected Action"), &actionStr, &expectedActionStr);			
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("CurrentAction(): %S == %S Expected Action"), &actionStr, &expectedActionStr);			
-				}
-			}
-		else
-			{
-			INFO_PRINTF2(_L("CurrentAction: %S"), &actionStr);
-			}
-		}
-	}
-	
-void CT_FileManData::DoCmdGetCurrentTarget(const TDesC& aSection)
-	{
-	TBool readHistory = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	TFileName target;
-	TBool found = ETrue;
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			TPtrC expectedTarget;
-			found = EFalse;
-			if(GET_MANDATORY_STRING_PARAMETER(KTarget, aSection, expectedTarget))
-				{
-				TInt count = history->Count();
-				/** Search for expected target in history **/
-				for(TInt i = 0; (!found) && (i < count); i++)
-					{		
-					if( ((*history)[i])->iCurrentTarget == expectedTarget)
-						{
-						target = ((*history)[i])->iCurrentTarget;
-						found = ETrue;
-						}
-					}
-				if(!found)
-					{
-					ERR_PRINTF2(_L("GetCurrentTarget() %S not found in history!"), &expectedTarget);
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		iFileMan->GetCurrentTarget(target);
-		}
-	if(found)
-		{
-		TPtrC expectedTarget;
-		if(GET_OPTIONAL_STRING_PARAMETER(KTarget, aSection, expectedTarget))
-			{
-			if(target == expectedTarget)
-				{
-				INFO_PRINTF3(_L("GetCurrentTarget() %S == %S ExpectedResult"), &target, &expectedTarget);
-				}
-			else
-				{
-				ERR_PRINTF3(_L("GetCurrentTarget() %S != %S ExpectedResult"), &target, &expectedTarget);
-				SetBlockResult(EFail);
-				}
-			
-			}
-		else
-			{
-			INFO_PRINTF2(_L("GetCurrentTarget() %S"), &target);	
-			}
-		}
-	}
-void CT_FileManData::DoCmdGetCurrentSource(const TDesC& aSection)
-	{
-	TBool readHistory = EFalse;	
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	TFileName source;
-	TBool found = ETrue;
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			TPtrC expectedSource;
-			found = EFalse;
-			if(GET_MANDATORY_STRING_PARAMETER(KSource, aSection, expectedSource))
-				{
-				TInt count = history->Count();
-				/** Search for expected source in history **/
-				for(TInt i = 0; (!found) && (i < count); i++)
-					{				
-					if( (*history)[i]->iCurrentSource == expectedSource)
-						{
-						source = (*history)[i]->iCurrentSource;
-						found = ETrue;
-						}
-					}
-				if(!found)
-					{
-					ERR_PRINTF2(_L("GetCurrentSource() %S not found in history!"), &expectedSource);
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		iFileMan->GetCurrentSource(source);
-		}
-		
-	if (found)
-		{
-		TPtrC expectedSource;
-		if(GET_OPTIONAL_STRING_PARAMETER(KSource, aSection, expectedSource))
-			{
-			if(source == expectedSource)
-				{
-				INFO_PRINTF3(_L("GetCurrentSource() %S == %S ExpectedResult"), &source, &expectedSource);
-				}
-			else
-				{
-				ERR_PRINTF3(_L("GetCurrentSource() %S != %S ExpectedResult"), &source, &expectedSource);
-				SetBlockResult(EFail);
-				}
-			
-			}
-		else
-			{
-			INFO_PRINTF2(_L("GetCurrentSource() %S"), &source);	
-			}
-		}
-		
-	}
-void CT_FileManData::DoCmdBytesTransferredByCopyStep(const TDesC& aSection)
-	{
-	TBool readHistory = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	TInt bytes = 0;
-	TBool found = ETrue;
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			TInt expectedBytes;
-			found = EFalse;
-			if(GET_MANDATORY_INT_PARAMETER(KBytes, aSection, expectedBytes))
-				{
-				TBool totalBytes = EFalse;
-				GET_OPTIONAL_BOOL_PARAMETER(KTotalBytes, aSection, totalBytes);
-				TInt count = history->Count();
-				TInt bytesTemp;
-				/** Search for expected transferred bytes in history **/
-				for(TInt i = 0; (!found) && (i < count); i++)
-					{
-					bytesTemp = ((*history)[i])->iBytesTransferred;
-					if(totalBytes)
-						{
-						bytes +=bytesTemp;
-						}
-					else
-						{
-						if( bytesTemp == expectedBytes)
-							{
-							bytes = bytesTemp;
-							found = ETrue;
-							}
-						}
-					}
-				if(totalBytes)
-					{
-					found = ETrue;
-					}
-				if(!found)
-					{
-					ERR_PRINTF2(_L("BytesTransferredByCopyStep() %d not found in history!"), expectedBytes);
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		bytes = iFileMan->BytesTransferredByCopyStep();
-		}
-	if (found)
-		{
-		TInt expectedBytes;	
-		if(GET_OPTIONAL_INT_PARAMETER(KBytes, aSection, expectedBytes))
-			{		
-			if(expectedBytes != bytes)
-				{
-				ERR_PRINTF3(_L("BytesTransferredByCopyStep(): %d != %d Expected Bytes"), bytes, expectedBytes);
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("BytesTransferredByCopyStep(): %d == %d Expected Bytes"), bytes, expectedBytes);
-				}
-			}
-		else
-			{
-			INFO_PRINTF2(_L("BytesTransferredByCopyStep(): %d"), bytes);
-			}
-		}
-	}
-void CT_FileManData::DoCmdCurrentEntryL(const TDesC& aSection)
-	{
-	
-	TEntry* entryObject = NULL;
-	TBool found = ETrue;
-	TBool readHistory = EFalse;	
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			TPtrC expectedName;
-			found = EFalse;
-			if(GET_MANDATORY_STRING_PARAMETER(KName, aSection, expectedName))
-				{
-				TInt count = history->Count();
-				TEntry entry;
-				/** Search for expected TEntry.iName in history **/
-				for(TInt i = 0; (!found) && (i < count); i++)
-					{
-					entry = ((*history)[i])->iCurrentEntry;
-					if( entry.iName == expectedName)
-						{
-						entryObject = &entry;
-						found = ETrue;
-						}
-					}
-				if(!found)
-					{
-					ERR_PRINTF1(_L("CurrentEntry() not found in history!"));
-					SetBlockResult(EFail);
-					}
-				}	
-			}
-		}
-	else
-		{
-		*entryObject = iFileMan->CurrentEntry();
-		}
-	if(found)
-		{
-		if(!FileserverUtil::VerifyTEntryDataFromIniL(*this, aSection, *entryObject))
-			{
-			SetBlockResult(EFail);	
-			}
-		}
-		
-	}
-void CT_FileManData::DoCmdAbbreviatedPath(const TDesC& aSection)
-	{
-	TBool readHistory = EFalse;	
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	TPtrC path;
-	TBool found = ETrue;
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			TPtrC expectedPath;
-			found = EFalse;
-			if(GET_MANDATORY_STRING_PARAMETER(KPath, aSection, expectedPath))
-				{
-				TInt count = history->Count();
-				/** Search for expected abbreviated path in history **/
-				for(TInt i = 0; (!found) && (i < count); i++)
-					{	
-					if( ((*history)[i])->iAbbreviatedPath == expectedPath)
-						{
-						path.Set(((*history)[i])->iAbbreviatedPath);
-						found = ETrue;
-						}
-					}
-				if(!found)
-					{
-					ERR_PRINTF2(_L("AbbreviatedPath() %S not found in history!"), &expectedPath);
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		path.Set(iFileMan->AbbreviatedPath());
-		}
-		
-	if (found)
-		{
-		TPtrC expectedPath;
-		if(GET_OPTIONAL_STRING_PARAMETER(KPath, aSection, expectedPath))
-			{		
-			if(expectedPath.Compare(path) != 0)
-				{
-				ERR_PRINTF3(_L("AbbreviatedPath(): %S != %S Expected Path"), &path, &expectedPath);
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("AbbreviatedPath(): %S == %S Expected Path"), &path, &expectedPath);
-				}
-			}
-		else
-			{
-			INFO_PRINTF2(_L("AbbreviatedPath(): %S"), &path);
-			}
-		}
-	}
-void CT_FileManData::DoCmdFullPath(const TDesC& aSection)
-	{
-	TBool readHistory = EFalse;	
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	TPtrC fullPath;
-	TBool found = ETrue;
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			TPtrC expectedPath;
-			found = EFalse;
-			if(GET_MANDATORY_STRING_PARAMETER(KPath, aSection, expectedPath))
-				{
-				TInt count = history->Count();
-				/** Search for expected full path in history **/
-				for(TInt i = 0; (!found) && (i < count); i++)
-					{	
-					if( ((*history)[i])->iFullPath == expectedPath)
-						{
-						fullPath.Set(((*history)[i])->iFullPath);
-						found = ETrue;
-						}
-					}
-				if(!found)
-					{
-					ERR_PRINTF2(_L("FullPath() %S not found in history!"), &expectedPath);
-					SetBlockResult(EFail);
-					}	
-				}
-			}
-		}
-	else
-		{
-		fullPath.Set(iFileMan->FullPath());
-		}
-	if(found)
-		{
-		TPtrC expectedPath;
-		if(GET_OPTIONAL_STRING_PARAMETER(KPath, aSection, expectedPath))
-			{		
-			if(expectedPath.Compare(fullPath) != 0)
-				{
-				ERR_PRINTF3(_L("FullPath(): %S != %S Expected Path"), &fullPath, &expectedPath);
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("FullPath(): %S == %S Expected Path"), &fullPath, &expectedPath);
-				}
-			}
-		else
-			{
-			INFO_PRINTF2(_L("FullPath(): %S"), &fullPath);
-			}
-		}
-	}
-void CT_FileManData::DoCmdGetLastError(const TDesC& aSection)
-	{
-	TBool readHistory = EFalse;	
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	TInt lastError = KErrNone;
-	TBool found = ETrue;
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			TInt expectedError;
-			found = EFalse;
-			if(GET_MANDATORY_INT_PARAMETER(KError, aSection, expectedError))
-				{
-				TInt count = history->Count();
-				TInt err;
-				/** Search for expected error in history **/
-				for(TInt i = 0; (!found) && (i < count); i++)
-					{	
-					err = (*history)[i]->iLastError;			
-					if( err == expectedError)
-						{
-						lastError = err;
-						found = ETrue;
-						}
-					}
-				if(!found)
-					{
-					ERR_PRINTF2(_L("GetLastError() %d not found in history!"), expectedError);
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		lastError = iFileMan->GetLastError();
-		}
-	if (found)
-		{
-		TInt expectedError;	
-		if(GET_OPTIONAL_INT_PARAMETER(KError, aSection, expectedError))
-			{		
-			if(expectedError != lastError)
-				{
-				ERR_PRINTF3(_L("GetLastError(): %d != %d Expected Error"), lastError, expectedError);
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("GetLastError(): %d == %d Expected Error"), lastError, expectedError);
-				}
-			}
-		else
-			{
-			INFO_PRINTF2(_L("GetLastError(): %d"), lastError);
-			}
-		}
-	}
-		
-void CT_FileManData::DoCmdGetMoreInfoAboutError(const TDesC& aSection)
-	{
-	TBool readHistory = EFalse;	
-	GET_OPTIONAL_BOOL_PARAMETER(KReadHistory, aSection, readHistory);
-	TFileManError lastError;
-	TBool found = ETrue;
-	if(readHistory)
-		{
-		/** Get needed history array **/
-		RPointerArray<THistoryData>* history = GetHistoryDataByType(aSection);
-		if(history)
-			{
-			TFileManError expectedError;
-			found = EFalse;
-			if(GetFileManErrorFromConfig(KError, aSection, expectedError))
-				{
-				TInt count = history->Count();
-				TFileManError error;
-				/** Search for expected error in history **/
-				for(TInt i = 0; (!found) && (i < count); i++)
-					{
-					error = (*history)[i]->iMoreInfoAboutError;
-					if( (error == expectedError))
-						{
-						lastError = error;
-						found = ETrue;
-						}
-					}
-				if(!found)
-					{
-					ERR_PRINTF2(_L("GetMoreInfoAboutError() %S not found in history!"), expectedError);
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		lastError = iFileMan->GetMoreInfoAboutError();
-		}
-	if (found)
-		{
-		TPtrC errorStr;
-		ConvertFileManErrorToString(lastError, errorStr);
-		TFileManError expectedError;
-		if(GetFileManErrorFromConfig(KError, aSection, expectedError))
-			{
-			TPtrC expectedErrorStr;
-			ConvertFileManErrorToString(expectedError, expectedErrorStr);
-			
-			if(expectedError != lastError)
-				{
-				ERR_PRINTF3(_L("GetMoreInfoAboutError(): %S != %S Expected Error"), &errorStr, &expectedErrorStr);
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("GetMoreInfoAboutError(): %S == %S Expected Error"), &errorStr, &expectedErrorStr);
-				}
-			}
-		else
-			{
-			INFO_PRINTF2(_L("GetMoreInfoAboutError(): %S"), &errorStr);
-			}
-		}
-		
-	}
-void CT_FileManData::RunL(CActive* aActive, TInt aIndex)
-/**
- Virtual RunL - Called on completion of an asynchronous command
- @internalComponent
- @see MActiveCallback
- @param aActive Active Object that RunL has been called on
- @pre N/A
- @post N/A
- @leave system wide error code
-*/
-	{
-	INFO_PRINTF1(_L("CT_FileManData::RunL Called"));
-	TBool	foundActiveObject = EFalse;
-	TInt	index=0;
-	TInt	count=0;
-	TBool	completed=ETrue;
-	
-	count = iAttribs.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iAttribs[index] )
-			{   
-			INFO_PRINTF1(_L("RunL iAttribs called"));
-			foundActiveObject = ETrue;
-			iAttribs.Remove(index);
-	 		}
-		}
-
-	count = iCopy.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iCopy[index] )
-			{						    
-			INFO_PRINTF1(_L("RunL iCopy called"));
-			foundActiveObject = ETrue;
-			iCopy.Remove(index);
-	 		}
-		}	
-	
-	count = iDelete.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iDelete[index] )
-			{						    
-			INFO_PRINTF1(_L("RunL iDelete called"));
-			foundActiveObject = ETrue;
-			iDelete.Remove(index);
-	 		}
-		}
-		
-	count = iMove.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iMove[index] )
-			{						    
-			INFO_PRINTF1(_L("RunL iMove called"));
-			foundActiveObject = ETrue;
-			iMove.Remove(index);
-	 		}
-		}
-		
-	count = iRename.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iRename[index] )
-			{						    
-			INFO_PRINTF1(_L("RunL iRename called"));
-			foundActiveObject = ETrue;
-			iRename.Remove(index);
-	 		}
-		}	
-	
-	count = iRmDir.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iRmDir[index] )
-			{						    
-			INFO_PRINTF1(_L("RunL iRmDir called"));
-			foundActiveObject = ETrue;
-			iRmDir.Remove(index);
-	 		}
-		}
-	
-	if( foundActiveObject )
- 		{
-		TInt	err = aActive->iStatus.Int();
-		if( err != KErrNone )
-			{
-			ERR_PRINTF2(_L("RunL Error %d"), err);
-			SetAsyncError( aIndex, err );
-			iAsyncCall = EFalse;
-			}
-
-		if ( completed )
-			{
-			// Reset the outstanding request state
-			DecOutstanding();
-			delete aActive;
-			}
-		}
-	else
-		{
- 		ERR_PRINTF1(_L("Stray RunL signal"));
- 		SetBlockResult(EFail);
-		}
-	}
-	
-	
-void CT_FileManData::DoCancel(CActive* aActive, TInt aIndex)
-/**
- Virtual DoCancel - Request to cancel the asynchronous command
- @internalComponent
- @see - MActiveCallback
- @param aActive Active Object that DoCancel has been called on
- @pre - N/A
- @post - N/A
- @leave system wide error code
-*/
-	{
-	INFO_PRINTF1(_L("CT_FileManData::DoCancelL Called"));
-	
-	TBool	foundActiveObject = EFalse;
-	TInt	index=0;
-	TInt	count=0;
-	
-	
-	// See if it is in iAttribs
-	count = iAttribs.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iAttribs[index] )
-			{  
-			INFO_PRINTF1(_L("DoCancel iAttribs called"));
-			foundActiveObject = ETrue;
-			iAttribs.Remove(index);
-	 		}
-		}
-	
-	// See if it is in iCopy2
-	count = iCopy.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iCopy[index] )
-			{  
-			INFO_PRINTF1(_L("DoCancel iCopy called"));
-			foundActiveObject = ETrue;
-			iCopy.Remove(index);
-	 		}
-		}
-				
-	// See if it is in iDelete
-	count = iDelete.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iDelete[index] )
-			{  
-			INFO_PRINTF1(_L("DoCancel iDelete called"));
-			foundActiveObject = ETrue;
-			iDelete.Remove(index);
-	 		}
-		}
-		
-	// See if it is in iMove
-	count = iMove.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iMove[index] )
-			{  
-			INFO_PRINTF1(_L("DoCancel iMove called"));
-			foundActiveObject = ETrue;
-			iMove.Remove(index);
-	 		}
-		}
-		
-	// See if it is in iRename
-	count = iRename.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iRename[index] )
-			{  
-			INFO_PRINTF1(_L("DoCancel iRename called"));
-			foundActiveObject = ETrue;
-			iRename.Remove(index);
-	 		}
-		}
-		
-	// See if it is in iRmDir
-	count = iRmDir.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iRmDir[index] )
-			{  
-			INFO_PRINTF1(_L("DoCancel iRmDir called"));
-			foundActiveObject = ETrue;
-			iRmDir.Remove(index);
-	 		}
-		}
-		
-	if( foundActiveObject )
- 		{
-		TInt	err = aActive->iStatus.Int();
-		if( err != KErrNone )
-			{
-			ERR_PRINTF2(_L("DoCancel Error %d"), err);
-			SetAsyncError( aIndex, err );
-			}
-
-		// Reset the outstanding request state
-		DecOutstanding();
-
-		delete aActive;
-		}
-	else
-		{
- 		ERR_PRINTF1(_L("Stray DoCancel signal"));
- 		SetBlockResult(EFail);
-		}
-	}
-		
-/** Reads TFileManError from INI and converts it to TFileManError type. **/	
-TBool CT_FileManData::GetFileManErrorFromConfig(const TDesC& aParameterName, const TDesC& aSection, TFileManError& aError)
-	{
-	TPtrC errorStr;
-	TBool ret = GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, errorStr);
-	if(ret)
-		{
-		if(errorStr == KENoExtraInformation)
-			{
-			aError = ENoExtraInformation;
-			}
-		else if(errorStr == KEInitializationFailed)
-			{
-			aError = EInitializationFailed;
-			}
-		else if (errorStr == KEScanNextDirectoryFailed)
-			{
-			aError = EScanNextDirectoryFailed;
-			}
-		else if (errorStr == KESrcOpenFailed)
-			{
-			aError = ESrcOpenFailed;
-			}
-		else if (errorStr == KETrgOpenFailed)
-			{
-			aError = ETrgOpenFailed;
-			}
-		else if (errorStr == KENoFilesProcessed)
-			{
-			aError = ENoFilesProcessed;
-			}
-		else
-			{
-			ret = EFalse;	
-			}
-		}
-	return ret;	
-	}
-
-/** Converts TFileManError type to string **/
-void CT_FileManData::ConvertFileManErrorToString(TFileManError& aError, TPtrC& aErrorStr)
-	{
-	if(aError == ENoExtraInformation)
-		{
-		aErrorStr.Set(KENoExtraInformation());
-		}
-	else if(aError == EInitializationFailed)
-		{
-		aErrorStr.Set(KEInitializationFailed());
-		}
-	else if (aError == EScanNextDirectoryFailed)
-		{
-		aErrorStr.Set(KEScanNextDirectoryFailed());
-		}
-	else if (aError == ESrcOpenFailed)
-		{
-		aErrorStr.Set(KESrcOpenFailed());
-		}
-	else if (aError == ETrgOpenFailed)
-		{
-		aErrorStr.Set(KETrgOpenFailed());
-		}
-	else if (aError == ENoFilesProcessed)
-		{
-		aErrorStr.Set(KENoFilesProcessed());
-		}
-	}
-	
-/** Converts CFileMan::TAction type to string **/
-void CT_FileManData::ConvertActionToString(CFileMan::TAction aAction, TPtrC& aActionStr)
-	{
-	if (aAction == CFileMan::EAttribs)
-		{
-		aActionStr.Set(KEAttribs());
-		}
-	else if (aAction == CFileMan::ECopy)
-		{
-		aActionStr.Set(KECopy());
-		}
-	else if (aAction == CFileMan::EDelete)
-		{
-		aActionStr.Set(KEDelete());
-		}
-	else if (aAction == CFileMan::EMove)
-		{
-		aActionStr.Set(KEMove());
-		}
-	else if (aAction == CFileMan::ERename)
-		{
-		aActionStr.Set(KERename());
-		}
-	else if (aAction == CFileMan::ERmDir)
-		{
-		aActionStr.Set(KERmDir());
-		}
-	else if (aAction == CFileMan::ERenameInvalidEntry)
-		{
-		aActionStr.Set(KERenameInvalidEntry());
-		}
-	else if (aAction == CFileMan::ECopyFromHandle)
-		{
-		aActionStr.Set(KECopyFromHandle());
-		}
-	else
-		{
-		aActionStr.Set(KENone());
-		}
-		
-	}
-	
-/** Reads CFileMan::TAction from INI and converts it to CFileMan::TAction type. **/
-TBool CT_FileManData::GetActionFromConfig(const TDesC& aParameterName, const TDesC& aSection, CFileMan::TAction& aAction)
-	{
-	TPtrC actionStr;
-	TBool ret = GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, actionStr);
-	if(ret)
-		{		
-		if (actionStr == KEAttribs)
-			{
-			aAction = CFileMan::EAttribs;
-			}
-		else if (actionStr == KECopy)
-			{
-			aAction = CFileMan::ECopy;
-			}
-		else if (actionStr == KEDelete)
-			{
-			aAction = CFileMan::EDelete;
-			}
-		else if (actionStr == KEMove)
-			{
-			aAction = CFileMan::EMove;
-			}
-		else if (actionStr == KERename)
-			{
-			aAction = CFileMan::ERename;
-			}
-		else if (actionStr == KERmDir)
-			{
-			aAction = CFileMan::ERmDir;
-			}
-		else if (actionStr == KERenameInvalidEntry)
-			{
-			aAction = CFileMan::ERenameInvalidEntry;
-			}
-		else if (actionStr == KECopyFromHandle)
-			{
-			aAction = CFileMan::ECopyFromHandle;
-			}
-		else if (actionStr == KENone)
-			{
-			aAction = CFileMan::ENone;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		}
-		return ret;
-	}
-	
-/** Reads CFileMan::TSwitch from INI and converts it to CFileMan::TSwitch type. **/
-TBool CT_FileManData::GetOperationFromConfig(const TDesC& aParameterName, const TDesC& aSection, TUint& aSwitch)
-	{
-	TPtrC	operation;
-	TBool	ret=GET_MANDATORY_STRING_PARAMETER(aParameterName, aSection, operation);
-	if(ret)
-		{	
-		if (operation == KEOverWrite)
-			{
-			aSwitch = CFileMan::EOverWrite;
-			}
-		else if (operation == KERecurse)
-			{
-			aSwitch = CFileMan::ERecurse;
-			}
-		else
-			{
-			TInt operationInt=0;
-			ret = GET_MANDATORY_INT_PARAMETER(aParameterName, aSection, operationInt);
-			if (ret)
-				{
-				aSwitch = (CFileMan::TSwitch) operationInt;
-				}
-			}
-		}
-	return ret;	
-	}
-	
-/** Clears all arrays with history **/
-void CT_FileManData::ClearHistory()
-	{
-	INFO_PRINTF1(_L("Clearing history!"));
-	
-	iStartedHistory.ResetAndDestroy();
-	iOperationHistory.ResetAndDestroy();
-	iEndedHistory.ResetAndDestroy();	
-	}
-	
-/**
-* Creates a history entry.
-* This method runs only from NotifyFileManStarted(), NotifyFileManOperation(), NotifyFileManEnded().
-**/
-void CT_FileManData::CreateHistoryRecord(THistoryData& aRecord)
-	{
-	TFileName source;
-	iFileMan->GetCurrentSource(source);
-	aRecord.iCurrentSource = source;
-	
-	TFileName target;
-	iFileMan->GetCurrentTarget(target);
-	aRecord.iCurrentTarget = target;
-	
-	aRecord.iCurrentEntry = iFileMan->CurrentEntry();
-	aRecord.iBytesTransferred = iFileMan->BytesTransferredByCopyStep();
-	aRecord.iCurrentAction = iFileMan->CurrentAction();
-	aRecord.iLastError = iFileMan->GetLastError();
-	aRecord.iMoreInfoAboutError = iFileMan->GetMoreInfoAboutError();
-	aRecord.iFullPath.Set( iFileMan->FullPath() );
-	aRecord.iAbbreviatedPath.Set( iFileMan->AbbreviatedPath() );	
-	}
-	
-/** Reads type of notification from INI and converts it to TObserverNotifyType **/
-TBool CT_FileManData::GetNotifyType(const TDesC& aParameterName, const TDesC& aSection, TObserverNotifyType& aType)
-	{
-	TPtrC	type;
-	TBool	ret=GET_MANDATORY_STRING_PARAMETER(aParameterName, aSection, type);
-	if(ret)
-		{	
-		if (type == KNotifyStarted)
-			{
-			aType = ENotifyStarted;
-			}
-		else if (type == KNotifyOperation)
-			{
-			aType = ENotifyOperation;
-			}
-		else if (type == KNotifyEnded)
-			{
-			aType = ENotifyEnded;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		}
-	return ret;	
-	}
-
-/** Returns specific array of history using TObserverNotifyType value   **/	
-RPointerArray<THistoryData>* CT_FileManData::GetHistoryDataByType(const TDesC& aSection)
-	{	
-	TObserverNotifyType type;
-	RPointerArray<THistoryData>* history = NULL;
-	//Reads history name which must be returned.
-	if (GetNotifyType(KNotifyType(), aSection, type))
-		{
-		if(type == ENotifyStarted)
-			{
-			history = (RPointerArray<THistoryData>*)&iStartedHistory;
-			}
-		else if(type == ENotifyOperation)
-			{
-			history = (RPointerArray<THistoryData>*)&iOperationHistory;
-			}
-		else if(type == ENotifyEnded)
-			{
-			history = (RPointerArray<THistoryData>*)&iEndedHistory;
-			}
-		}
-	return history;
-	}
-/** Reads TControl from config and converts it to TControl type  **/
-TBool CT_FileManData::GetTControlFromConfig(const TDesC& aParameterName, const TDesC& aSection, TControl& aFlag)
-	{
-	TPtrC flag;
-	TBool	ret=GET_MANDATORY_STRING_PARAMETER(aParameterName, aSection, flag);
-	if(ret)
-		{	
-		if (flag == KEContinue)
-			{
-			aFlag = EContinue;
-			}
-		else if (flag == KEAbort)
-			{
-			aFlag = EAbort;
-			}
-		else if (flag == KECancel)
-			{
-			aFlag = ECancel;
-			}
-		else if (flag == KERetry)
-			{
-			aFlag = ERetry;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		}
-	return ret;	
-	}
-
-/** Reads TControl and file name from INI  **/	
-void CT_FileManData::ReadTControl(const TDesC& aSection)
-	{
-	TBool dataOk = ETrue;
-	if(!GetNotifyType(KNotifyType(), aSection, iObserverNotifyType))
-		{
-			dataOk = EFalse;
-		}
-	TPtrC fileName;
-	if(GET_MANDATORY_STRING_PARAMETER(KFileName(), aSection, fileName))
-		{
-		iNotifyFileName = fileName;
-		}
-	else
-		{
-		dataOk = EFalse;	
-		}
-	if(!GetTControlFromConfig(KFlag(), aSection, iTControl))
-		{
-		dataOk = EFalse;
-		}
-	if(dataOk)
-		{
-		iUseTControl = ETrue;
-		}
-	}
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FileNamesIdenticalData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-v
-This contains CT_FileNamesIdenticalData
-*/
-
-//	User includes
-#include "T_FileNamesIdenticalData.h"
-#include "T_SfSrvServer.h"
-
-/*@{*/
-///	Parameters
-_LIT(KFile1,										"file1");
-_LIT(KFile2,										"file2");
-_LIT(KExpected,										"expected");
-
-
-///Commands
-_LIT(KCmdFileNamesIdentical,						"FileNamesIdentical");
-
-
-CT_FileNamesIdenticalData* CT_FileNamesIdenticalData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_FileNamesIdenticalData* ret = new (ELeave) CT_FileNamesIdenticalData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-
-
-CT_FileNamesIdenticalData::CT_FileNamesIdenticalData()
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-
-
-void CT_FileNamesIdenticalData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-
-
-CT_FileNamesIdenticalData::~CT_FileNamesIdenticalData()
-/**
-* Destructor.
-*/
-	{
-	}
-
-
-TAny* CT_FileNamesIdenticalData::GetObject()
-	{
-	return NULL;
-	}
-
-
-TBool CT_FileNamesIdenticalData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection	the section in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-
-	if (aCommand == KCmdFileNamesIdentical)
-		{
-		DoCmdFileNamesIdentical(aSection);
-		}
-	return retVal;
-	}
-	
-void CT_FileNamesIdenticalData::DoCmdFileNamesIdentical(const TDesC& aSection)
-	{
-	TPtrC file1, file2;
-	TBool expected;
-	if(GET_MANDATORY_STRING_PARAMETER(KFile1, aSection, file1)
-		&& GET_MANDATORY_STRING_PARAMETER(KFile2, aSection, file2)
-		&& GET_MANDATORY_BOOL_PARAMETER(KExpected, aSection, expected))
-		{
-		TBool identical = EFalse;
-		
-		INFO_PRINTF1(_L("Comparing files:"));
-		INFO_PRINTF2(_L("File 1: %S"), &file1);
-		INFO_PRINTF2(_L("File 2: %S"), &file2);
-		
-		identical = FileNamesIdentical(file1,file2);
-		if(identical != expected)
-			{
-			ERR_PRINTF1(_L("File names are not identical and it's not expected!"));
-			SetBlockResult(EFail);
-			}
-		else
-			{
-			if (expected)
-				{
-				INFO_PRINTF1(_L("File names are identical."));
-				}
-			else
-				{
-				INFO_PRINTF1(_L("File names are not identical, but it's expected."));
-				}
-			}
-		}
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FileTextData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,325 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_FileTextData.h"
-
-// constants
-const TInt	KReadLength		= 64;
-
-const TBool KMandatory			= EFalse;
-
-_LIT( KStrSeekEnd,				"ESeekEnd" );
-_LIT( KStrSeekStart,			"ESeekStart" );
-_LIT( KStrSeekAddress,			"ESeekAddress");
-_LIT( KStrSeekCurrent,			"ESeekCurrent");
-// Commands
-_LIT( KCmdDestructor,			"~" );
-_LIT( KCmdNew,					"new" );
-_LIT( KCmdRead,					"Read" );
-_LIT( KCmdSeek,					"Seek" );
-_LIT( KCmdSet,					"Set" );
-_LIT( KCmdWrite,				"Write" );
-
-// Parameters
-_LIT( KParamExpectedString,		"expected_str" );
-_LIT( KParamObjectName,			"object_name" );
-_LIT( KParamSeekMode,			"seek_mode" );
-_LIT( KParamText,				"text" );
-_LIT( KParamBufferLength,		"buffer_length");
-
-CT_FileTextData* CT_FileTextData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_FileTextData* ret = new (ELeave) CT_FileTextData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_FileTextData::CT_FileTextData():
-iFileText(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-	
-void CT_FileTextData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-/**
-* Destructor.
-*/
-CT_FileTextData::~CT_FileTextData()
-	{
-	DoCleanup();
-	}
-	
-TAny* CT_FileTextData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iFileText;
-	}
-
-TBool CT_FileTextData::DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/ )
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-	
-	if ( aCommand == KCmdDestructor )
-		{
-		DoCleanup();
-		}
-	else if ( aCommand == KCmdNew )
-		{
-		DoCmdNew();
-		}
-	else if ( aCommand == KCmdRead )
-		{
-		DoCmdRead( aSection );
-		}
-	else if ( aCommand == KCmdSeek )
-		{
-		DoCmdSeek( aSection );
-		}
-	else if ( aCommand == KCmdSet )
-		{
-		DoCmdSet( aSection );
-		}
-	else if ( aCommand == KCmdWrite )
-		{
-		DoCmdWrite( aSection );
-		}
-	else
-	    {
-	    retVal = EFalse;    
-	    }
-	
-	return retVal;
-	}
-	
-void CT_FileTextData::DoCleanup()
-/**
-* Deletes TFileText class instance
-*/
-    {
-	INFO_PRINTF1( _L( "Delete TFileText class instance" ) );
-	delete iFileText;
-	iFileText = NULL;
-	}
-	
-void CT_FileTextData::DoCmdNew()
-/**
-* Creates new TFileText class instance
-*/
-	{
-	DoCleanup();
-	
-	INFO_PRINTF1( _L( "Create new TFileText class instance." ) );
-	TRAPD( err, iFileText = new (ELeave) TFileText() );
-	if ( err != KErrNone )
-		{
-		ERR_PRINTF2( _L( "new TFileText() error %d" ), err );
-		SetError( err );
-		}
-	}
-	
-void CT_FileTextData::DoCmdRead( const TDesC& aSection )
-/**
-* Reads one line form file using Read()
-*/
-	{
-	INFO_PRINTF1( _L( "Read one line from file." ) );
-	
-	RBuf readLine;
-	TInt bufferLength = KReadLength;
-	
-	GET_OPTIONAL_INT_PARAMETER( KParamBufferLength, aSection, bufferLength );
-	TInt err = readLine.Create(bufferLength);
-		
-	if(err == KErrNone)
-		{
-		err = iFileText->Read( readLine );
-	
-		INFO_PRINTF2( _L( "FileText::Read() result - %S" ), &readLine );
-		
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF2( _L( "Function returned error %d." ), err );
-			SetError( err );
-			}
-		else
-			{
-			TPtrC expectedLine;
-			if ( GET_OPTIONAL_STRING_PARAMETER( KParamExpectedString, aSection, expectedLine ) )
-				{
-				if ( readLine.Compare(expectedLine)!=0 )
-					{
-					ERR_PRINTF3( _L( "Read line \"%S\", expected \"%S\"." ), &readLine, &expectedLine );
-					SetBlockResult( EFail );
-					}
-				}
-			}
-		readLine.Close();
-		}
-	else
-		{
-		SetBlockResult( EFail );
-		ERR_PRINTF1( _L( "RBuf initialization failed." ));
-		}
-	}
-	
-void CT_FileTextData::DoCmdSeek( const TDesC& aSection )
-/**
-* performs a seek to start or end of file using Seek()
-*/
-	{
-	TSeek mode;
-	if ( GetSeekMode( aSection, mode, KMandatory ) )
-		{
-		TInt err = iFileText->Seek( mode );
-	
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF2( _L( "Function returned %d." ), err);
-			SetError( err );
-			}
-		}
-	}
-
-void CT_FileTextData::DoCmdSet( const TDesC& aSection )
-/**
-* Sets the file to be read from or written to using Set()
-*/
-	{
-	TPtrC fileObjectName;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamObjectName, aSection, fileObjectName ) )
-		{
-		INFO_PRINTF2( _L( "Set( %S )" ), &fileObjectName );
-		
-		RFile* fileObject = NULL;
-		TRAPD( err, fileObject = (RFile*)GetDataObjectL( fileObjectName ) );
-
-		if ( err == KErrNone )
-			{
-			iFileText->Set( *fileObject );
-			}
-		else
-			{
-			ERR_PRINTF3( _L( "Unable to access object %S (error = %d)"), &fileObjectName, err );
-			SetBlockResult( EFail );
-			}
-		
-		}
-	}
-	
-void CT_FileTextData::DoCmdWrite( const TDesC& aSection )
-/**
-* writes one line of text into file using Write()
-*/
-	{
-	TPtrC writeLine;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamText, aSection, writeLine ) )
-		{
-		
-		INFO_PRINTF2( _L( "Write \"%S\" into file" ), &writeLine );
-		TInt err = iFileText->Write( writeLine );
-		if ( err != KErrNone)
-			{
-			ERR_PRINTF2( _L( "Function returned %d." ), err);
-			SetError( err );
-			}
-		}
-	}
-
-	
-
-TBool CT_FileTextData::GetSeekMode( const TDesC& aSection, TSeek& aMode, TBool aOptional )
-/** 
-* retrieves "seek_mode" parameter value and converts it into its TSeek representation
-* @param aSection 	- the entry in the ini file requiring the command to be processed
-* @param aMode		- the returned TSeek representation of "seek_mode" command parameter
-* @param aOptional	- represents the function which is called to retrieve the value
-*					KOptional	- GET_OPTIONAL_STRING_PARAMETER is called
-*					KMandatory	- GET_MANDATORY_STRING_PARAMETER is called
-*
-* @return ETrue if "seek_mode" parameter is present and has been sucessfully converted
-*/
-	{
-	TBool result = ETrue;
-	
-	TPtrC strSeekMode;
-	
-	// Get "seek_mode" command parameter string value
-	if ( aOptional )
-		{
-		result = GET_OPTIONAL_STRING_PARAMETER( KParamSeekMode, aSection, strSeekMode );
-		}
-	else
-		{
-		result = GET_MANDATORY_STRING_PARAMETER( KParamSeekMode, aSection, strSeekMode );
-		}
-	
-	// Convert it into TSeek representation
-	if ( result )
-		{
-		if ( strSeekMode == KStrSeekEnd )
-			{
-			aMode = ESeekEnd;
-			}
-		else if ( strSeekMode == KStrSeekStart )
-			{
-			aMode = ESeekStart;
-			}
-		else if ( strSeekMode == KStrSeekAddress )
-			{
-			aMode = ESeekAddress;
-			}
-		else if ( strSeekMode == KStrSeekCurrent )
-			{
-			aMode = ESeekCurrent;
-			}
-		else
-			{
-			ERR_PRINTF2( _L( "Unrecognized seek_mode value: %S" ), &strSeekMode );
-			result = EFalse;
-			}
-		}
-			
-	return result;
-	}
- 
- 
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FindFileData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,464 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_FindFileData.h"
-
-// Commands
-_LIT( KCmdDelete,				"~" );
-_LIT( KCmdNew,					"new" );
-_LIT( KCmdFile,					"File" );
-_LIT( KCmdFind,					"Find" );
-_LIT( KCmdFindByDir, 			"FindByDir" );
-_LIT( KCmdFindByPath,			"FindByPath" );
-_LIT( KCmdFindWild,				"FindWild" );
-_LIT( KCmdFindWildByDir,		"FindWildByDir" );
-_LIT( KCmdFindWildByPath,		"FindWildByPath" );
-_LIT( KCmdSetFindMask,			"SetFindMask" );
-
-// Parameters
-_LIT( KParamFileName,			"filename" );
-_LIT( KParamFileSession,		"FileSession" );
-_LIT( KParamExpected,			"expected" );
-_LIT( KParamPathList,			"pathlist" );
-_LIT( KDriveAtt,				"drive_att");
-_LIT( KDirWrapper,				"dir_wrapper");
-
-// Utility variables
-_LIT(KDriveAttLocalStr,				"KDriveAttLocal");
-_LIT(KDriveAttRomStr,				"KDriveAttRom");
-_LIT(KDriveAttRedirectedStr,		"KDriveAttRedirected");
-_LIT(KDriveAttSubstedStr,			"KDriveAttSubsted");
-_LIT(KDriveAttInternalStr,			"KDriveAttInternal");
-_LIT(KDriveAttRemovableStr,			"KDriveAttRemovable");
-
-
-CT_FindFileData* CT_FindFileData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_FindFileData* ret = new (ELeave) CT_FindFileData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_FindFileData::CT_FindFileData()
-:	iFindFile(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-	
-void CT_FindFileData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_FindFileData::~CT_FindFileData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-	
-TAny* CT_FindFileData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iFindFile;
-	}
-
-TBool CT_FindFileData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/  )
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-	
-	if ( aCommand == KCmdDelete )
-		{
-		DoCleanup();
-		}
-	else if ( aCommand == KCmdFile )
-		{
-		DoCmdFile( aSection );
-		}
-	else if ( aCommand == KCmdFind )
-		{
-		DoCmdFind( aSection );
-		}
-	else if ( aCommand == KCmdFindByDir )
-		{
-		DoCmdFindByDir( aSection );
-		}
-	else if ( aCommand == KCmdFindByPath )
-		{
-		DoCmdFindByPath( aSection );
-		}
-	else if ( aCommand == KCmdFindWild )
-		{
-		DoCmdFindWildL( aSection );
-		}
-	else if ( aCommand == KCmdFindWildByDir )
-		{
-		DoCmdFindWildByDirL( aSection );
-		}
-	else if ( aCommand == KCmdFindWildByPath )
-		{
-		DoCmdFindWildByPathL( aSection );
-		}
-	else if ( aCommand == KCmdNew )
-		{
-		DoCmdNew( aSection);
-		}
-	else if ( aCommand == KCmdSetFindMask )
-		{
-		DoCmdSetFindMask( aSection);
-		}
-	else
-	    {
-	    retVal = EFalse;    
-	    }
-	
-	return retVal;
-	}
-	
-void CT_FindFileData::DoCleanup()
-/** Deletes TFindFile class instance */
-	{
-	INFO_PRINTF1( _L( "Delete TFindFile class instance" ) );
-	delete iFindFile;
-	iFindFile = NULL;
-	}
-	
-void CT_FindFileData::DoCmdFile( const TDesC& aSection )
-/** calls File() and comaperes the result with the expected */
-	{
-	TPtrC strResult;
-	strResult.Set( iFindFile->File() );
-	INFO_PRINTF2( _L( "File(): %S" ),  &strResult );
-	
-	TPtrC strExpected;
-	if ( GET_OPTIONAL_STRING_PARAMETER (KParamExpected, aSection, strExpected) )
-		{
-		if ( strExpected.CompareF(strResult) )
-			{
-			ERR_PRINTF3( _L( "File returned %S, expected %S") , &strResult, &strExpected );
-			SetBlockResult( EFail );
-			}
-		}
-	}
-	
-void CT_FindFileData::DoCmdFind( const TDesC& /*aSection*/ )
-/** performs a search of a file using Find */
-	{
-	TInt result = iFindFile->Find();
-	
-	if( result != KErrNone)
-		{
-		ERR_PRINTF2( _L( "Find() return error = %d"), result );
-		SetError(result);
-		}
-	}
-	
-void CT_FindFileData::DoCmdFindByDir( const TDesC& aSection )
-/** performs a search of a file using FindByDir */
-	{
-	TPtrC fileName;	
-	if( GET_MANDATORY_STRING_PARAMETER( KParamFileName, aSection, fileName ) &&
-		GET_MANDATORY_STRING_PARAMETER( KParamPathList, aSection, iPathList ) )
-		{
-		TInt err = iFindFile->FindByDir( fileName, iPathList );
-		
-		if( err != KErrNone)
-			{
-			ERR_PRINTF2( _L( "FindByDir() return error = %d"), err );
-			SetError(err);
-			}		
-		}
-	}
-
-void CT_FindFileData::DoCmdFindByPath( const TDesC& aSection )
-/** performs a search of a file using FindByPath */
-	{
-	TPtrC fileName;	
-	if( GET_MANDATORY_STRING_PARAMETER( KParamFileName, aSection, fileName ) &&
-		GET_MANDATORY_STRING_PARAMETER( KParamPathList, aSection, iPathList ) )
-		{
-		TInt err = iFindFile->FindByPath( fileName, &iPathList );
-		
-		if( err != KErrNone)
-			{
-			ERR_PRINTF2( _L( "FindByPath() return error = %d"), err );
-			SetError(err);
-			}
-		
-		}
-	
-	}
-	
-void CT_FindFileData::DoCmdFindWildL( const TDesC& aSection)
-/** performs a search of a file using FindWild */
-	{
-	TPtrC dirWrapperName;
-	if (GET_MANDATORY_STRING_PARAMETER(KDirWrapper, aSection, dirWrapperName))
-		{
-		CT_DirData *dirWrapper = NULL;
-		TRAPD( error, dirWrapper = static_cast<CT_DirData*>(GetDataWrapperL(dirWrapperName)))
-		
-		if( dirWrapper && (error == KErrNone) )
-			{
-			CDir* dir = NULL;
-			TInt err = iFindFile->FindWild( dir );
-		
-			if( err != KErrNone)
-				{
-				ERR_PRINTF2( _L( "FindWild() return error = %d"), err );
-				SetError(err);
-				}
-			else
-				{
-				dirWrapper->SetObjectL(dir);
-				}
-			}
-		else
-			{
-			ERR_PRINTF2( _L( "Wrong CDir wrapper name %S"), &dirWrapperName );
-			SetBlockResult( EFail );
-			}
-		}
-	}
-	
-void CT_FindFileData::DoCmdFindWildByDirL( const TDesC& aSection )
-/** performs a search of a file using FindWildByDir */
-	{
-	TPtrC fileName;	
-	TPtrC dirWrapperName;
-	if( GET_MANDATORY_STRING_PARAMETER( KParamFileName, aSection, fileName ) &&
-		GET_MANDATORY_STRING_PARAMETER( KParamPathList, aSection, iPathList ) &&
-		GET_MANDATORY_STRING_PARAMETER( KDirWrapper, aSection, dirWrapperName) )
-		{
-		CT_DirData *dirWrapper = NULL;
-		TRAPD( error, dirWrapper = static_cast<CT_DirData*>(GetDataWrapperL(dirWrapperName)))
-		
-		if(dirWrapper && (error == KErrNone) )
-			{	
-			CDir* dir = NULL;
-			TInt err = iFindFile->FindWildByDir( fileName, iPathList, dir );
-			
-			if( err != KErrNone)
-				{
-				ERR_PRINTF2( _L( "FindWildByDir() return error = %d"), err );
-				SetError(err);
-				}
-			else
-				{
-				dirWrapper->SetObjectL(dir);
-				}
-			}
-		else
-			{
-			ERR_PRINTF2( _L( "Wrong CDir wrapper name %S"), &dirWrapperName );
-			SetBlockResult( EFail );
-			}
-		}
-	}
-	
-void CT_FindFileData::DoCmdFindWildByPathL( const TDesC& aSection )
-/** performs a search of a file using FindWildByPath */
-	{
-	TPtrC fileName;	
-	TPtrC dirWrapperName;
-	if( GET_MANDATORY_STRING_PARAMETER( KParamFileName, aSection, fileName ) &&
-		GET_MANDATORY_STRING_PARAMETER( KParamPathList, aSection, iPathList ) &&
-		GET_MANDATORY_STRING_PARAMETER( KDirWrapper, aSection, dirWrapperName) )
-		{
-		CT_DirData *dirWrapper = NULL;
-		TRAPD( error, dirWrapper = static_cast<CT_DirData*>(GetDataWrapperL(dirWrapperName)))
-		
-		if( dirWrapper && (error == KErrNone))
-			{
-			CDir* dir = NULL;
-			TInt err = iFindFile->FindWildByPath( fileName, &iPathList, dir );
-			
-			if( err != KErrNone)
-				{
-				ERR_PRINTF2( _L( "FindWildByPath() return error = %d"), err );
-				SetError(err);
-				}
-			else
-				{
-				dirWrapper->SetObjectL(dir);
-				}
-			}
-		else
-			{
-			ERR_PRINTF2( _L( "Wrong CDir wrapper name %S"), &dirWrapperName );
-			SetBlockResult( EFail );
-			}
-		}
-	
-	}
-
-	
-void CT_FindFileData::DoCmdNew( const TDesC& aSection )
-/** Creates new TFindFile class instance */
-	{
-	DoCleanup();
-	
-	TPtrC fsObjectName;	
-	if( GET_MANDATORY_STRING_PARAMETER( KParamFileSession, aSection, fsObjectName ) )
-		{
-		RFs* fsObject = NULL;
-		TRAPD( err, fsObject = (RFs*)GetDataObjectL(fsObjectName));
-		if ( err == KErrNone )
-			{
-			INFO_PRINTF1( _L( "Create new TFindFile class instance." ) );
-			TRAP( err, iFindFile = new (ELeave) TFindFile( *fsObject ) );
-			if ( err != KErrNone )
-				{
-				ERR_PRINTF3( _L( "new TFindFile(%S) error %d" ), &fsObjectName, err );
-				SetBlockResult( EFail );
-				}
-			}
-		else
-			{
-			ERR_PRINTF3( _L( "Unrecognized object name parameter value: %S. Error %d"), &fsObjectName, err );
-			SetBlockResult( EFail );
-			}
-		}
-	}
- 
-void CT_FindFileData::DoCmdSetFindMask( const TDesC& aSection )
-/** Specify a combination of drive attributes */
-	{
-	TUint iniMask;
-	if( GetDriveAttsFromConfig( aSection, iniMask ) )
-		{
-		INFO_PRINTF2( _L( "Mask is  %d"), iniMask );
-		TInt err = iFindFile->SetFindMask( iniMask );
-		
-		if ( err != KErrNone)
-			{
-			ERR_PRINTF2( _L( "SetFindMask return error = %d"), err );
-			SetError( err );
-			}
-		else
-			{
-			INFO_PRINTF1( _L( "SetFindMask OK"));
-			}
-		}	
-	}
-
-
-TBool CT_FindFileData::ConvertToDriveAtts(const TDesC& aDriveAttStr, TUint& aDriveAtt)
-/** Convert string to mask */
-	{
-	TBool	ret = ETrue;
-	if ( aDriveAttStr==KDriveAttLocalStr )
-		{
-		aDriveAtt=KDriveAttLocal;
-		}
-	else if ( aDriveAttStr==KDriveAttRomStr )
-		{
-		aDriveAtt=KDriveAttRom;
-		}
-	else if ( aDriveAttStr==KDriveAttRedirectedStr )
-		{
-		aDriveAtt=KDriveAttRedirected;
-		}
-	else if ( aDriveAttStr==KDriveAttSubstedStr )
-		{
-		aDriveAtt=KDriveAttSubsted;
-		}
-	else if ( aDriveAttStr==KDriveAttInternalStr )
-		{
-		aDriveAtt=KDriveAttInternal;
-		}
-	else if ( aDriveAttStr==KDriveAttRemovableStr )
-		{
-		aDriveAtt=KDriveAttRemovable;
-		}
-	else
-		{
-		TInt	location = aDriveAttStr.Match(_L("*|*"));
-		if( location!=KErrNotFound )
-			{
-			//Converting Left part of the data
-			TPtrC	tempStr = aDriveAttStr.Left(location);
-			ret=ConvertToDriveAtts(tempStr, aDriveAtt);
-
-			//Converting right data can be with another "|"
-			tempStr.Set(aDriveAttStr.Mid(location+1));
-
-			TUint	driveAttTmp;
-			if ( ConvertToDriveAtts(tempStr, driveAttTmp) )
-				{
-				aDriveAtt=aDriveAtt|driveAttTmp;
-				}
-			else
-				{
-				ret=EFalse;
-				}
-			}
-		else
-			{
-			ret=EFalse;
-			}
-		}
-
-	return ret;
-	}
-		
-	
-TBool CT_FindFileData::GetDriveAttsFromConfig(const TDesC& aSection, TUint& aDriveAtt)
-	{
-	TPtrC	driveAttStr;
-	TBool ret = GET_MANDATORY_STRING_PARAMETER(KDriveAtt(), aSection, driveAttStr);
-	if ( ret )
-		{
-		aDriveAtt = 0;
-		if ( !ConvertToDriveAtts(driveAttStr, aDriveAtt) )
-			{
-			TInt	intTemp;
-			ret=GET_MANDATORY_INT_PARAMETER(KDriveAtt(), aSection, intTemp);
-			if ( ret )
-				{
-				aDriveAtt=intTemp;
-				}
-			}
-		}
-
-	return ret;
-	}
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FormatData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,428 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FormatData
-*/
-
-//	User includes
-#include "T_FormatData.h"
-
-/*@{*/
-///	Parameters
-_LIT(KRFsName,							"RFs");
-_LIT(KDrive,							"drive");
-_LIT(KFormat,							"format");
-_LIT(KSpecialInfo,						"specialinfo");
-_LIT(KAsync,							"async");
-_LIT(KEnd,								"end");
-_LIT(KCount,							"count");
-
-//	Format mode
-_LIT(KFormatHighDensity,				"EHighDensity");
-_LIT(KFormatLowDensity,					"ELowDensity");
-_LIT(KFormatFullFormat,					"EFullFormat");
-_LIT(KFormatQuickFormat,				"EQuickFormat");
-_LIT(KFormatSpecialFormat,				"ESpecialFormat");
-_LIT(KFormatForceErase,					"EForceErase");
-
-///	Commands
-_LIT(KCmdNew,							"new");
-_LIT(KCmdDestructor,					"~");
-_LIT(KCmdOpen,							"Open");
-_LIT(KCmdClose,							"Close");
-_LIT(KCmdNext,							"Next");
-/*@}*/
-
-CT_FormatData* CT_FormatData::NewL()
-/**
- * Two phase constructor
- */
-	{
-	CT_FormatData* ret = new ( ELeave ) CT_FormatData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_FormatData::CT_FormatData()
-:	iFormat( NULL )
-,	iNext( NULL )
-,	iCount( 0 )
-,	iCountNextEnd( 0 )
-/**
- * Protected constructor. First phase construction
- */
-	{
-	}
-
-void CT_FormatData::ConstructL()
-/**
- * Protected constructor. Second phase construction
- */
-	{
-	iNext = CActiveCallback::NewL( *this );
-	}
-
-CT_FormatData::~CT_FormatData()
-/**
- * Destructor.
- */
-	{
-	delete iNext;
-	iNext = NULL;
-	DoCleanup();
-	}
-
-void CT_FormatData::DoCleanup()
-/**
- * Contains cleanup implementation
- */
-	{
-	//Deleting RFormat.
-	if(iFormat != NULL)
-		{
-		INFO_PRINTF1( _L("Deleting current RFormat") );
-		delete iFormat;
-		iFormat = NULL;
-		}
-	}
-
-TAny* CT_FormatData::GetObject()
-/**
- * Return a pointer to the object that the data wraps
- *
- * @return	pointer to the object that the data wraps
- */
-	{
-	return iFormat;
-	}
-
-TBool CT_FormatData::DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex )
-/**
- * Process a command read from the ini file
- *
- * @param	aCommand requiring command to be processed
- * @param	aSection the section in the ini file requiring the command to be processed
- * @param	aAsyncErrorIndex the index of asynchronous command error code belongs to.
- *
- * @leave	system wide error
- *
- * @return	ETrue if the command is processed
- */
-	{
-	TBool retVal = ETrue;
-
-	if ( aCommand == KCmdNew )
-		{
-		DoCmdNewL();
-		}
-	else if ( aCommand == KCmdDestructor )
-		{
-		DoCmdDestructor();
-		}
-	else if ( aCommand == KCmdOpen )
-		{
-		DoCmdOpenL( aSection );
-		}
-	else if ( aCommand == KCmdClose )
-		{
-		DoCmdClose();
-		}
-	else if ( aCommand == KCmdNext )
-		{
-		DoCmdNext( aSection, aAsyncErrorIndex );
-		}
-	else
-		{
-		retVal = EFalse;
-		}
-	return retVal;
-	}
-
-void CT_FormatData::DoCmdNewL()
-/**
- * Creates new RFormat class instance
- */
-	{
-	//Deletes previous RFormat class instance if it was already created.
-	DoCleanup();
-
-	INFO_PRINTF1( _L("Create new RFormat class instance") );
-
-	// do create
-	TRAPD( err, iFormat = new ( ELeave ) RFormat() );
-	if ( err != KErrNone )
-		{
-		ERR_PRINTF2( _L("new error %d"), err );
-		SetError( err );
-		}
-	}
-
-void CT_FormatData::DoCmdDestructor()
-/**
- * Destroy RFormat the object
- */
-	{
-	DoCleanup();
-	}
-
-void CT_FormatData::DoCmdOpenL( const TDesC& aSection )
-/**
- * RFormat::Open
- *
- * @leave	system wide error
- */
-	{
-	TBool	dataOk = ETrue;
-
-	RFs*	rfsObject = NULL;
-	TPtrC	rfsObjectName;
-	if ( GET_MANDATORY_STRING_PARAMETER( KRFsName, aSection, rfsObjectName ) )
-		{
-		TRAPD( err, rfsObject = ( RFs* )GetDataObjectL( rfsObjectName ));
-		
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF1( _L("Error with fileserver"));
-			SetBlockResult( EFail );
-			}
-		}
-	else
-		{
-		dataOk = EFalse;
-		}
-
-	TPtrC	drive;
-	if ( !GET_MANDATORY_STRING_PARAMETER( KDrive, aSection, drive ) )
-		{
-		dataOk = EFalse;
-		}
-
-	TUint	formatMode = 0;
-	if ( !GetFormatMode( KFormat, aSection, formatMode ) )
-		{
-		dataOk = EFalse;
-		}
-
-	if ( dataOk )
-		{
-		TInt	err = KErrNone;
-
-		TPtrC	specialInfo;
-		if ( GET_OPTIONAL_STRING_PARAMETER( KSpecialInfo, aSection, specialInfo ) )
-			{
-			HBufC8*	buf = HBufC8::NewLC( specialInfo.Length() );
-			buf->Des().Copy( specialInfo );
-			err = iFormat->Open( *rfsObject, drive, formatMode, iCount, buf->Des() );
-			CleanupStack::PopAndDestroy( buf );
-			}
-		else
-			{
-			err = iFormat->Open( *rfsObject, drive, formatMode, iCount );
-			}
-		INFO_PRINTF2( _L("iCount %d"), iCount );
-		iCountPckg = iCount;
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF2( _L("Open() error %d"), err );
-			SetError( err );
-			}
-		}
-	}
-
-void CT_FormatData::DoCmdClose()
-/**
- * RFormat::Close
- */
-	{
-	iFormat->Close();
-	}
-
-void CT_FormatData::DoCmdNext( const TDesC& aSection, const TInt aAsyncErrorIndex )
-/**
- * RFormat::Next
- */
-	{
-	TBool	async = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER( KAsync, aSection, async );
-
-	iCountNextEnd = 0;
-	GET_OPTIONAL_INT_PARAMETER( KEnd, aSection, iCountNextEnd );
-	
-	GET_OPTIONAL_INT_PARAMETER( KCount, aSection, iCount );
-
-	if ( async )
-		{
-		iFormat->Next( iCountPckg, iNext->iStatus );
-		iNext->Activate( aAsyncErrorIndex );
-		IncOutstanding();
-		}
-	else
-		{
-		TInt	err = KErrNone;
-		while ( ( iCount > iCountNextEnd ) && ( err == KErrNone ) )
-			{
-			err = iFormat->Next( iCount );
-			INFO_PRINTF2( _L("iCount %d"), iCount );
-			}
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF2( _L("Next() error %d"), err );
-			SetError( err );
-			}
-		}
-	}
-
-TBool CT_FormatData::GetFormatMode( const TDesC& aParameterName, const TDesC& aSection, TUint& aFormatMode )
-	{
-	aFormatMode = 0;
-
-	TPtrC	formatStr;
-	TBool	ret = GET_MANDATORY_STRING_PARAMETER( aParameterName, aSection, formatStr );
-	if ( ret )
-		{
-		if ( !ConvertToFormatMode( formatStr, aFormatMode ) )
-			{
-			TInt	intTemp;
-			ret = GET_MANDATORY_INT_PARAMETER( aParameterName, aSection, intTemp );
-			if ( ret )
-				{
-				aFormatMode = intTemp;
-				}
-			}
-		}
-
-	return ret;
-	}
-
-TBool CT_FormatData::ConvertToFormatMode( const TDesC& aFormatModeStr, TUint& aFormatMode )
-	{
-	TBool	ret = ETrue;
-	if ( aFormatModeStr == KFormatHighDensity )
-		{
-		aFormatMode = EHighDensity;
-		}
-	else if ( aFormatModeStr == KFormatLowDensity )
-		{
-		aFormatMode = ELowDensity;
-		}
-	else if ( aFormatModeStr == KFormatFullFormat )
-		{
-		aFormatMode = EFullFormat;
-		}
-	else if ( aFormatModeStr == KFormatQuickFormat )
-		{
-		aFormatMode = EQuickFormat;
-		}
-	else if ( aFormatModeStr == KFormatSpecialFormat )
-		{
-		aFormatMode = ESpecialFormat;
-		}
-	else if ( aFormatModeStr == KFormatForceErase )
-		{
-		aFormatMode = EForceErase;
-		}
-	else
-		{
-		TInt	location = aFormatModeStr.Match( _L("*|*") );
-		if( location != KErrNotFound )
-			{
-			//Converting Left part of the data
-			TPtrC		tempStr = aFormatModeStr.Left( location );
-			ret = ConvertToFormatMode( tempStr, aFormatMode );
-
-			//Converting right data can be with another "|"
-			tempStr.Set( aFormatModeStr.Mid( location + 1 ) );
-
-			TUint	formatModeTmp;
-			if ( ConvertToFormatMode( tempStr, formatModeTmp ) )
-				{
-				aFormatMode |= formatModeTmp;
-				}
-			else
-				{
-				ret = EFalse;
-				}
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		}
-
-	return ret;
-	}
-
-void CT_FormatData::RunL( CActive* aActive, TInt aIndex )
-	{
-	if ( aActive == iNext )
-		{
-		TInt	err = aActive->iStatus.Int();
-		if( err != KErrNone )
-			{
-			ERR_PRINTF2( _L("DoCancel Error %d"), err );
-			SetAsyncError( aIndex, err );
-			DecOutstanding();
-			}
-		else
-			{
-			// Reset the outstanding request state
-			INFO_PRINTF2( _L("RunL iCount %d"), iCountPckg() );
-			if ( iCountPckg() > iCountNextEnd )
-				{
-				iFormat->Next( iCountPckg, iNext->iStatus );
-				iNext->Activate( aIndex );
-				}
-			else
-				{
-				DecOutstanding();
-				}
-			}
-		}
-	else
-		{
- 		ERR_PRINTF1( _L("Stray RunL signal") );
- 		SetBlockResult( EFail );
-		}
-	}
-
-void CT_FormatData::DoCancel( CActive* aActive, TInt aIndex )
-	{
-	if ( aActive == iNext )
-		{
-		TInt	err = aActive->iStatus.Int();
-		if( err != KErrNone )
-			{
-			ERR_PRINTF2( _L("DoCancel Error %d"), err );
-			SetAsyncError( aIndex, err );
-			}
-
-		// Reset the outstanding request state
-		DecOutstanding();
-		}
-	else
-		{
- 		ERR_PRINTF1( _L("Stray RunL signal") );
- 		SetBlockResult( EFail );
-		}
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FsData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,922 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FsData
-*/
-
-//	User includes
-#include "T_FsData.h"
-#include "T_SfSrvServer.h"
-#include "DataWrapperBase.h"
-
-/*@{*/
-
-_LIT(KMessageSlots,							"messageSlots");
-_LIT(KPath,									"path");
-_LIT(KAddress,								"address");
-_LIT(KType,									"type");
-_LIT(KAll,									"all");
-_LIT(KResources,							"resources");
-_LIT(KNotify,								"notify");
-_LIT(KInRom,								"inRom");
-_LIT(KThreshold,							"threshold");
-_LIT(KDrive,								"drive");
-_LIT(KFunctionId,							"functionId");
-_LIT(KAdd,									"add");
-_LIT(KSub,									"sub");
-_LIT(KUseFreeSpace,							"use_free_space");
-_LIT(KVersionName,							"name");
-_LIT(KVersionBuild,							"build");
-_LIT(KVersionMajor,							"major");
-_LIT(KVersionMinor,							"minor");
-_LIT(KIndex,								"index");
-_LIT(KParam1,								"param1");
-_LIT(KParam2,								"param2");
-_LIT(KFile,									"file");
-_LIT(KCount,								"count");
-
-///	Commands
-_LIT(KCmdNew,								"new");
-_LIT(KCmdClose,								"Close");
-_LIT(KCmdDestructor,						"~");
-_LIT(KCmdConnect,							"Connect");
-_LIT(KCmdVersion,							"Version");
-_LIT(KCmdNotifyChange,						"NotifyChange");
-_LIT(KCmdNotifyChangeCancel,				"NotifyChangeCancel");
-_LIT(KCmdNotifyDiskSpace,					"NotifyDiskSpace");
-_LIT(KCmdNotifyDiskSpaceCancel,				"NotifyDiskSpaceCancel");
-_LIT(KCmdIsRomAddress,						"IsRomAddress");
-_LIT(KCmdResourceCountMarkStart,			"ResourceCountMarkStart");
-_LIT(KCmdResourceCountMarkEnd,				"ResourceCountMarkEnd");
-_LIT(KCmdResourceCount,						"ResourceCount");
-_LIT(KCmdGetNotifyUser,						"GetNotifyUser");
-_LIT(KCmdSetNotifyUser,						"SetNotifyUser");
-_LIT(KCmdSetNotifyChange,					"SetNotifyChange");
-_LIT(KCmdLoaderHeapFunction,				"LoaderHeapFunction");
-_LIT(KCmdInitialisePropertiesFile,			"InitialisePropertiesFile");
-/*@}*/
-
-CT_FsData* CT_FsData::NewL()
-/**
- * Two phase constructor
- */
-	{
-	CT_FsData*	ret = new (ELeave) CT_FsData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;	
-	}
-
-CT_FsData::CT_FsData()
-/**
- * Protected constructor. First phase construction
- */
-	{
-	}
-
-void CT_FsData::ConstructL()
-/**
- * Protected constructor. Second phase construction
- */
-	{
-	
-	}
-
-CT_FsData::~CT_FsData()
-/**
- * Destructor.
- */
-	{
-	DoCleanup();
-
-	iNotifyChange.ResetAndDestroy();
-	iNotifyDiskSpace.ResetAndDestroy();
-	iNotifyDismount.ResetAndDestroy();
-	iStartupInitComplete.ResetAndDestroy();
-	}
-
-void CT_FsData::DoCleanup()
-/**
- * Contains cleanup implementation
- */
-	{
-	//Deleting RFs.
-	if(iFs != NULL)
-		{
-		INFO_PRINTF1(_L("Deleting current RFs"));
-		delete iFs;
-		iFs = NULL;
-		}
-	}
-
-TAny* CT_FsData::GetObject()
-/**
- * Return a pointer to the object that the data wraps
- *
- * @return pointer to the object that the data wraps
- */
-	{
-	return iFs;
-	}
-
-TUint64 CT_FsData::ThreadId()
-	{
-	RThread currentThread;
-	return currentThread.Id().Id();
-	}
-
-TBool CT_FsData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
-/**
- * Process a command read from the ini file
- *
- * @param aCommand	the command to process
- * @param aSection		the entry in the ini file requiring the command to be processed
- *
- * @return ETrue if the command is processed
- */
-	{
-	TBool retVal = ETrue;
-	if (aCommand == KCmdNew)
-		{
-		DoCmdNewL();
-		}
-	else if (aCommand == KCmdClose)
-		{
-		DoCmdClose();
-		}
-	else if (aCommand == KCmdDestructor)
-		{
-		DoCmdDestructor();
-		}
-	else if (aCommand == KCmdConnect)
-		{
-		DoCmdConnect(aSection);
-		}
-	else if (aCommand == KCmdVersion)
-		{
-		DoCmdVersion(aSection);
-		}
-	else if (aCommand == KCmdNotifyChange)
-		{
-		DoCmdNotifyChangeL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdNotifyChangeCancel)
-		{
-		DoCmdNotifyChangeCancel(aSection);
-		}
-	else if (aCommand == KCmdNotifyDiskSpace)
-		{
-		DoCmdNotifyDiskSpaceL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdNotifyDiskSpaceCancel)
-		{
-		DoCmdNotifyDiskSpaceCancel(aSection);
-		}
-	else if (aCommand == KCmdIsRomAddress)
-		{
-		DoCmdIsRomAddress(aSection);
-		}
-	else if (aCommand == KCmdResourceCountMarkStart)
-		{
-		DoCmdResourceCountMarkStart();
-		}
-	else if (aCommand == KCmdResourceCountMarkEnd)
-		{
-		DoCmdResourceCountMarkEnd();
-		}
-	else if (aCommand == KCmdResourceCount)
-		{
-		DoCmdResourceCount(aSection);
-		}
-	else if (aCommand == KCmdGetNotifyUser)
-		{
-		DoCmdGetNotifyUser(aSection);
-		}
-	else if (aCommand == KCmdSetNotifyUser)
-		{
-		DoCmdSetNotifyUser(aSection);
-		}
-	else if (aCommand == KCmdLoaderHeapFunction)
-		{
-		DoCmdLoaderHeapFunctionL(aSection);
-		}
-	else if (aCommand == KCmdSetNotifyChange)
-		{
-		DoCmdSetNotifyChange(aSection);
-		}
-	else if (aCommand == KCmdInitialisePropertiesFile)
-		{
-		DoCmdInitialisePropertiesFile(aSection);
-		}
-	else
-		{
-		if (!DoCommandDrivesL(aCommand, aSection, aAsyncErrorIndex))
-			{
-			if (!DoCommandMountsL(aCommand, aSection, aAsyncErrorIndex))
-				{
-				if (!DoCommandFilesL(aCommand, aSection, aAsyncErrorIndex))
-					{
-					retVal = EFalse;
-					}
-				}
-			}
-		}
-	return retVal;
-	}
-
-
-void CT_FsData::DoCmdNewL()
-/** Creates new RFs class instance */
-	{
-	INFO_PRINTF1(_L("Create new RFs class instance"));
-	
-	//Deletes previous RFs class instance if it was already created.
-	DoCleanup();
-
-	// do create
-	TRAPD(err, iFs = new (ELeave) RFs());
-	if ( err!=KErrNone )
-		{
-		ERR_PRINTF2(_L("new error %d"), err);
-		SetError( err );
-		}
-	}
-
-void CT_FsData::DoCmdClose()
-/** Close RFs handle */
-	{
-	INFO_PRINTF1(_L("Closing RFs"));
-	iFs->Close();
-	}
-
-
-void CT_FsData::DoCmdDestructor()
-/** Destroy RFs the object */
-	{
-	INFO_PRINTF1(_L("Destroying the RFs object"));
-	DoCleanup();
-	}
-
-void CT_FsData::DoCmdConnect(const TDesC& aSection)
-/** Connects a client to the file server */
-	{
-
-	TInt	messageSlots = KFileServerDefaultMessageSlots;
-	GetIntFromConfig(aSection, KMessageSlots, messageSlots);
-
-	TInt err = iFs->Connect(messageSlots);
-	INFO_PRINTF2(_L("Call Connect(messageSlots = %d)"), messageSlots);
-
-	if ( err!=KErrNone )
-		{
-		ERR_PRINTF2(_L("Connect() error %d"), err);
-		SetError( err );
-		}
-	}
-
-void CT_FsData::DoCmdVersion(const TDesC& aSection)
-/** Gets the client side version number */
-	{
-	
-	TVersion		version=iFs->Version();
-	TVersionName	versionName	= version.Name();
-	INFO_PRINTF2(_L("Version name  : %S"), &versionName);
-	INFO_PRINTF2(_L("Version build : %d"), (TInt)version.iBuild);
-	INFO_PRINTF2(_L("Version major : %d"), (TInt)version.iMajor);
-	INFO_PRINTF2(_L("Version minor : %d"), (TInt)version.iMinor);
-
-	TPtrC	name;
-	if ( GET_OPTIONAL_STRING_PARAMETER(KVersionName, aSection, name))
-		{
-		if ( name != version.Name() )
-			{
-			ERR_PRINTF3(_L("Name does not match expected name: %S, %S"), &name, &versionName);
-			SetBlockResult(EFail);
-			}
-		}
-
-	TInt	intTemp;
-	if ( GET_OPTIONAL_INT_PARAMETER(KVersionBuild, aSection, intTemp) )
-		{
-		if ( intTemp != version.iBuild )
-			{
-			ERR_PRINTF1(_L("Build does not match expected build"));
-			SetBlockResult(EFail);
-			}
-		}
-
-	if ( GET_OPTIONAL_INT_PARAMETER(KVersionMajor, aSection, intTemp) )
-		{
-		if ( intTemp != version.iMajor )
-			{
-			ERR_PRINTF1(_L("Major does not match expected major"));
-			SetBlockResult(EFail);
-			}
-		}
-
-	if ( GET_OPTIONAL_INT_PARAMETER(KVersionMinor, aSection, intTemp) )
-		{
-		if ( intTemp != version.iMinor )
-			{
-			ERR_PRINTF1(_L("Minor does not match expected minor"));
-			SetBlockResult(EFail);
-			}
-		}
-
-	if (version.Name() == _L("") && version.iBuild == 0 && version.iMajor == 0 && version.iMinor == 0)
-		{
-		ERR_PRINTF1(_L("Some version fields are not set!"));
-		SetBlockResult(EFail);
-		}
-	}
-
-void CT_FsData::DoCmdNotifyChangeL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-/** Requests a notification of change to files or directories */
-	{
-	TNotifyType	type = ENotifyAll;
-	TPtrC		typeTemp;
-	TBool		dataOk = ETrue;
-
-	if ( GET_MANDATORY_STRING_PARAMETER(KType, aSection, typeTemp) )
-		{
-		if(!ConvertToNotifyType(typeTemp, type))
-			{
-			TInt	typeNumber;
-			if(GetIntFromConfig(aSection, KType(), typeNumber))
-				{
-				type = (TNotifyType)typeNumber;
-				}
-			else
-				{
-				ERR_PRINTF3(_L("NotifyChange() incorrect parameter %S in %S"), &typeTemp, &KType());
-				SetBlockResult(EFail);
-				dataOk = EFalse;
-				}
-			}
-		}
-	else
-		{
-		dataOk = EFalse;
-		}
-
-	TInt	count=1;
-	GET_OPTIONAL_INT_PARAMETER(KCount, aSection, count);
-
-	if(dataOk)
-		{
-		CT_ActiveNotifyChange*	active = CT_ActiveNotifyChange::NewLC(count, aAsyncErrorIndex, *this);
-		iNotifyChange.AppendL(active);
-		CleanupStack::Pop(active);
-
-		TPtrC	path;
-		if ( GetStringFromConfig(aSection, KPath(), path) )
-			{
-			iFs->NotifyChange(type, active->iStatus, path);
-			INFO_PRINTF1(_L("NotifyChange(TNotifyType, TRequestStatus, const TDesC)"));
-			}
-		else
-			{
-			iFs->NotifyChange(type, active->iStatus);
-			INFO_PRINTF1(_L("NotifyChange(TNotifyType TRequestStatus)"));
-			}
-			
-		active->Activate();
-		IncOutstanding();
-		}
-	}
-
-
-void CT_FsData::DoCmdNotifyChangeCancel(const TDesC& aSection)
-/** Cancels outstanding request(s) for notification of change to files or directories */
-	{
-	TBool	all = ETrue;
-
-	if ( GET_MANDATORY_BOOL_PARAMETER(KAll, aSection, all) )
-		{
-		if(all)
-			{
-			// Cancels all outstanding requests.
-			iFs->NotifyChangeCancel();
-			INFO_PRINTF1(_L("NotifyChangeCancel()"));
-			}
-		else
-			{
-			// Cancels a specific outstanding request
-			TInt	index=0;
-			GetIntFromConfig(aSection, KIndex(), index);
-
-			iFs->NotifyChangeCancel(iNotifyChange[index]->iStatus);
-			INFO_PRINTF1(_L("NotifyChangeCancel(TRequestStatus)"));
-			}
-		}
-	}
-
-void CT_FsData::DoCmdNotifyDiskSpaceL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-/** Requests notification when the free disk space on the specified drive crosses the specified threshold value */
-	{
-	//Get drive number from config
-	TDriveNumber	drive = EDriveA;
-	TBool 			dataOk = ETrue;
-	if (!GetDriveNumberFromConfig(aSection, KDrive, drive))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	TBool	useFreeSpace = EFalse;
-	GET_OPTIONAL_BOOL_PARAMETER(KUseFreeSpace, aSection, useFreeSpace);
-
-	TInt64 threshold = 0;
-	//Defining treshold by free space
-	if(useFreeSpace)
-		{
-		threshold = iVolumeInfo.iFree;
-		//For Calculation free-temp(_sub), free+temp(_add)
-		TInt temp;
-		if(GetIntFromConfig(aSection, KAdd, temp))
-			{
-			threshold += temp;
-			temp = 0;
-			}
-		if(GetIntFromConfig(aSection, KSub, temp))
-			{
-			threshold -= temp;
-			temp = 0;
-			}
-		}
-	//Defining treshold by some value
-	else
-		{
-		TPtrC thold;
-		if(GET_MANDATORY_STRING_PARAMETER(KThreshold, aSection, thold))
-			{
-			TLex lex(thold);
-			TInt err = lex.Val(threshold);
-			if(err)
-				{
-				ERR_PRINTF1(_L("NotifyDiskSpace() bad treshold value"));
-				SetBlockResult(EFail);
-				dataOk = EFalse;
-				}
-			}
-		}
-
-	if(dataOk)
-		{
-		CActiveCallback*	active = CActiveCallback::NewLC(*this);
-		iNotifyDiskSpace.AppendL(active);
-		CleanupStack::Pop(active);
-
-		iFs->NotifyDiskSpace(threshold, drive, active->iStatus);
-		INFO_PRINTF1(_L("NotifyDiskSpace()"));
-		active->Activate(aAsyncErrorIndex);
-		IncOutstanding();
-		}
-	}
-
-
-void CT_FsData::DoCmdNotifyDiskSpaceCancel(const TDesC& aSection)
-/** Cancels a specific outstanding request for free disk space notification */
-	{
-
-	TBool all = ETrue;
-
-	if(GET_MANDATORY_BOOL_PARAMETER(KAll, aSection, all))
-		{
-		if (all)
-			{
-			//Cancels all outstanding requests.
-			iFs->NotifyDiskSpaceCancel();
-			INFO_PRINTF1(_L("NotifyDiskSpaceCancel()"));
-			}
-		else
-			{
-			// Cancels a specific outstanding request
-			TInt	index=0;
-			GetIntFromConfig(aSection, KIndex, index);
-
-			iFs->NotifyDiskSpaceCancel(iNotifyDiskSpace[index]->iStatus);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdIsRomAddress(const TDesC& aSection)
-/** Tests whether the specified address is in ROM */
-	{
-	//reading address
-	TUint8* address = NULL;
-	TInt intAddress;
-	TBool dataOk = ETrue;
-	
-	if(GetHexFromConfig(aSection, KAddress, intAddress))
-		{
-		address = (TUint8*)intAddress;
-		}
-	else if(iIsFileInRom)
-		{
-		address = iIsFileInRom;
-		}
-	else
-		{
-		ERR_PRINTF1(_L("Address not specified"));
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-	if(dataOk)
-		{
-		INFO_PRINTF2(_L("Address %X"), address);
-		//Address of file in ROM
-		TBool	actual = RFs::IsRomAddress(address);
-		INFO_PRINTF2(_L("RFs::IsRomAddress() %d"), actual);
-			//Reading expected result
-		TBool	expected = EFalse;
-		if ( GET_OPTIONAL_BOOL_PARAMETER(KInRom, aSection, expected) )
-			{
-			if ( expected != actual )
-				{
-				ERR_PRINTF1(_L("Expected result does not match actual"));
-				SetBlockResult(EFail);
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdResourceCountMarkStart()
-/** Marks the start of resource count checking */
-	{
-	iFs->ResourceCountMarkStart();
-	INFO_PRINTF1(_L("ResourceCountMarkStart()"));
-	}
-
-void CT_FsData::DoCmdResourceCountMarkEnd()
-/** Ends resource count checking */
-	{
-	iFs->ResourceCountMarkEnd();
-	INFO_PRINTF1(_L("ResourceCountMarkEnd()"));
-	}
-
-void CT_FsData::DoCmdResourceCount(const TDesC& aSection)
-/** Gets the number of currently open resources */
-	{
-	TInt	resources = iFs->ResourceCount();//Number of resources currently opened
-	INFO_PRINTF2(_L("ResourceCount() = %d"), resources);
-
-	TInt expectedValue = 0; //Number of resources from config
-	if(GetIntFromConfig(aSection, KResources, expectedValue))
-		{
-		if (expectedValue != resources)
-			{
-			ERR_PRINTF3(_L("ResourceCount() %d != %d expected value"), resources, expectedValue);
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdGetNotifyUser(const TDesC& aSection)
-/** Tests whether user notification of file read or write failure is in effect */
-	{
-	TBool	actual = iFs->GetNotifyUser();
-	INFO_PRINTF2(_L("iFs->GetNotifyUser() %d"), actual);
-
-	TBool expected = EFalse;
-	if ( GET_OPTIONAL_BOOL_PARAMETER(KNotify, aSection, expected) )
-		{
-		if ( expected!=actual )
-			{
-			ERR_PRINTF1(_L("Expected result does not match actual"));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdSetNotifyUser(const TDesC& aSection)
-/** Sets whether the user should be notified of file read or write failure */
-	{
-	TBool notify = EFalse;
-
-	if(GET_MANDATORY_BOOL_PARAMETER(KNotify, aSection, notify))
-		{
-		iFs->SetNotifyUser(notify);
-		TPtrC val = notify ? _L("TRUE") : _L("FALSE");
-		INFO_PRINTF2(_L("SetNotifyUser() %S"), &val);
-		}
-
-
-	}
-
-void CT_FsData::DoCmdLoaderHeapFunctionL(const TDesC& aSection)
-/** returns KErrNotSupported*/
-	{
-	TPtrC	name;
-	TAny*	param1 = NULL;
-	if(GetStringFromConfig(aSection, KParam1(), name))
-		{
-			//param1 = iDataDictionary->GetObject(name);
-		}
-
-	TAny* param2 = NULL;
-	if(GetStringFromConfig(aSection, KParam2(), name))
-		{
-			//param2 = iDataDictionary->GetObjectL(name);
-		}
-
-	TInt	functionId = 0;
-	if(GET_MANDATORY_INT_PARAMETER(KFunctionId(), aSection, functionId))
-		{
-		TInt err = iFs->LoaderHeapFunction(functionId, param1, param2);
-		if( err!=KErrNone )
-			{
-			ERR_PRINTF2(_L("LoaderHeapFunction() ERROR: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdSetNotifyChange(const TDesC& aSection)
-/** Enables/Disables change notification on a per-session basis. */
-	{
-
-	TBool notify = EFalse;
-
-	if(GET_MANDATORY_BOOL_PARAMETER(KNotify, aSection, notify))
-		{
-		TInt err = iFs->SetNotifyChange(notify);
-
-		TPtrC val = notify ? _L("TRUE") : _L("FALSE");
-		if (err == KErrNone)
-			{
-			INFO_PRINTF2(_L("SetNotifyChange() %S"), &val);
-			}
-		else
-			{
-			ERR_PRINTF3(_L("SetNotifyChange() %S, Error: %d"), &val, err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdInitialisePropertiesFile(const TDesC& aSection)
-/** Sets the F32 properties file ONLY in ESTART */
-	{
-	TPtrC tempStr;
-	if(GET_MANDATORY_STRING_PARAMETER(KFile, aSection, tempStr))
-		{
-		TBuf8<KBufferStringLength>	buffer;
-		buffer.Copy(tempStr);
-		TPtrC8						iniFilePtr(buffer);
-		INFO_PRINTF2(_L("InitialisePropertiesFile() %S"), &tempStr);
-
-		TInt	err = iFs ->InitialisePropertiesFile(iniFilePtr);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("InitialisePropertiesFile() Error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::RunL(CActive* aActive, TInt aIndex)
-	{
-	INFO_PRINTF1(_L("CT_FsData::RunL Called"));
-	TBool	foundActiveObject = EFalse;
-	TInt	index=0;
-	TInt	count=0;
-	TBool	completed=ETrue;
-
-	// See if it is in iNotifyChange
-	count=iNotifyChange.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iNotifyChange[index] )
-			{
-			INFO_PRINTF1(_L("RunL iNotifyChange called"));
-			foundActiveObject = ETrue;
-			if ( iNotifyChange[index]->DecCount()>0 )
-				{
-				completed=EFalse;
-				iNotifyChange[index]->Activate();
-				}
-			else
-				{
-				iNotifyChange.Remove(index);
-				}
-	 		}
-		}
-
-	// See if it is in iNotifyDiskSpace
-	count=iNotifyDiskSpace.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iNotifyDiskSpace[index] )
-			{
-			INFO_PRINTF1(_L("RunL iNotifyDiskSpace called"));
-			foundActiveObject = ETrue;
-			iNotifyDiskSpace.Remove(index);
-	 		}
-		}
-
-	// See if it is in iNotifyDismount
-	count=iNotifyDismount.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iNotifyDismount[index] )
-			{
-			INFO_PRINTF1(_L("RunL iNotifyDismount called"));
-			foundActiveObject = ETrue;
-			iNotifyDismount.Remove(index);
-	 		}
-		}
-
-	// See if it is in iStartupInitComplete
-	count=iStartupInitComplete.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iStartupInitComplete[index] )
-			{
-			INFO_PRINTF1(_L("RunL iStartupInitComplete called"));
-			foundActiveObject = ETrue;
-			iStartupInitComplete.Remove(index);
-	 		}
-		}
-
- 	if( foundActiveObject )
- 		{
-		TInt	err = aActive->iStatus.Int();
-		if( err != KErrNone )
-			{
-			ERR_PRINTF2(_L("RunL Error %d"), err);
-			SetAsyncError( aIndex, err );
-			}
-
-		if ( completed )
-			{
-			// Reset the outstanding request state
-			delete aActive;
-			DecOutstanding();
-			}
-		}
-	else
-		{
- 		ERR_PRINTF1(_L("Stray RunL signal"));
- 		SetBlockResult(EFail);
-		}
-	}
-
-void CT_FsData::DoCancel(CActive* aActive, TInt aIndex)
-	{
-	TBool	foundActiveObject = EFalse;
-
-	TInt	index=0;
-	TInt	count=0;
-
-	// See if it is in iNotifyChange
-	count=iNotifyChange.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iNotifyChange[index] )
-			{
-			INFO_PRINTF1(_L("DoCancel iNotifyChange called"));
-			foundActiveObject = ETrue;
-			iNotifyChange.Remove(index);
-	 		}
-		}
-
-	// See if it is in iNotifyDiskSpace
-	count=iNotifyDiskSpace.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iNotifyDiskSpace[index] )
-			{
-			INFO_PRINTF1(_L("DoCancel iNotifyDiskSpace called"));
-			foundActiveObject = ETrue;
-			iNotifyDiskSpace.Remove(index);
-	 		}
-		}
-
-	// See if it is in iNotifyDismount
-	count=iNotifyDismount.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iNotifyDismount[index] )
-			{
-			INFO_PRINTF1(_L("DoCancel iNotifyDismount called"));
-			foundActiveObject = ETrue;
-			iNotifyDismount.Remove(index);
-	 		}
-		}
-
-	// See if it is in iStartupInitComplete
-	count=iStartupInitComplete.Count();
-	for( index=0; (index<count) && (!foundActiveObject); ++index )
- 		{
- 		if( aActive == iStartupInitComplete[index] )
-			{
-			INFO_PRINTF1(_L("DoCancel iStartupInitComplete called"));
-			foundActiveObject = ETrue;
-			iStartupInitComplete.Remove(index);
-	 		}
-		}
-
- 	if( foundActiveObject )
- 		{
-		TInt	err = aActive->iStatus.Int();
-		if( err != KErrNone )
-			{
-			ERR_PRINTF2(_L("DoCancel Error %d"), err);
-			SetAsyncError( aIndex, err );
-			}
-
-		// Reset the outstanding request state
-		DecOutstanding();
-
-		delete aActive;
-		}
-	else
-		{
- 		ERR_PRINTF1(_L("Stray DoCancel signal"));
- 		SetBlockResult(EFail);
-		}
-	}
-TBool CT_FsData::ConvertToNotifyType(const TDesC& aNotifyTypeStr, TNotifyType& aNotifyType)
-{
-	TBool ret = ETrue;
-	if(aNotifyTypeStr == _L("ENotifyAll"))
-		{
-		aNotifyType = ENotifyAll;
-		}
-	else if(aNotifyTypeStr == _L("ENotifyEntry"))
-		{
-		aNotifyType = ENotifyEntry;
-		}
-	else if(aNotifyTypeStr == _L("ENotifyFile"))
-		{
-		aNotifyType = ENotifyFile;
-		}
-	else if(aNotifyTypeStr == _L("ENotifyDir"))
-		{
-		aNotifyType = ENotifyDir;
-		}
-	else if(aNotifyTypeStr == _L("ENotifyAttributes"))
-		{
-		aNotifyType = ENotifyAttributes;
-		}
-	else if(aNotifyTypeStr == _L("ENotifyWrite"))
-		{
-		aNotifyType = ENotifyWrite;
-		}
-	else if(aNotifyTypeStr == _L("ENotifyDisk"))
-		{
-		aNotifyType = ENotifyDisk;
-		}
-	//For COnverting data ENotifyFile|ENotifyDir
-	else
-		{
-		TInt	location=aNotifyTypeStr.Match(_L("*|*"));
-		if( location!=KErrNotFound )
-			{
-			//Converting Left part of the data
-			TPtrC		tempStr=aNotifyTypeStr.Left(location);
-			ret=ConvertToNotifyType(tempStr, aNotifyType);
-
-			//Converting right data can be with another "|"
-			tempStr.Set(aNotifyTypeStr.Mid(location+1));
-
-			TNotifyType	notifyTypeTmp;
-			if ( ConvertToNotifyType(tempStr, notifyTypeTmp) )
-				{
-				aNotifyType =(TNotifyType)((TInt)aNotifyType|(TInt)notifyTypeTmp);
-				}
-			else
-				{
-				ret = EFalse;
-				}
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		}
-
-	return ret;
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FsDataDrives.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1525 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FsData
-*/
-
-//	User includes
-#include "T_FsData.h"
-#include "T_VolumeInfoData.h"
-#include "FileserverUtil.h"
-
-/*@{*/
-///Constants
-
-_LIT(KPromptProcess,				"t_prompt.exe");
-
-
-/// Enumerations
-_LIT(KMediaNotPresent,				"EMediaNotPresent");
-_LIT(KMediaUnknown,					"EMediaUnknown");
-_LIT(KMediaFloppy,					"EMediaFloppy");
-_LIT(KMediaHardDisk,				"EMediaHardDisk");
-_LIT(KMediaCdRom,					"EMediaCdRom");
-_LIT(KMediaRam,						"EMediaRam");
-_LIT(KMediaFlash,					"EMediaFlash");
-_LIT(KMediaRom,						"EMediaRom");
-_LIT(KMediaRemote,					"EMediaRemote");
-_LIT(KMediaNANDFlash,				"EMediaNANDFlash");
-
-_LIT(KBatNotSupported,				"EBatNotSupported");
-_LIT(KBatLow,						"EBatLow");
-_LIT(KBatGood,						"EBatGood");
-
-_LIT(KDriveAttLocalStr,				"KDriveAttLocal");
-_LIT(KDriveAttRomStr,				"KDriveAttRom");
-_LIT(KDriveAttRedirectedStr,		"KDriveAttRedirected");
-_LIT(KDriveAttSubstedStr,			"KDriveAttSubsted");
-_LIT(KDriveAttInternalStr,			"KDriveAttInternal");
-_LIT(KDriveAttRemovableStr,			"KDriveAttRemovable");
-
-_LIT(KMediaAttVariableSizeStr,		"KMediaAttVariableSize");
-_LIT(KMediaAttDualDensityStr,		"KMediaAttDualDensity");
-_LIT(KMediaAttFormattableStr,		"KMediaAttFormattable");
-_LIT(KMediaAttWriteProtectedStr,	"KMediaAttWriteProtected");
-_LIT(KMediaAttLockableStr,			"KMediaAttLockable");
-_LIT(KMediaAttLockedStr,			"KMediaAttLocked");
-
-
-///	Parameters
-_LIT(KStore,						"store");
-_LIT(KMediaType,					"media_type");
-_LIT(KDriveAtt,						"drive_att");
-_LIT(KMediaAtt,						"media_att");
-_LIT(KDriveIndex,					"drive_index");
-_LIT(KDriveChar,					"drive_char");
-_LIT(KArraySize,					"array_size");
-_LIT(KArrayIndex,					"array_index_");
-_LIT(KVolumeLabel,					"volume_label");
-_LIT(KSubstPath,					"subst_path");
-_LIT(KDriveName,					"drive_name");
-_LIT(KDriveOldPassword,				"drive_old_password");
-_LIT(KDriveNewPassword,				"drive_new_password");
-_LIT(KBytesToReserve,				"bytes_to_reserve");
-_LIT(KDriveIsValid,					"drive_is_valid");
-_LIT(KDrivePath,					"drive_path");
-_LIT(KDrive,						"drive");
-_LIT(KBatteryState,					"battery_state");
-_LIT(KSaveInInstance,				"save_in_instance");
-_LIT(KVolumeObject,					"store_volume");
-
-
-///	Commands
-_LIT(KCmdDriveList,					"DriveList");
-_LIT(KCmdDrive,						"Drive");
-_LIT(KCmdVolume,					"Volume");
-_LIT(KCmdSetVolumeLabel,			"SetVolumeLabel");
-_LIT(KCmdSubst,						"Subst");
-_LIT(KCmdSetSubst,					"SetSubst");
-_LIT(KCmdGetMediaSerialNumber,		"GetMediaSerialNumber");
-_LIT(KCmdIsValidDrive,				"IsValidDrive");
-_LIT(KCmdCharToDrive,				"CharToDrive");
-_LIT(KCmdDriveToChar,				"DriveToChar");
-_LIT(KCmdCheckDisk,					"CheckDisk");
-_LIT(KCmdScanDrive,					"ScanDrive");
-_LIT(KCmdGetDriveName,				"GetDriveName");
-_LIT(KCmdSetDriveName,				"SetDriveName");
-_LIT(KCmdLockDrive,					"LockDrive");
-_LIT(KCmdUnlockDrive,				"UnlockDrive");
-_LIT(KCmdClearPassword,				"ClearPassword");
-_LIT(KCmdErasePassword,				"ErasePassword");
-_LIT(KCmdReserveDriveSpace,			"ReserveDriveSpace");
-_LIT(KCmdGetReserveAccess,			"GetReserveAccess");
-_LIT(KCmdReleaseReserveAccess,		"ReleaseReserveAccess");
-_LIT(KCmdPrompt,					"prompt");
-_LIT(KCmdGetSystemDrive,			"GetSystemDrive");
-_LIT(KCmdSetSystemDrive,			"SetSystemDrive");
-_LIT(KCmdGetSystemDriveChar,		"GetSystemDriveChar");
-_LIT(KCmdVolumeIOParam,				"VolumeIOParam");
-
-/*@}*/
-
-/**
-* Process a drives related command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-TBool CT_FsData::DoCommandDrivesL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
-	{
-	TBool retVal = ETrue;
-	//Parsing the aCommand to choose which function has to be executed.
-
-	if (aCommand == KCmdDriveList)
-		{
-		DoCmdDriveList(aSection);
-		}
-	else if (aCommand  == KCmdDrive)
-		{
-		DoCmdDriveL(aSection);
-		}
-	else if (aCommand == KCmdVolume)
-		{
-		DoCmdVolumeL(aSection);
-		}
-	else if (aCommand == KCmdSetVolumeLabel)
-		{
-		DoCmdSetVolumeLabel(aSection);
-		}
-	else if (aCommand == KCmdSubst)
-		{
-		DoCmdSubst(aSection);
-		}
-	else if (aCommand == KCmdSetSubst)
-		{
-		DoCmdSetSubst(aSection);
-		}
-	else if (aCommand == KCmdGetMediaSerialNumber)
-		{
-		DoCmdGetMediaSerialNumber(aSection);
-		}
-	else if (aCommand == KCmdIsValidDrive)
-		{
-		DoCmdIsValidDrive(aSection);
-		}
-	else if (aCommand == KCmdCharToDrive)
-		{
-		DoCmdCharToDrive(aSection);
-		}
-	else if (aCommand == KCmdDriveToChar)
-		{
-		DoCmdDriveToChar(aSection);
-		}
-	else if (aCommand == KCmdCheckDisk)
-		{
-		DoCmdCheckDisk(aSection);
-		}
-	else if (aCommand == KCmdScanDrive)
-		{
-		DoCmdScanDrive(aSection);
-		}
-	else if (aCommand == KCmdGetDriveName)
-		{
-		DoCmdGetDriveName(aSection);
-		}
-	else if (aCommand == KCmdSetDriveName)
-		{
-		DoCmdSetDriveName(aSection);
-		}
-	else if (aCommand == KCmdLockDrive)
-		{
-		DoCmdLockDrive(aSection);
-		}
-	else if (aCommand == KCmdUnlockDrive)
-		{
-		DoCmdUnlockDrive(aSection);
-		}
-	else if (aCommand == KCmdClearPassword)
-		{
-		DoCmdClearPassword(aSection);
-		}
-	else if (aCommand == KCmdErasePassword)
-		{
-		DoCmdErasePassword(aSection);
-		}
-	else if (aCommand == KCmdReserveDriveSpace)
-		{
-		DoCmdReserveDriveSpace(aSection);
-		}
-	else if (aCommand == KCmdGetReserveAccess)
-		{
-		DoCmdGetReserveAccess(aSection);
-		}
-	else if (aCommand == KCmdReleaseReserveAccess)
-		{
-		DoCmdReleaseReserveAccess(aSection);
-		}
-	else if (aCommand == KCmdPrompt)
-		{
-		DoCmdPromptL(aSection);
-		}
-	else if (aCommand == KCmdGetSystemDrive)
-		{
-		DoCmdGetSystemDrive(aSection);
-		}
-	else if (aCommand == KCmdGetSystemDriveChar)
-		{
-		DoCmdGetSystemDriveChar(aSection);
-		}
-	else if (aCommand == KCmdSetSystemDrive)
-		{
-		DoCmdSetSystemDrive(aSection);
-		}
-	else if (aCommand == KCmdVolumeIOParam)
-		{
-		DoCmdVolumeIOParam(aSection);
-		}
-	else
-		{
-		retVal = EFalse;
-		}
-
-	return retVal;
-	}
-
-
-TBool CT_FsData::GetMediaTypeFromConfig(const TDesC& aSection, TMediaType& aMediaType)
-	{
-	// Read media type from INI file
-	TPtrC mediaTypeStr;
-	TBool ret = GET_OPTIONAL_STRING_PARAMETER(KMediaType(), aSection, mediaTypeStr);
-
-	if (ret)
-		{
-		if (mediaTypeStr == KMediaNotPresent)
-			{
-			aMediaType = EMediaNotPresent;
-			}
-		else if (mediaTypeStr == KMediaUnknown)
-			{
-			aMediaType = EMediaUnknown;
-			}
-		else if (mediaTypeStr == KMediaFloppy)
-			{
-			aMediaType = EMediaFloppy;
-			}
-		else if (mediaTypeStr == KMediaHardDisk)
-			{
-			aMediaType = EMediaHardDisk;
-			}
-		else if (mediaTypeStr == KMediaCdRom)
-			{
-			aMediaType = EMediaCdRom;
-			}
-		else if (mediaTypeStr == KMediaRam)
-			{
-			aMediaType = EMediaRam;
-			}
-		else if (mediaTypeStr == KMediaFlash)
-			{
-			aMediaType = EMediaFlash;
-			}
-		else if (mediaTypeStr == KMediaRom)
-			{
-			aMediaType = EMediaRom;
-			}
-		else if (mediaTypeStr == KMediaRemote)
-			{
-			aMediaType = EMediaRemote;
-			}
-		else if (mediaTypeStr == KMediaNANDFlash)
-			{
-			aMediaType = EMediaNANDFlash;
-			}
-		else
-			{
-			TInt mediaType = 0;
-			ret = GET_MANDATORY_INT_PARAMETER(KMediaType, aSection, mediaType);
-			if (ret)
-				{
-				aMediaType = (TMediaType) mediaType;
-				}
-			}
-		}
-	return ret;
-	}
-
-TBool CT_FsData::ConvertToDriveAtts(const TDesC& aDriveAttStr, TUint& aDriveAtt)
-	{
-	TBool	ret = ETrue;
-	if ( aDriveAttStr==KDriveAttLocalStr )
-		{
-		aDriveAtt=KDriveAttLocal;
-		}
-	else if ( aDriveAttStr==KDriveAttRomStr )
-		{
-		aDriveAtt=KDriveAttRom;
-		}
-	else if ( aDriveAttStr==KDriveAttRedirectedStr )
-		{
-		aDriveAtt=KDriveAttRedirected;
-		}
-	else if ( aDriveAttStr==KDriveAttSubstedStr )
-		{
-		aDriveAtt=KDriveAttSubsted;
-		}
-	else if ( aDriveAttStr==KDriveAttInternalStr )
-		{
-		aDriveAtt=KDriveAttInternal;
-		}
-	else if ( aDriveAttStr==KDriveAttRemovableStr )
-		{
-		aDriveAtt=KDriveAttRemovable;
-		}
-	else
-		{
-		TInt	location = aDriveAttStr.Match(_L("*|*"));
-		if( location!=KErrNotFound )
-			{
-			//Converting Left part of the data
-			TPtrC	tempStr = aDriveAttStr.Left(location);
-			ret=ConvertToDriveAtts(tempStr, aDriveAtt);
-
-			//Converting right data can be with another "|"
-			tempStr.Set(aDriveAttStr.Mid(location+1));
-
-			TUint	driveAttTmp;
-			if ( ConvertToDriveAtts(tempStr, driveAttTmp) )
-				{
-				aDriveAtt=aDriveAtt|driveAttTmp;
-				}
-			else
-				{
-				ret=EFalse;
-				}
-			}
-		else
-			{
-			ret=EFalse;
-			}
-		}
-
-	return ret;
-	}
-
-void CT_FsData::DoCmdPromptL(const TDesC& /*aSection*/)
-	{
-	RProcess promptProcess;
-	TInt err = promptProcess.Create(KPromptProcess, KNullDesC);
-	
-	if (err == KErrNone)
-		{
-		CleanupClosePushL(promptProcess);
-		TRequestStatus promptStatus;
-		promptProcess.Rendezvous(promptStatus);
-
-		if (promptStatus == KRequestPending)
-			{
-			promptProcess.Resume();
-			User::WaitForRequest(promptStatus);
-			if (err != KErrNone)
-				{
-				ERR_PRINTF2(_L("Prompt process finished with error %d"), promptStatus.Int());
-				SetBlockResult(EFail);
-				}
-			}
-		else
-			{
-			promptProcess.RendezvousCancel(promptStatus);
-			promptProcess.Kill(0);
-			ERR_PRINTF2(_L("Executing of prompt process failed with error %d"), promptStatus.Int());
-			SetBlockResult(EFail);
-			}
-
-		CleanupStack::PopAndDestroy();
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Failed to create prompt process with error %d"), err);
-		SetBlockResult(EFail);
-		}
-	}
-	
-TBool CT_FsData::GetDriveAttsFromConfig(const TDesC& aSection, TUint& aDriveAtt)
-	{
-	aDriveAtt = 0;
-
-	TPtrC	driveAttStr;
-	TBool ret = GET_OPTIONAL_STRING_PARAMETER(KDriveAtt(), aSection, driveAttStr);
-	if ( ret )
-		{
-		if ( !ConvertToDriveAtts(driveAttStr, aDriveAtt) )
-			{
-			TInt	intTemp;
-			ret=GET_MANDATORY_INT_PARAMETER(KDriveAtt(), aSection, intTemp);
-			if ( ret )
-				{
-				aDriveAtt=intTemp;
-				}
-			}
-		}
-
-	return ret;
-	}
-
-TBool CT_FsData::GetBatteryStateFromConfig(const TDesC& aSection, TBatteryState& aBatteryState)
-	{
-	// Read media type from INI file
-	aBatteryState = EBatLow;
-
-	TPtrC batteryStateStr;
-	TBool ret = GET_OPTIONAL_STRING_PARAMETER(KBatteryState(), aSection, batteryStateStr);
-
-	if (ret)
-		{
-		if (batteryStateStr == KBatNotSupported)
-			{
-			aBatteryState = EBatNotSupported;
-			}
-		else if (batteryStateStr == KBatGood)
-			{
-			aBatteryState = EBatGood;
-			}
-
-		if (batteryStateStr == KBatLow)
-			{
-			aBatteryState = EBatLow;
-			}
-		else
-			{
-			aBatteryState = EBatNotSupported;
-			}
-		}
-
-	return ret;
-	}
-
-TBool CT_FsData::ConvertToMediaAtts(const TDesC& aMediaAttStr, TUint& aMediaAtt)
-	{
-	TBool	ret = ETrue;
-	if ( aMediaAttStr==KMediaAttVariableSizeStr )
-		{
-		aMediaAtt=KMediaAttVariableSize;
-		}
-	else if ( aMediaAttStr==KMediaAttDualDensityStr )
-		{
-		aMediaAtt=KMediaAttDualDensity;
-		}
-	else if ( aMediaAttStr==KMediaAttFormattableStr )
-		{
-		aMediaAtt=KMediaAttFormattable;
-		}
-	else if ( aMediaAttStr==KMediaAttWriteProtectedStr )
-		{
-		aMediaAtt=KMediaAttWriteProtected;
-		}
-	else if ( aMediaAttStr==KMediaAttLockableStr )
-		{
-		aMediaAtt=KMediaAttLockable;
-		}
-	else if ( aMediaAttStr==KMediaAttLockedStr )
-		{
-		aMediaAtt=KMediaAttLocked;
-		}
-	else
-		{
-		TInt	location = aMediaAttStr.Match(_L("*|*"));
-		if( location!=KErrNotFound )
-			{
-			//Converting Left part of the data
-			TPtrC	tempStr = aMediaAttStr.Left(location);
-			ret=ConvertToMediaAtts(tempStr, aMediaAtt);
-
-			//Converting right data can be with another "|"
-			tempStr.Set(aMediaAttStr.Mid(location+1));
-
-			TUint	mediaAttTmp;
-			if ( ConvertToMediaAtts(tempStr, mediaAttTmp) )
-				{
-				aMediaAtt=aMediaAtt|mediaAttTmp;
-				}
-			else
-				{
-				ret=EFalse;
-				}
-			}
-		else
-			{
-			ret=EFalse;
-			}
-		}
-
-	return ret;
-	}
-
-TBool CT_FsData::GetMediaAttsFromConfig(const TDesC& aSection, TUint& aMediaAtt)
-	{
-	aMediaAtt = 0;
-
-	TPtrC	mediaAttStr;
-	TBool	ret = GET_OPTIONAL_STRING_PARAMETER(KMediaAtt(), aSection, mediaAttStr);
-	if (ret)
-		{
-		if ( !ConvertToMediaAtts(mediaAttStr, aMediaAtt) )
-			{
-			TInt	intTemp;
-	 		ret=GET_MANDATORY_INT_PARAMETER(KMediaAtt(), aSection, intTemp);
-			if ( ret )
-				{
-				aMediaAtt=intTemp;
-				}
-			}
-		}
-
-	return ret;
-	}
-
-void CT_FsData::DoCmdDriveList(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::DriveList()."));
-
-	//Get the list of drives which presents in system. There should be 26 slots where each non-zero slot means a drive in system.
-	TDriveList driveList;
-	TInt errorCode = iFs->DriveList(driveList);
-
-	//Check error code.
-	if (errorCode != KErrNone)
-		{
-		ERR_PRINTF2(_L("Function DriveList() failed with %d error code."), errorCode);
-		SetError(errorCode);
-		}
-	else
-		{
-		//Get data from config
-		//Get first drive index from config.
-		TInt arraySize = 0;
-		TLex lexer;
-		if (GET_MANDATORY_INT_PARAMETER(KArraySize(), aSection, arraySize))
-			{
-
-			TInt arrayIndex = 0;
-			for(TInt i = 0; i < arraySize; i++)
-				{
-				TBuf<KBufferStringLength>tmpBuff;
-
-				tmpBuff.Append(KArrayIndex);
-				tmpBuff.AppendNum(i+1);
-				if (GET_MANDATORY_INT_PARAMETER( tmpBuff, aSection, arrayIndex))
-					{
-
-					//Check that drive C and drive Z or others what realy present are in list. Also user can change the drives and check their presence.
-					if (driveList[arrayIndex] == 0)
-						{
-						ERR_PRINTF2(_L(" Disk no. %d not present."), arrayIndex);
-						SetBlockResult(EFail);
-						}
-					}
-				}
-
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdDriveL(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::Drive()."));
-
-	//Get drive index from config.
-	TDriveNumber	driveIndex;
-	TBool			nonDefault = GetDriveNumberFromConfig(aSection, KDrive(), driveIndex);
-
-	//Get info about drive.
-	TDriveInfo		driveInfo;
-	TInt			errorCode;
-	if(nonDefault)
-		{
-		errorCode = iFs->Drive(driveInfo, driveIndex);
-		}
-	else
-		{
-		errorCode = iFs->Drive(driveInfo);
-		}
-		
-	if(errorCode == KErrNone)
-		{
-		if ( !VerifyTDriveInfoDataFromIniL(aSection, driveInfo))
-			{
-			SetBlockResult(EFail);
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Function Drive() failed with %d error code"), errorCode);
-		SetError(errorCode);
-		}	
-	}
-	
-TBool CT_FsData::VerifyTDriveInfoDataFromIniL(const TDesC& aSection, TDriveInfo& aDriveInfo)
-	{
-	TBool ret = ETrue;
-	
-	INFO_PRINTF2(_L("TDriveInfo.iType    =%d"), aDriveInfo.iType);
-	INFO_PRINTF2(_L("TDriveInfo.iBattery =%d"), aDriveInfo.iBattery);
-	INFO_PRINTF2(_L("TDriveInfo.iDriveAtt=0x%X"), aDriveInfo.iDriveAtt);
-	TUint	driveAttMask[]=
-		{
-		KDriveAttLocal,
-		KDriveAttRom,
-		KDriveAttRedirected,
-		KDriveAttSubsted,
-		KDriveAttInternal,
-		KDriveAttRemovable,
-		};
-	TPtrC	driveAttText[]=
-		{
-		KDriveAttLocalStr(),
-		KDriveAttRomStr(),
-		KDriveAttRedirectedStr(),
-		KDriveAttSubstedStr(),
-		KDriveAttInternalStr(),
-		KDriveAttRemovableStr(),
-		};
-	TInt	size = sizeof(driveAttMask) / sizeof(driveAttMask[0]);
-	TInt	index;
-	for ( index=0; index<size; ++index )
-		{
-		if ( aDriveInfo.iDriveAtt&driveAttMask[index] )
-			{
-			INFO_PRINTF2(_L("DriveAtt %S ON"), &driveAttText[index]);
-			}
-		}
-	INFO_PRINTF2(_L("TDriveInfo.iMediaAtt=0x%X"), aDriveInfo.iMediaAtt);
-	TUint	mediaAttMask[]=
-		{
-		KMediaAttVariableSize,
-		KMediaAttDualDensity,
-		KMediaAttFormattable,
-		KMediaAttWriteProtected,
-		KMediaAttLockable,
-		KMediaAttLocked,
-		};
-	TPtrC	mediaAttText[]=
-		{
-		KMediaAttVariableSizeStr(),
-		KMediaAttDualDensityStr(),
-		KMediaAttFormattableStr(),
-		KMediaAttWriteProtectedStr(),
-		KMediaAttLockableStr(),
-		KMediaAttLockedStr(),
-		};
-
-	size = sizeof(mediaAttMask) / sizeof(mediaAttMask[0]);
-	for ( index=0; index<size; ++index )
-		{
-		if ( aDriveInfo.iMediaAtt&mediaAttMask[index] )
-			{
-			INFO_PRINTF2(_L("MediaAtt %S ON"), &mediaAttText[index]);
-			}
-		}
-
-	//Get drive type from config.
-	TMediaType	mediaType;
-	if (GetMediaTypeFromConfig(aSection, mediaType))
-		{
-		//Checking that type of drive is equal to passed through config file.
-		if (aDriveInfo.iType != mediaType)
-			{
-			ERR_PRINTF3(_L("Drive has wrong type. actual: %d, expected: %d"), aDriveInfo.iType, mediaType);
-			ret = EFalse;
-			}
-		}
-	
-	//Optional battery state checking
-	TBatteryState	batteryState;
-	if (GetBatteryStateFromConfig(aSection, batteryState))
-		{
-		//Checking that type of drive is equal to passed through config file.
-		if (aDriveInfo.iBattery != batteryState)
-			{
-			ERR_PRINTF3(_L("BatteryState is wrong. actual: %d, expected: %d"), aDriveInfo.iBattery, batteryState);
-			ret = EFalse;
-			}
-		}
-	
-	//Optional media attributes checking
-	TUint	mediaAtts;
-	if (GetMediaAttsFromConfig(aSection, mediaAtts))
-		{
-		//Checking that type of drive is equal to passed through config file.
-		if ( (aDriveInfo.iMediaAtt&mediaAtts)==mediaAtts )
-			{
-			ERR_PRINTF1(_L("Media attributes are wrong"));
-			ret = EFalse;
-			}
-		}
-
-	//Optional drive attributes checking.
-	TUint	driveAtts;
-	if (GetDriveAttsFromConfig(aSection, driveAtts))
-		{
-		//Checking that type of drive is equal to passed through config file.
-		if ( (aDriveInfo.iDriveAtt!=driveAtts)==driveAtts )
-			{
-			ERR_PRINTF1(_L("Drive attributes are wrong"));
-			ret = EFalse;
-			}
-		}
-	
-	return ret;
-	}
-
-void CT_FsData::DoCmdVolumeL(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs:: Volume()."));
-
-	//Get drive index from config.
-	TDriveNumber driveIndex;
-
-	TBool nonDefault = GetDriveNumberFromConfig(aSection, KDrive(), driveIndex);
-
-	//Get info about volume.
-	TInt	errorCode;
-
-	if(nonDefault)
-		{
-		errorCode = iFs->Volume(iVolumeInfo, driveIndex);
-		}
-	else
-		{
-		errorCode = iFs->Volume(iVolumeInfo);
-		}
-	//Check error code.
-	if (errorCode != KErrNone)
-		{
-		ERR_PRINTF2(_L("Function Volume() failed with %d error code"), errorCode);
-		SetError(errorCode);
-		}
-	else
-		{
-		if ( !FileserverUtil::VerifyTVolumeInfoDataFromIniL(*this, aSection, iVolumeInfo))
-			{
-			SetBlockResult(EFail);
-			}
-		
-		if ( !VerifyTDriveInfoDataFromIniL(aSection, iVolumeInfo.iDrive))
-			{
-			SetBlockResult(EFail);
-			}	
-		
-			
-		TBool	save;
-		if(GET_OPTIONAL_BOOL_PARAMETER(KSaveInInstance(), aSection, save))
-			{
-			if(save)
-				{
-				iVolumeLabel.Copy(iVolumeInfo.iName);
-				}
-			}
-	
-		TPtrC		volumeObjectName;
-		if (GET_OPTIONAL_STRING_PARAMETER(KVolumeObject, aSection, volumeObjectName))
-			{
-			CT_VolumeInfoData* volumeWrapperObject = NULL;
-			volumeWrapperObject = static_cast<CT_VolumeInfoData*>(GetDataWrapperL(volumeObjectName));
-			if(volumeWrapperObject)
-				{
-				TVolumeInfo* volumeObject = new(ELeave) TVolumeInfo();
-				*volumeObject = iVolumeInfo;
-				volumeWrapperObject->SetObjectL(volumeObject);
-				}
-			}
-		}
-
-	}
-
-
-void CT_FsData::DoCmdSetVolumeLabel(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs:: SetVolumeLabel()."));
-
-	//Get drive index from config.
-	TDriveNumber	driveIndex;
-	TBool			nonDefault = GetDriveNumberFromConfig(aSection, KDrive(), driveIndex);
-
-	//Get volume name from config.
-	TPtrC	volumeLabel;
-	if (!GET_OPTIONAL_STRING_PARAMETER(KVolumeLabel(), aSection, volumeLabel))
-		{
-		volumeLabel.Set(iVolumeLabel);
-		}
-
-	//Trying to set the volume label. By some reason it always retturn KErrNotSupported.
-	TInt	errorCode;
-	if(nonDefault)
-		{
-		errorCode = iFs->SetVolumeLabel(volumeLabel, driveIndex);
-		}
-	else
-		{
-		errorCode = iFs->SetVolumeLabel(volumeLabel);
-		}
-
-	//Check error code.
-	if (errorCode != KErrNone)
-		{
-		ERR_PRINTF2(_L("Function SetVolumeLabel() failed with %d error code"), errorCode);
-		SetError(errorCode);
-		}
-	}
-
-
-void CT_FsData::DoCmdSubst(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs:: Subst()."));
-
-	//Get drive index from config.
-	TDriveNumber driveIndex;
-
-
-	TBool	nonDefault = GetDriveNumberFromConfig(aSection, KDrive(), driveIndex);
-
-
-	TBuf16<KBufferStringLength> substPath;
-
-	//Get the path to substed drive.
-
-	TInt errorCode;
-	if(nonDefault)
-		{
-		errorCode = iFs->Subst(substPath, driveIndex);
-		}
-	else
-		{
-		errorCode = iFs->Subst(substPath);
-		}
-
-	//Check error code.
-	if (errorCode != KErrNone)
-		{
-		ERR_PRINTF2(_L("Function Subst() failed with %d error code"), errorCode);
-		SetError(errorCode);
-		}
-	else
-		{
-		//Get drive index from config.
-		TPtrC substPathFromConf;
-		if (GET_MANDATORY_STRING_PARAMETER(KSubstPath(), aSection, substPathFromConf))
-			{
-
-			//As long as it has to be in similar format we must convert substPathFromConf to TBuf16<255>
-
-			//Comparing paths.
-			if (substPathFromConf.CompareF(substPath) != 0)
-				{
-				ERR_PRINTF2(_L("Subst path is wrong %S"), &substPathFromConf);
-				SetBlockResult(EFail);
-				}
-			}
-		}
-
-
-	}
-
-
-void CT_FsData::DoCmdSetSubst(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs:: SetSubst()."));
-
-
-	//Get drive index from config.
-	TDriveNumber driveIndex;
-	TBool nonDefault = GetDriveNumberFromConfig(aSection, KDrive(), driveIndex);
-
-
-	//Get drive index from config.
-	TPtrC substPath;
-	if (GET_MANDATORY_STRING_PARAMETER(KSubstPath(), aSection, substPath))
-		{
-
-	//Substing the drive with index driveIndex to path substPath.
-		TInt errorCode;
-		if(nonDefault)
-			{
-			errorCode = iFs->SetSubst(substPath, driveIndex);
-			}
-		else
-			{
-			errorCode = iFs->SetSubst(substPath);
-			}
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function SetSubst() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-
-		}
-
-
-
-	}
-
-
-void CT_FsData::DoCmdGetMediaSerialNumber(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::GetMediaSerialNumber()."));
-
-	//Get drive index from config.
-	TDriveNumber driveIndex;
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-		{
-		//Get the media serial number.
-		TMediaSerialNumber	mediaSerialNumber;
-		TInt				errorCode = iFs->GetMediaSerialNumber(mediaSerialNumber, driveIndex);
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function GetMediaSerialNumber() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-
-	}
-
-
-void CT_FsData::DoCmdIsValidDrive(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::IsValidDirve()."));
-
-	//Get drive index from config.
-	TDriveNumber driveIndex;
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-		{
-		TBool	actualValid = RFs::IsValidDrive(driveIndex);
-		INFO_PRINTF2(_L("iFs->IsValidDrive = %d"), actualValid);
-
-		//Get drive validity flag rom config.
-		TBool	expectedValid;
-		if ( GET_OPTIONAL_BOOL_PARAMETER(KDriveIsValid(), aSection, expectedValid) )
-			{
-			if ( actualValid!=expectedValid )
-				{
-				ERR_PRINTF1(_L("Function IsValid() returned unexpected result"));
-				SetBlockResult(EFail);
-				}
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-
-void CT_FsData::DoCmdCharToDrive(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs:: CharToDrive()."));
-
-	//Get drive index from config.
-	//We meed integer there, because function uses TInt, not TDriveNumber.
-
-	TDriveNumber driveIndex;
-
-
-	//Get drive char from config.
-	TPtrC driveCharTmp;
-	if (GET_MANDATORY_STRING_PARAMETER(KDriveChar(), aSection, driveCharTmp))
-		{
-
-		TChar driveChar = driveCharTmp.Ptr()[0];
-		TInt driveIndex2;
-		TInt errorCode = RFs::CharToDrive(driveChar, driveIndex2);
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function CharToDrive() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-		else
-			{
-			//Get drive index from config
-			if (GetDriveNumberFromConfig(aSection, KDriveIndex(), driveIndex))
-				{
-				if (driveIndex != driveIndex2)
-					{
-					ERR_PRINTF1(_L("Wrong conversion from char to index"));
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-
-void CT_FsData::DoCmdDriveToChar(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs:: DriveToChar()."));
-
-	TPtrC driveCharTmp;
-
-	//Get drive path from config.
-	TDriveNumber	driveIndex;
-	if (GetDriveNumberFromConfig(aSection, KDriveIndex(), driveIndex))
-		{
-
-		TChar	driveChar2;
-		TInt	errorCode = RFs::DriveToChar(driveIndex, driveChar2);
-		//Check error code.
-
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function DriveToChar() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-		else
-			{
-			INFO_PRINTF3(_L("DriveToChar(%d) = %c"), driveIndex, TUint(driveChar2));
-
-			//Get drive char from config.
-			if (GET_OPTIONAL_STRING_PARAMETER(KDriveChar(), aSection, driveCharTmp))
-				{
-
-				TChar driveChar= driveCharTmp.Ptr()[0];
-				if (driveChar != driveChar2)
-					{
-					ERR_PRINTF1(_L("Wrong conversion from char to index"));
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-
-void CT_FsData::DoCmdCheckDisk(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs:: CheckDisk()."));
-
-	//Get drive path from config.
-	TPtrC drivePath;
-	if (GET_MANDATORY_STRING_PARAMETER(KDrivePath(), aSection, drivePath))
-		{
-
-		TInt errorCode = iFs->CheckDisk(drivePath);
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function CheckDisk() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-
-		}
-
-	}
-
-void CT_FsData::DoCmdScanDrive(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs:: ScanDisk()."));
-
-	//Get drive path from config.
-	TPtrC drivePath;
-	if (GET_MANDATORY_STRING_PARAMETER(KDrivePath(), aSection, drivePath))
-		{
-
-		TInt errorCode = iFs->ScanDrive(drivePath);
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function ScanDrive() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-
-		}
-
-	}
-
-
-void CT_FsData::DoCmdGetDriveName(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::Calls GetDriveName()"));
-
-	//Get drive index from config.
-	TDriveNumber	driveIndex;
-
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-		{
-		TBuf<KBufferStringLength>	driveName;
-		TInt		errorCode = iFs->GetDriveName(driveIndex, driveName);
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function SetDriveLabel() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-		else
-			{
-			//Get drive name from config.
-			TPtrC driveNameFromConf;
-			if(GET_OPTIONAL_STRING_PARAMETER(KDriveName(), aSection, driveNameFromConf))
-				{
-				TPtrC driveNamePtr = driveName;
-				if (driveNamePtr != driveNameFromConf)
-					{
-					ERR_PRINTF3(_L("Names mismatch: %S != %S"), &driveNamePtr, &driveNameFromConf);
-					SetBlockResult(EFail);
-					}
-				}
-
-			TBool save;
-
-			if(GET_OPTIONAL_BOOL_PARAMETER(KSaveInInstance(), aSection, save))
-				{
-				if(save)
-					{
-					iDriveName.Copy(iDriveName);
-					}
-				}
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-
-void CT_FsData::DoCmdSetDriveName(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::SetDriveName()."));
-
-	//Get drive index from config.
-	TDriveNumber	driveIndex;
-	if ( GetDriveNumberFromConfig(aSection, KDrive(), driveIndex) )
-		{
-		//Get drive name from config.
-		TPtrC	driveName;
-		if ( !GET_OPTIONAL_STRING_PARAMETER(KDriveName(), aSection, driveName) )
-			{
-			driveName.Set(iDriveName);
-			}
-
-		//Check error code.
-		TInt	errorCode = iFs->SetDriveName(driveIndex, driveName);
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function SetDriveLabel() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), KDriveIndex);
-		SetBlockResult(EFail);
-		}
-	}
-
-//
-void CT_FsData::DoCmdLockDrive(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::LockDrive()."));
-
-	//Get old password from config.
-	TPtrC	drivePassword;
-	if ( GET_MANDATORY_STRING_PARAMETER(KDriveOldPassword(), aSection, drivePassword) )
-		{
-		//Get drive index from config.
-		TDriveNumber	driveIndex;
-		if ( GetDriveNumberFromConfig(aSection, KDrive(), driveIndex) )
-			{
-			//Get new password from config.
-			TPtrC	driveNewPassword;
-			if ( GET_MANDATORY_STRING_PARAMETER(KDriveNewPassword(), aSection, driveNewPassword) )
-				{
-				// get boolean value from config
-				TBool	store;
-				if (GET_MANDATORY_BOOL_PARAMETER(KStore(), aSection, store))
-					{
-					TMediaPassword	password;
-					password.Copy(driveNewPassword);
-					iPassword.Copy(drivePassword);
-
-					TInt errorCode = iFs->LockDrive(driveIndex, iPassword, password, store);
-
-					//Check error code.
-					if (errorCode == KErrNone)
-						{
-						iPassword=password;
-						}
-					else
-						{
-						ERR_PRINTF2(_L("Function LockDrive() failed with %d error code"), errorCode);
-						SetError(errorCode);
-						}
-					}
-				}
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdUnlockDrive(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::UnlockDrive()."));
-
-	//Get old password from config.
-	TPtrC	drivePassword;
-	if ( GET_MANDATORY_STRING_PARAMETER(KDriveOldPassword(), aSection, drivePassword) )
-		{
-		//Get drive index from config.
-		TDriveNumber	driveIndex;
-		if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-			{
-			// get boolean value from config
-			TBool	store;
-			if (GET_MANDATORY_BOOL_PARAMETER(KStore(), aSection, store))
-				{
-				TMediaPassword	password;
-				//Converting string to appropriative password format(TMediaPassword is typedef for TBuf<16>)
-				password.Copy(drivePassword);
-
-				TInt	errorCode = iFs->UnlockDrive(driveIndex, password, store);
-
-				//Check error code.
-				if (errorCode == KErrNone)
-					{
-					iPassword=password;
-					}
-				else
-					{
-					ERR_PRINTF2(_L("Function UnlockDrive() failed with %d error code"), errorCode);
-					SetError(errorCode);
-					}
-				}
-			}
-		else
-			{
-			ERR_PRINTF2(_L("Not found %S parameter"),KDrive);
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdClearPassword(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::ClearPassword()."));
-
-	//Get old password from config.
-	TPtrC	driveOldPasswordTmp;
-	if (GET_MANDATORY_STRING_PARAMETER(KDriveOldPassword(), aSection, driveOldPasswordTmp))
-		{
-		//Get drive index from config.
-		TDriveNumber	driveIndex;
-		if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-			{
-			//Converting string to appropriative password format(TMediaPassword is typedef for TBuf<16>)
-			TMediaPassword	driveOldPassword;
-			driveOldPassword.Copy(driveOldPasswordTmp);
-
-			TInt	errorCode = iFs->ClearPassword(driveIndex, driveOldPassword);
-			if (errorCode != KErrNone)
-				{
-				ERR_PRINTF2(_L("Function ClearPassword() failed with %d error code"), errorCode);
-				SetError(errorCode);
-				}
-			}
-		else
-			{
-			ERR_PRINTF2(_L("Not found %S parameter"),KDrive);
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdErasePassword(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::ErasePassword()."));
-
-	//Get drive from config.
-	TDriveNumber	driveIndex;
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-		{
-		TInt	errorCode = iFs->ErasePassword(driveIndex);
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function ErasePassword() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-
-void CT_FsData::DoCmdReserveDriveSpace(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::ReserveDriveSpace()."));
-
-	//Get amount of bytes to be reserved from config.
-	TInt	bytesToReserve;
-	if (GET_MANDATORY_INT_PARAMETER(KBytesToReserve(), aSection, bytesToReserve))
-		{
-		TDriveNumber	driveIndex;
-
-		if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-			{
-			TInt	errorCode = iFs->ReserveDriveSpace(driveIndex, bytesToReserve);
-
-			//Check error code.
-			if (errorCode != KErrNone)
-				{
-				ERR_PRINTF2(_L("Function ReserveDriveSpace() failed with %d error code"), errorCode);
-				SetError(errorCode);
-				}
-			}
-		else
-			{
-			ERR_PRINTF2(_L("Not found %S parameter"),KDrive);
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdGetReserveAccess(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::GetReserveAccess()."));
-
-	//Get drive index from config.
-	TDriveNumber	driveIndex;
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-		{
-		TInt	errorCode = iFs->GetReserveAccess(driveIndex);
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function GetReserveAccess() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-
-void CT_FsData::DoCmdReleaseReserveAccess(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::ReleaseReserveAccess()."));
-
-	//Get drive index from config.
-	TDriveNumber	driveIndex;
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveIndex))
-		{
-		TInt	errorCode = iFs->ReleaseReserveAccess(driveIndex);
-
-		//Check error code.
-		if (errorCode != KErrNone)
-			{
-			ERR_PRINTF2(_L("Function ReleaseReserveAccess() failed with %d error code"), errorCode);
-			SetError(errorCode);
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-void CT_FsData::DoCmdGetSystemDrive(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::GetSystemDrive()."));
-
-	TDriveNumber	driveNumber = RFs::GetSystemDrive();
-	INFO_PRINTF2(_L("System Drive = %d"), driveNumber);
-
-	//Get drive index from config.
-	TDriveNumber	driveIndex;
-	if ( GetDriveNumberFromConfig(aSection, KDrive(), driveIndex) )
-		{
-		//Check error code.
-		if (driveNumber != driveIndex)
-			{
-			ERR_PRINTF1(_L("GetSystemDrive() returned unexpected drive"));
-			SetBlockResult(EFail);
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("Not found %S parameter"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-void CT_FsData::DoCmdSetSystemDrive(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::SetSystemDrive()"));
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		TInt	err = iFs->SetSystemDrive(driveNumber);
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetSystemDrive() error: %d"), err);
-			SetError(err);
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		}
-
-	}
-
-void CT_FsData::DoCmdGetSystemDriveChar(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::GetSystemDriveChar()"));
-
-	TChar	drvChar = RFs::GetSystemDriveChar();
-	INFO_PRINTF2(_L("GetSystemDriveChar() = %c"), TUint(drvChar));
-	//Get drive char from config.
-	TPtrC	driveCharTmp;
-	if (GET_OPTIONAL_STRING_PARAMETER(KDriveChar(), aSection, driveCharTmp))
-		{
-		TChar	driveCharExpect = driveCharTmp.Ptr()[0];
-		driveCharExpect.UpperCase();
-		drvChar.UpperCase();
-		if ( drvChar != driveCharExpect)
-			{
-			ERR_PRINTF1(_L("Drive char != expected drive char"));
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdVolumeIOParam(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::VolumeIOParam()"));
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		TVolumeIOParamInfo	volumeIOParamInf;
-		TInt				err = iFs->VolumeIOParam(driveNumber, volumeIOParamInf);
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("VolumeIOParam()  error: %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("VolumeIOParam BlockSize: %d"), volumeIOParamInf.iBlockSize );
-			INFO_PRINTF2(_L("VolumeIOParam ClusterSize: %d"), volumeIOParamInf.iClusterSize );
-			INFO_PRINTF2(_L("VolumeIOParam RecReadBufSize: %d"), volumeIOParamInf.iRecReadBufSize );
-			INFO_PRINTF2(_L("VolumeIOParam RecWriteBufSize: %d"), volumeIOParamInf.iRecWriteBufSize );
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FsDataFiles.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1690 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FsData
-*/
-
-//	User includes
-#include "T_FsData.h"
-#include "FileserverUtil.h"
-
-//	EPOC includes
-#include <e32cmn.h>
-
-/*@{*/
-
-//	Parameters
-_LIT(KAttMask,					"attmask" );
-_LIT(KPath,						"path");
-_LIT(KDrive,					"drive");
-_LIT(KDir,						"dir");
-_LIT(KFile,						"file");
-_LIT(KName,						"name");
-_LIT(KNewName,					"newname");
-_LIT(KOldName,					"oldname");
-_LIT(KLongName,					"longname");
-_LIT(KShortName,				"shortname");
-_LIT(KLengthBuffer,				"length_buffer");
-_LIT(KLengthRead,				"length_read");
-_LIT(KEntrySortKey,				"sortkey");
-_LIT(KEntrySetAttMask,			"setattmask");
-_LIT(KEntryClearAttMask,		"clearattmask");
-_LIT(KTime,						"time");
-_LIT(KOffset,					"offset");
-_LIT(KTUidType,					"uidtype");
-_LIT(KIsDirList,				"isdirlist");
-_LIT(KRelated,					"related");
-_LIT(KBadChar,					"badchar");
-_LIT(KIsBadChar,				"isbadchar");
-_LIT(KCompareName,				"comparename");
-_LIT(KComparePath,				"comparepath");
-_LIT(KParseName,				"parsename");
-_LIT(KParseDrive,				"parsedrive");
-_LIT(KParsePath,				"parsepath");
-_LIT(KParseExt,					"parseext");
-_LIT(KIsExist,					"isexist");
-_LIT(KIsSetAtt,					"issetatt");
-_LIT(KSize,						"size");
-_LIT(KIsOpen,					"isopen");
-_LIT(KIsValid,					"isvalid");
-_LIT(KIsInRom,					"isinrom");
-_LIT(KDirEntryArray,			"dirEntryObject");
-_LIT(KDirDirectoryArray,		"dirDirectoryObject");
-_LIT(KObjectEntry,				"entry" );
-
-//	Attributes for compare
-_LIT(KIsAttReadOnly, 			"isattreadonly");
-_LIT(KIsAttHidden, 				"isatthidden");
-_LIT(KIsAttSystem, 				"isattsystem");
-_LIT(KIsAttDir, 				"isattdir");
-_LIT(KIsAttArchive, 			"isattarchive");
-_LIT(KIsAttAllowUid, 			"isattuid");
-
-//	Commands
-_LIT(KCmdRealName,				"RealName");
-_LIT(KCmdSessionPath,			"SessionPath");
-_LIT(KCmdSetSessionPath,		"SetSessionPath");
-_LIT(KCmdParse,					"Parse");
-_LIT(KCmdMkDir,					"MkDir");
-_LIT(KCmdMkDirAll,				"MkDirAll");
-_LIT(KCmdRmDir,					"RmDir");
-_LIT(KCmdGetDir,				"GetDir");
-_LIT(KCmdDelete,				"Delete");
-_LIT(KCmdRename,				"Rename");
-_LIT(KCmdReplace,				"Replace");
-_LIT(KCmdAtt,					"Att");
-_LIT(KCmdSetAtt,				"SetAtt");
-_LIT(KCmdModified,				"Modified");
-_LIT(KCmdSetModified,			"SetModified");
-_LIT(KCmdEntry,					"Entry");
-_LIT(KCmdSetEntry,				"SetEntry");
-_LIT(KCmdReadFileSection,		"ReadFileSection");
-_LIT(KCmdIsFileOpen,			"IsFileOpen");
-_LIT(KCmdGetShortName,			"GetShortName");
-_LIT(KCmdGetLongName,			"GetLongName");
-_LIT(KCmdIsFileInRom,			"IsFileInRom");
-_LIT(KCmdIsValidName,			"IsValidName");
-_LIT(KCmdSetSessionToPrivate,	"SetSessionToPrivate");
-_LIT(KCmdPrivatePath,			"PrivatePath");
-_LIT(KCmdCreatePrivatePath,		"CreatePrivatePath");
-
-//	Sort key
-_LIT(KESortNone,				"ESortNone");
-_LIT(KESortByName,				"ESortByName");
-_LIT(KESortByExt,				"ESortByExt");
-_LIT(KESortBySize,				"ESortBySize");
-_LIT(KESortByDate,				"ESortByDate");
-_LIT(KESortByUid,				"ESortByUid");
-_LIT(KEDirsAnyOrder,			"EDirsAnyOrder");
-_LIT(KEDirsFirst,				"EDirsFirst");
-_LIT(KEDirsLast,				"EDirsLast");
-_LIT(KEAscending,				"EAscending");
-_LIT(KEDescending,				"EDescending");
-_LIT(KEDirDescending,			"EDirDescending");
-
-// Attributes
-_LIT(KEntryAttUnknown, 					"KEntryAttUnknown");
-_LIT(KEntryAttReadOnlyStr, 				"KEntryAttReadOnly");
-_LIT(KEntryAttHiddenStr, 				"KEntryAttHidden");
-_LIT(KEntryAttSystemStr, 				"KEntryAttSystem");
-_LIT(KEntryAttVolumeStr,				"KEntryAttVolume");
-_LIT(KEntryAttDirStr, 					"KEntryAttDir");
-_LIT(KEntryAttArchiveStr, 				"KEntryAttArchive");
-_LIT(KEntryAttAllowUidStr,				"KEntryAttAllowUid");
-_LIT(KEntryAttXIPStr, 					"KEntryAttXIP");
-
-// Constants
-_LIT(KTimeFormat,				"%D%M%Y%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B"); //SIZE 30
-#define KTimeFormatSize 		30
-#define KShortNameSize	 		13
-#define KLongNameSize	 		256
-
-/*@}*/
-
-/**
-* Process a files related command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-TBool CT_FsData::DoCommandFilesL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt  /*aSynchronous*/)
-	{
-	TBool retVal = ETrue;
-
-	if (aCommand == KCmdAtt)
-		{
-		DoCmdAtt(aSection);
-		}
-	else if (aCommand == KCmdCreatePrivatePath)
-		{
-		DoCmdCreatePrivatePath(aSection);
-		}
-	else if (aCommand == KCmdDelete)
-		{
-		DoCmdDelete(aSection);
-		}
-	else if (aCommand == KCmdEntry)
-		{
-		DoCmdEntryL(aSection);
-		}
-	else if (aCommand == KCmdGetDir)
-		{
-		DoCmdGetDir(aSection);
-		}
-	else if (aCommand == KCmdGetShortName)
-		{
-		DoCmdGetShortName(aSection);
-		}
-	else if (aCommand == KCmdGetLongName)
-		{
-		DoCmdGetLongName(aSection);
-		}
-	else if (aCommand == KCmdIsFileInRom)
-		{
-		DoCmdIsFileInRom(aSection);
-		}
-	else if (aCommand == KCmdIsFileOpen)
-		{
-		DoCmdIsFileOpen(aSection);
-		}
-	else if (aCommand == KCmdIsValidName)
-		{
-		DoCmdIsValidName(aSection);
-		}
-	else if (aCommand == KCmdMkDir)
-		{
-		DoCmdMkDir(aSection);
-		}
-	else if (aCommand == KCmdMkDirAll)
-		{
-		DoCmdMkDirAll(aSection);
-		}
-	else if (aCommand == KCmdModified)
-		{
-		DoCmdModified(aSection);
-		}
-	else if (aCommand == KCmdParse)
-		{
-		DoCmdParse(aSection);
-		}
-	else if (aCommand == KCmdPrivatePath)
-		{
-		DoCmdPrivatePath(aSection);
-		}
-	else if (aCommand == KCmdReadFileSection)
-		{
-		DoCmdReadFileSectionL(aSection);
-		}
-	else if (aCommand == KCmdRealName)
-		{
-		DoCmdRealName(aSection);
-		}
-	else if (aCommand == KCmdRename)
-		{
-		DoCmdRename(aSection);
-		}
-	else if (aCommand == KCmdReplace)
-		{
-		DoCmdReplace(aSection);
-		}
-	else if (aCommand ==  KCmdRmDir)
-		{
-		DoCmdRmDir(aSection);
-		}
-	else if (aCommand == KCmdSessionPath)
-		{
-		DoCmdSessionPath(aSection);
-		}
-	else if (aCommand == KCmdSetAtt)
-		{
-		DoCmdSetAtt(aSection);
-		}
-	else if (aCommand == KCmdSetEntry)
-		{
-		DoCmdSetEntry(aSection);
-		}
-	else if (aCommand == KCmdSetModified)
-		{
-		DoCmdSetModified(aSection);
-		}
-	else if (aCommand == KCmdSetSessionPath)
-		{
-		DoCmdSetSessionPath(aSection);
-		}
-	else if (aCommand == KCmdSetSessionToPrivate)
-		{
-		DoCmdSetSessionToPrivate(aSection);
-		}
-	else
-		{
-		retVal = EFalse;
-		}
-
-	return retVal;
-	}
-
-void CT_FsData::DoCmdRealName(const TDesC& aSection)
-	{
-	//	Gets name of file from ini file.
-	TPtrC	name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		//	Gets the real name of a file.
-		TFileName	realName;
-		TInt		err = iFs->RealName(name, realName);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("RealName error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			//	Prints real name.
-			INFO_PRINTF2(_L("Real name: %S"), &realName);
-
-			//	Compares realname from ini file and realname from function.
-			TPtrC compareName;
-			if (GET_OPTIONAL_STRING_PARAMETER(KCompareName(), aSection, compareName))
-				{
-				if (compareName.CompareC(realName, 0, NULL) != 0)
-					{
-					ERR_PRINTF3(_L("Error compare %S != %S"), &realName, &compareName);
-					SetBlockResult(EFail);
-					}
-				else
-					{
-					INFO_PRINTF3(_L("%S == %S"), &realName, &compareName);
-					}
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdSessionPath(const TDesC& aSection)
-	{
-	//	Gets the session path.
-	TBuf<KMaxTestExecuteCommandLength> path;
-	TInt err = iFs->SessionPath(path);
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("SessionPath error %d"), err);
-		SetError(err);
-		}
-	else
-		{
-		//	Prints session path.
-		INFO_PRINTF2(_L("Session path is %S"), &path);
-
-		//	Compares path from ini file and path from function.
-		TPtrC comparePath;
-		if (GET_OPTIONAL_STRING_PARAMETER(KComparePath(), aSection, comparePath))
-			{
-			if (comparePath.CompareC(path, 0, NULL) != 0)
-				{
-				ERR_PRINTF3(_L("Error compare %S != %S"), &path, &comparePath);
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("%S == %S"), &path, &comparePath);
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdSetSessionPath(const TDesC& aSection)
-	{
-	//	Gets path from ini file.
-	TPtrC path;
-	if (GET_MANDATORY_STRING_PARAMETER(KPath(), aSection, path))
-		{
-		//	Sets the session path for the current file server client.
-		TInt err = iFs->SetSessionPath(path);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetSessionPath error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			//	Prints session path.
-			INFO_PRINTF2(_L("Path is set into %S"), &path);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdParse(const TDesC& aSection)
-	{
-	//	Gets name of file from ini file.
-	TPtrC name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		TInt err;
-		TParse parse;
-		TPtrC related;
-
-		//	Reads the related file specification.
-		if (GET_OPTIONAL_STRING_PARAMETER(KRelated(), aSection, related))
-			{
-			INFO_PRINTF2(_L("Related parameter: %S"), &related);
-
-	    	//	Parses a filename specification, specifying related file path components.
-			err = iFs->Parse(name, related, parse);
-			}
-		else
-			{
-			//	Parses a filename specification.
-			err = iFs->Parse(name, parse);
-			}
-
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Parse error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			//	Writes parsed components to log file.
-			TPtrC parsedResult[] =
-				{
-				parse.Drive(),	//parsedDrive,
-				parse.Path(),	//parsedPath,
-				parse.Name(),	//parsedName,
-				parse.Ext() 	//parsedExt,
-				};// size 4
-
-			TBuf<KMaxTestExecuteCommandLength> tempStore;
-			tempStore.Format(_L("Parsed %S, Drive: %S, Path: %S, Name: %S, Ext: %S"),  	&name,
-																						&parsedResult[0], //Drive
-																						&parsedResult[1], //Path
-																						&parsedResult[2], //Name
-																						&parsedResult[3]);//Ext
-			INFO_PRINTF1(tempStore);
-
-
-			//	Compares parsed components from ini file.
-			TPtrC iniParsed[] =
-				{
-				KParseDrive(),
-				KParsePath(),
-				KParseName(),
-				KParseExt()
-				};// size 4
-
-			TInt size = sizeof(iniParsed) / sizeof(TPtrC);
-			for (TInt i = 0; i < size; i++)
-				{
-				// Reads components from ini
-				TPtrC compareName;
-				if (GET_OPTIONAL_STRING_PARAMETER(iniParsed[i], aSection, compareName))
-					{
-					if (parsedResult[i].CompareC(compareName, 0, NULL) != 0)
-						{
-						ERR_PRINTF3(_L("Error compare %S != %S"), &parsedResult[i], &compareName);
-						SetBlockResult(EFail);
-						}
-					else
-						{
-						INFO_PRINTF3(_L("%S == %S"), &parsedResult[i], &compareName);
-						}
-					}
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdMkDir(const TDesC& aSection)
-	{
-	//	Gets name of directiry from ini file.
-	TPtrC	dir;
-	if (GET_MANDATORY_STRING_PARAMETER(KDir(), aSection, dir))
-		{
-		//	Makes a directory.
-		TInt	err = iFs->MkDir(dir);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("MkDir error %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdMkDirAll(const TDesC& aSection)
-	{
-	//	Gets name of directiry from ini file.
-	TPtrC	dir;
-	if (GET_MANDATORY_STRING_PARAMETER(KDir(), aSection, dir))
-		{
-		//	Makes one or more directories.
-		TInt	err = iFs->MkDirAll(dir);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("MkDirAll error %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdRmDir(const TDesC& aSection)
-	{
-	//	Gets name of directiry from ini file.
-	TPtrC	dir;
-	if (GET_MANDATORY_STRING_PARAMETER(KDir(), aSection, dir))
-		{
-		//	Removes a directory.
-		TInt	err = iFs->RmDir(dir);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("RmDir error %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdGetDir(const TDesC& aSection)
-	{
-	TBool	dataOk = ETrue;
-
-	//	Reads name of directory from ini file.
-	TPtrC	name;
-	if (!GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		dataOk = EFalse;
-		}
-
-	//	Reads sort key from ini file.
-	TPtrC	entrySortKey;
-	TUint	sortKey = ESortByName;
-	if (GET_MANDATORY_STRING_PARAMETER(KEntrySortKey(), aSection, entrySortKey))
-		{
-		if ( !ConvertToSortKey(entrySortKey, sortKey) )
-			{
-			TInt	intTemp;
-			if ( GET_MANDATORY_INT_PARAMETER(KEntrySortKey(), aSection, intTemp) )
-				{
-				sortKey=intTemp;
-				}
-			else
-				{
-				dataOk = EFalse;
-				}
-			}
-		}
-	else
-		{
-		dataOk = EFalse;
-		}
-
-	// 	Reads attribute mask from ini file
-	// 	if not exist
-	// 	Reads uidtype from ini file
-
-	TInt		intUIDType = 0;
-	TUidType	uidType = KNullUid;
-	TBool		isUidType = EFalse;
-	
-	TUint		attMask = KEntryAttNormal;
-
-	TBool		isDirList = FALSE;
-
-	if (FileserverUtil::GetAttMask(*this, aSection, KAttMask(), attMask))
-    	{
-		//	Reads boolean of dirlist from ini file.
-		GET_OPTIONAL_BOOL_PARAMETER(KIsDirList(), aSection, isDirList);
-		}
-	else if (GET_MANDATORY_INT_PARAMETER(KTUidType(), aSection, intUIDType))
-		{
-    	TUid id = TUid::Uid(intUIDType);
-	   	uidType = TUidType(id);
-	   	INFO_PRINTF2(_L("UID type set to %d"), uidType[0].iUid);
-		}
-	else
-		{
-		dataOk = EFalse;
-		ERR_PRINTF2(_L("attmask or %S must be declared !!!"), &KTUidType);
-		}
-		
-	// If all data was read
-	if (dataOk)
-		{
-		//	Gets a filtered list of a directory's contents.
-		TInt err = KErrNone;
-		CT_DirData* dirWrapperEntry = NULL;
-		CT_DirData* dirWrapperDirectory = NULL;
-		CDir*		entryArray = NULL;
-		CDir*		dirArray = NULL;
-		TPtrC		dirEntryArray;
-		TPtrC		dirDirectoryArray;
-		
-		if (GET_OPTIONAL_STRING_PARAMETER(KDirEntryArray(), aSection, dirEntryArray))
-			{
-			TRAP(err, dirWrapperEntry = static_cast<CT_DirData*>(GetDataWrapperL(dirEntryArray)));
-			}
-			
-		if (GET_OPTIONAL_STRING_PARAMETER(KDirDirectoryArray(), aSection, dirDirectoryArray))
-			{
-			TRAP(err, dirWrapperDirectory = static_cast<CT_DirData*>(GetDataWrapperL(dirDirectoryArray)));
-			}
-
-		if (isUidType)
-			{
-			// Gets a filtered list of a directory's contents by UID type.
-			err = iFs->GetDir(name, uidType, sortKey, entryArray);
-			}
-		else
-			{
-			if (isDirList)
-				{
-				// Gets a filtered list of the directory and file entries contained in a directory,
-				// and a list of the directory entries only.
-				err = iFs->GetDir(name, attMask, sortKey, entryArray, dirArray);
-				}
-			else
-				{
-				// Gets a filtered list of a directory's contents.
-				err = iFs->GetDir(name, attMask, sortKey, entryArray);
-				}
-			}
-			
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("GetDir error %d"), err);
-			SetError(err);
-			}
-		else
-			{	
-			//	Writes sorted entries to log file.
-			INFO_PRINTF2(_L("PATH %S"), &name);
-			for (TInt i = 0; i < entryArray->Count(); i++)
-				{
-				TBuf<KMaxTestExecuteCommandLength> tempStore;
-				tempStore.Format(_L("%d) %S"), i+1, &(*entryArray)[i].iName);
-				INFO_PRINTF1(tempStore);
-				}
-
-			//	If "_comparename" of parameter is set in INI file, then
-			//	try to find this name in the list of entries.
-			TPtrC compareName;
-			if (GET_OPTIONAL_STRING_PARAMETER(KCompareName(), aSection, compareName))
-				{
-				// Find compare name in list of entries.
-				TBool isFind = FALSE;
-				for (TInt i = 0; i < entryArray->Count(); i++)
-					{
-					if (compareName.CompareC((*entryArray)[i].iName, 0, NULL) == 0)
-						{
-						isFind = TRUE;
-						}
-					}
-
-				//	Reads a flag which specifies a name should be existing or not be existing
-				//	specified in parameter "KCompareName".
-				TBool isExist = TRUE;
-				GET_OPTIONAL_BOOL_PARAMETER(KIsExist(), aSection, isExist);
-
-				TPtrC strIsExist = isExist ? _L("EXIST") : _L("NOT EXIST");
-				INFO_PRINTF3(_L("%S must be %S"), &compareName, &strIsExist);
-
-				TPtrC strIsFind = isFind ? _L("FOUND") : _L("NOT FOUND");
-				INFO_PRINTF3(_L("%S is %S"), &compareName, &strIsFind);
-
-				//	If name has been found when this name must not be existing
-				//	or when name has been not found when name must be existing
-				//	then test case fail.
-				if (isExist != isFind)
-					{
-					ERR_PRINTF1(_L("Expected exist does not match actual"));
-					SetBlockResult(EFail);
-					}
-				}
-			}
-
-		//	Delete list of data
-		if (entryArray)
-			{
-			if(dirWrapperEntry)
-				{
-				dirWrapperEntry->SetObjectL(entryArray);
-				}
-			else
-			    {
-			    delete entryArray;
-			    entryArray = NULL;			        
-			    }
-			}
-		if (dirArray)
-			{
-			if(dirWrapperDirectory)
-				{
-				dirWrapperDirectory->SetObjectL(dirArray);
-				}
-			else
-			    {
-			    delete dirArray;
-			    dirArray = NULL;   
-			    }
-			}
-		}
-	}
-
-void CT_FsData::DoCmdDelete(const TDesC& aSection)
-	{
-	//	Reads name of file from ini file.
-	TPtrC	name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		//	Deletes a single file.
-		TInt	err = iFs->Delete(name);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Delete error %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdRename(const TDesC& aSection)
-	{
-	TBool	dataOk=ETrue;
-
-	//	Reads the old name of file or directory from ini file.
-	TPtrC	oldName;
-	if ( !GET_MANDATORY_STRING_PARAMETER(KOldName(), aSection, oldName) )
-		{
-		dataOk=EFalse;
-		}
-
-	//	Reads the new name of file or directory from ini file.
-	TPtrC	newName;
-	if ( !GET_MANDATORY_STRING_PARAMETER(KNewName(), aSection, newName) )
-		{
-		dataOk=EFalse;
-		}
-
-	if ( dataOk )
-		{
-		//	Renames a single file or directory.
-		TInt	err = iFs->Rename(oldName, newName);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Rename error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF3(_L("File %S was renamed to %S successfully"), &oldName, &newName);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdReplace(const TDesC& aSection)
-	{
-	TBool	dataOk=ETrue;
-
-	//	Reads the old name of file from ini file.
-	TPtrC	oldName;
-	if ( !GET_MANDATORY_STRING_PARAMETER(KOldName(), aSection, oldName) )
-		{
-		dataOk=EFalse;
-		}
-
-	//	Reads the new name of file from ini file.
-	TPtrC	newName;
-	if ( !GET_MANDATORY_STRING_PARAMETER(KNewName(), aSection, newName) )
-		{
-		dataOk=EFalse;
-		}
-
-	if ( dataOk )
-		{
-		//	Replaces a single file with another.
-		TInt err = iFs->Replace(oldName, newName);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Replace error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF3(_L("File %S was replaced to %S successfully"), &oldName, &newName);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdAtt(const TDesC& aSection)
-	{
-	//	Reads the name of file from ini file.
-	TPtrC	name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		//	Gets a file's attributes.
-		TUint	attValue;
-		TInt	err = iFs->Att(name, attValue);
-		INFO_PRINTF2(_L("RFs::Att = 0x%X"), attValue);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Att error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			TUint	arrAttMask[]=
-				{
-				KEntryAttReadOnly,
-				KEntryAttHidden,
-				KEntryAttSystem,
-				KEntryAttVolume,
-				KEntryAttDir,
-				KEntryAttArchive,
-				KEntryAttXIP
-				};//size 7
-
-		    //	Writes what attributes has a file.
-			INFO_PRINTF1(_L("--- START --- print all attributes"));
-
-			TInt size = sizeof(arrAttMask) / sizeof(TUint);
-			for (TInt i = 0; i < size; i++)
-				{
-				if (attValue & arrAttMask[i])
-					{
-					INFO_PRINTF2(_L("Attribute %S is set"), &ConvertToStrAttMask(arrAttMask[i]));
-					}
-				else
-					{
-					INFO_PRINTF2(_L("Attribute %S is not set"), &ConvertToStrAttMask(arrAttMask[i]));
-					}
-				}
-			INFO_PRINTF1(_L("--- END --- print all attributes"));
-
-			//	Reads atribute wich is testing.
-			TPtrC testAttMaskStr;
-			if(GET_OPTIONAL_STRING_PARAMETER(KEntrySetAttMask(), aSection, testAttMaskStr))
-				{
-				TUint	testAttMask = 0;
-				if (FileserverUtil::GetAttMask(*this, aSection, KEntrySetAttMask(), testAttMask))
-					{
-				    //	Reads a flag which specifies a attribute should be set or not set
-				    //	specified in parameter "KEntrySetAttMask".
-				    TBool	testIsSet = TRUE;
-					if (GET_OPTIONAL_BOOL_PARAMETER(KIsSetAtt(), aSection, testIsSet))
-						{
-						INFO_PRINTF2(_L("TEST attributes %S must be set"), &ConvertToStrAttMask(testAttMask));
-						}
-					else
-						{
-						INFO_PRINTF2(_L("TEST attributes %S must not be set"), &ConvertToStrAttMask(testAttMask));
-						}
-					if ( (attValue&testAttMask)==testAttMask )
-						{
-						if ( !testIsSet )
-							{
-							ERR_PRINTF2(_L("All bits not set %S"), &ConvertToStrAttMask(testAttMask));
-							SetBlockResult(EFail);
-							}
-						}
-					else if ( (attValue&testAttMask)==0 )
-						{
-						if ( testIsSet )
-							{
-							ERR_PRINTF2(_L("Some bits set %S"), &ConvertToStrAttMask(testAttMask));
-							SetBlockResult(EFail);
-							}
-						}
-					else
-						{
-						ERR_PRINTF2(_L("Some bits set %S"), &ConvertToStrAttMask(testAttMask));
-						SetBlockResult(EFail);
-						}
-					}
-				else
-					{
-					ERR_PRINTF1(_L("Unknown attribute!"));
-			        SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdSetAtt(const TDesC&  aSection)
-	{
-	//	Reads attributes to be set from ini file.
-	TUint	setAttMask = 0;
-	
-	if (!FileserverUtil::GetAttMask(*this, aSection, KEntrySetAttMask(), setAttMask))
-		{
-		ERR_PRINTF1(_L("Unknown attribute!"));
-		SetBlockResult(EFail);	
-		}
-
-	//	Reads attributes to be clear from ini file.
-	TUint	clearAttMask = 0;
-	if (!FileserverUtil::GetAttMask(*this, aSection, KEntryClearAttMask(), clearAttMask))
-		{
-		ERR_PRINTF1(_L("Unknown attribute!"));
-		SetBlockResult(EFail);
-		}
-
-	//	Reads the name of file or directory from ini file.
-	TPtrC	name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		//	Sets or clears the attributes of a single file or directory.
-		TInt err = iFs->SetAtt(name, setAttMask, clearAttMask);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetAtt error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("SetAtt() is successful"));
-			}
-		}
-	}
-
-void CT_FsData::DoCmdModified(const TDesC& aSection)
-	{
-	//	Reads the name of file or directory from ini file.
-	TPtrC name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		//	Gets the last modification date and time of a file or a directory, in UTC.
-		TTime time;
-		TInt err = iFs->Modified(name, time);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Modified error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			//	Write to log modified date and time.
-			TBuf<KTimeFormatSize> dateString;
-			TRAP (err, time.FormatL(dateString, KTimeFormat));
-			if (err != KErrNone)
-				{
-				ERR_PRINTF2(_L("time.FormatL() error %d"), err);
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("File %S modified: %S"), &name, &dateString);
-
-				//	Reads time in ini file which must be returned from function "Modified()".
-				TPtrC inputTime;
-				if (GET_OPTIONAL_STRING_PARAMETER(KTime(), aSection, inputTime))
-					{
-					//	Convert input string in "KTime" from ini to TTime object.
-					//	Assigns a date and time contained in a descriptor.
-					TTime iniTime;
-					TInt err = iniTime.Set(inputTime);
-					if (err == KErrNone)
-						{
-						//	Compares time from ini file and time returned from function.
-						if (iniTime == time)
-							{
-							INFO_PRINTF1(_L("Time equal"));
-							}
-						else
-							{
-							ERR_PRINTF3(_L("Time not equal, %S != %S"), &inputTime, &dateString);
-							SetBlockResult(EFail);
-							}
-						}
-					else
-						{
-						ERR_PRINTF2(_L("Fail set time, error %d"), err);
-						SetBlockResult(EFail);
-						}
-					}
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdSetModified(const TDesC& aSection)
-	{
-	//	Reads the time from ini file.
-	TTime	time(0);
-	TPtrC	inputTime;
-	if (GET_OPTIONAL_STRING_PARAMETER(KTime(), aSection, inputTime))
-		{
-		//	Assigns a date and time contained in a descriptor.
-		TInt err = time.Set(inputTime);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Time set failed, error %d"), err);
-			SetBlockResult(EFail);
-			}
-		}
-
-	//	Reads the name of file or directory from ini file.
-	TPtrC	name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		//	Sets the date and time that the contents of a file or directory were modified, in UTC.
-		TInt err = iFs->SetModified(name, time);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetModified error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("SetModified() OK"));
-			}
-		}
-	}
-
-void CT_FsData::DoCmdEntryL(const TDesC& aSection)
-	{	
-	TBool isEntryNew = EFalse;
-	
-	//	Reads the name of file or directory from ini file.
-	TPtrC name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		TEntry *entry = NULL;
-		
-		//	Gets the entry details for a file or directory.
-		TPtrC entryObjectName;
-		if( GET_OPTIONAL_STRING_PARAMETER( KObjectEntry, aSection, entryObjectName ) )
-			{
-			INFO_PRINTF1( _L( "Get TEntry class instance." ) );
-			TRAPD( err, entry = (TEntry*)GetDataObjectL(entryObjectName));
-			if ( err != KErrNone )
-				{
-				ERR_PRINTF3( _L( "Unrecognized object name parameter value: %S. Error %d"), &entryObjectName, err );
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF1( _L( "TEntry class instance accepted OK." ) );
-				}				
-			}
-		else
-			{
-			INFO_PRINTF1( _L( "Create new temporary TEntry() class instance." ) );
-			TRAPD( err, entry = new (ELeave) TEntry() );
-			if ( err!=KErrNone )
-				{
-				ERR_PRINTF2( _L( "new TEntry() error %d" ), err );
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				isEntryNew = ETrue;
-				}
-			}
-		
-		if ( entry != NULL )
-			{				
-			TInt err = iFs->Entry(name, *entry);
-			if (err != KErrNone)
-				{
-				ERR_PRINTF2(_L("Entry error %d"), err);
-				SetError(err);
-				}
-			else
-				{
-				// 	Prints all entry details for the file or directory.
-				//	and compares these entry fith entry in ini file
-				TPtrC arrNames[] =
-					{
-					KEntryAttDirStr(),
-					KEntryAttArchiveStr(),
-					KEntryAttHiddenStr(),
-					KEntryAttReadOnlyStr(),
-					KEntryAttSystemStr(),
-					KEntryAttAllowUidStr()
-					};//size 6
-
-				TInt64 arrFunctions[] =
-					{
-					entry->IsDir() > 0,
-					entry->IsArchive() > 0,
-					entry->IsHidden() > 0,
-					entry->IsReadOnly() > 0,
-					entry->IsSystem() > 0,
-					entry->IsTypeValid() > 0
-					};//size 6
-
-				TPtrC iniParam[] =
-					{
-					KIsAttDir(),
-					KIsAttArchive(),
-					KIsAttHidden(),
-					KIsAttReadOnly(),
-					KIsAttSystem(),
-					KIsAttAllowUid(),
-					};//size 6
-
-				TInt size = sizeof(arrNames) / sizeof(TPtrC);
-				for	(TInt i = 0; i < size; i++)
-					{
-					TBuf<KMaxTestExecuteCommandLength>	tempStore;
-					if (arrFunctions[i])
-						{
-						tempStore.Format(_L("%S - attribute %S is SET"), &name, &arrNames[i]);
-						}
-					else
-						{
-						tempStore.Format(_L("%S - attribute %S is NOT SET"), &name, &arrNames[i]);
-						}
-					INFO_PRINTF1(tempStore);
-
-					//	If iniParam[] is set in ini then compare  with attribute returned from function.
-					TBool iniCompare = FALSE;
-					if (GET_OPTIONAL_BOOL_PARAMETER(iniParam[i], aSection, iniCompare))
-						{
-						//	Compares entry in ini file and entry returned from function.
-						if (arrFunctions[i] != iniCompare)
-							{
-							ERR_PRINTF2(_L("Error compare attribute %S"), &iniParam[i]);
-							SetBlockResult(EFail);
-							}
-						}
-					}
-
-				//	Prints size of file.
-				INFO_PRINTF3(_L("%S - size %d"), &name, entry->iSize);
-
-				//	Compare size of file returned from function with size from ini.
-				TInt iniSize = 0;
-				if (GET_OPTIONAL_INT_PARAMETER(KSize(), aSection, iniSize))
-					{
-					if (entry->iSize != iniSize)
-						{
-						ERR_PRINTF3(_L("Size from ini file not equal with size returned from function (%d != %d)"), iniSize, entry->iSize);
-						SetBlockResult(EFail);
-						}
-					}
-
-				//	Prints the system time of last modification.
-				TBuf<KTimeFormatSize>	dateString;
-				entry->iModified.FormatL(dateString, KTimeFormat);
-				INFO_PRINTF3(_L("%S - modified %S"), &name, &dateString);
-
-				//	Compare time from ini with time returned from function.
-				TPtrC	iniTimeStr;
-				if (GET_OPTIONAL_STRING_PARAMETER(KTime(), aSection, iniTimeStr))
-					{
-					//	Assigns a date and time contained in a descriptor.
-					TTime	iniTime;
-					
-					TInt error = iniTime.Set(iniTimeStr);
-					if(error == KErrNone)
-						{
-						//	Compares size in ini file and size returned from function.
-						if (entry->iModified != iniTime)
-							{
-							ERR_PRINTF1(_L("Time from ini file not equal with time returned from function."));
-							SetBlockResult(EFail);
-							}
-						}
-					else
-						{
-						ERR_PRINTF3(_L("Cannot convert %S to TTime type. Error: %d"), &iniTimeStr, error);
-						SetBlockResult(EFail);
-						}
-					}
-
-				// Prints the file's UIDtype.
-				INFO_PRINTF3(_L("%S - UIDtype %d"), &name, entry->MostDerivedUid().iUid);
-				
-				if (isEntryNew)
-					{
-					INFO_PRINTF1(_L("Delete temporary TEntry() class instance."));
-					delete entry;
-					entry = NULL;
-					}
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdSetEntry(const TDesC& aSection)
-	{
-	TBool	dataOk=ETrue;
-
-	TUint	setAttMask = 0;
-	if (!FileserverUtil::GetAttMask(*this, aSection, KEntrySetAttMask(), setAttMask))
-		{
-		dataOk = EFalse;
-		ERR_PRINTF1(_L("Unknown attribute!"));
-		SetBlockResult(EFail);
-		}
-		
-	//	Reads attributes to be clear from ini file.
-	TUint	clearAttMask = 0;
-	if (!FileserverUtil::GetAttMask(*this, aSection, KEntryClearAttMask(), clearAttMask))
-		{
-		dataOk = EFalse;
-		ERR_PRINTF1(_L("Unknown attribute!"));
-		SetBlockResult(EFail);
-		}
-	//	Reads the time from ini file.
-	TTime	time(0);
-	TPtrC	inputTime;
-	if (GET_OPTIONAL_STRING_PARAMETER(KTime(), aSection, inputTime))
-		{
-		//	Assigns a date and time contained in a descriptor.
-		TInt err = time.Set(inputTime);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("Time set failed, error %d"), err);
-			SetBlockResult(EFail);
-			}
-		}
-
-	//	Reads the name of file or directory from ini file.
-	TPtrC	name;
-	if (!GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		dataOk = EFalse;
-		}
-
-	if ( dataOk )
-		{
-		//	Sets both the attributes and the last modified date and time for a file or directory.
-		TInt	err = iFs->SetEntry(name, time, setAttMask, clearAttMask);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetEntry error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("SetEntry() is successful."));
-			}
-		}
-	}
-
-void CT_FsData::DoCmdReadFileSectionL(const TDesC& aSection)
-	{
-	TBuf<KMaxTestExecuteCommandLength>	tempStore;
-	TBool dataOk = ETrue;
-
-
-	//	Reads the offset, in bytes, from the start of the file where reading is to start.
-	TInt offset = 0;
-	if (!GET_MANDATORY_INT_PARAMETER(KOffset(), aSection, offset))
-		{
-		dataOk = EFalse;
-		}
-
-	//	Reads the number of bytes to be read from the file.
-	TInt lengthRead = 0;
-	if (!GET_MANDATORY_INT_PARAMETER(KLengthRead(), aSection, lengthRead))
-		{
-		dataOk = EFalse;
-		}
-
-	//	Reads the number of bytes to be alocated.
-	TInt lengthBuffer = 0;
-	if (!GET_MANDATORY_INT_PARAMETER(KLengthBuffer(), aSection, lengthBuffer))
-		{
-		dataOk = EFalse;
-		}
-
-	//	Reads the name of file from ini file.
-	TPtrC name;
-	if (!GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		dataOk = EFalse;
-		}
-
-	if ( dataOk )
-		{
-		//	Creates 8-bit heap descriptor.
-		HBufC8*	buffer = NULL;
-		TRAPD (err, buffer = HBufC8::NewL(lengthBuffer));
-		if (err == KErrNone)
-			{
-			//	Pushes descriptor onto the cleanup stack.
-			CleanupStack::PushL(buffer);
-
-			//	Create memory for 16-bit bufer.
-			HBufC*	buffer16 = NULL;
-			TRAP (err, buffer16 = HBufC::NewL(lengthBuffer));
-			if (err != KErrNone)
-				{
-				ERR_PRINTF2(_L("The 16-bit heap descriptor cannot be created, err %d"), err);
-				SetBlockResult(EFail);
-				CleanupStack::PopAndDestroy(buffer);
-				}
-			else
-				{
-				//	Pushes descriptor onto the cleanup stack.
-				CleanupStack::PushL(buffer16);
-
-				//	Reads data from a file without opening it.
-				TPtr8 bufferPtr = buffer->Des();
-				err = iFs->ReadFileSection(name, offset, bufferPtr, lengthRead);
-				if (err != KErrNone)
-					{
-					ERR_PRINTF2(_L("ReadFileSection error %d"), err);
-					SetError(err);
-					}
-				else
-					{
-					//	Writes data from a file.
-					tempStore.Format(_L("The data from a file %S, offset =%d, length_buffer =%d, length_read =%d"), &name, offset, lengthBuffer, lengthRead);
-					INFO_PRINTF1(tempStore);
-					// Converts 8-bit to 16-bit.
-					buffer16->Des().Copy(bufferPtr);
-					TPtr16 bufferPtr16 =  buffer16->Des();
-					INFO_PRINTF2(_L("%S"), &bufferPtr16);
-					}
-
-				//	Clean memory buffer and buffer16
-				CleanupStack::PopAndDestroy(2, buffer); // buffer, buffer16.
-				}
-			}
-		else
-			{
-			ERR_PRINTF2(_L("The 8-bit heap descriptor cannot be created, err %d"), err);
-			SetBlockResult(EFail);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdIsFileOpen(const TDesC& aSection)
-	{
-	//	Reads the name of file from ini file.
-	TPtrC file;
-	if (GET_MANDATORY_STRING_PARAMETER(KFile(), aSection, file))
-		{
-		//	Tests whether a file is open.
-		TBool isOpen;
-		TInt err = iFs->IsFileOpen(file, isOpen);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("IsFileOpen error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			if (isOpen)
-				{
-				INFO_PRINTF2(_L("The File %S is OPEN"), &file);
-				}
-			else
-				{
-				INFO_PRINTF2(_L("The FILE %S is CLOSED"), &file);
-				}
-
-			//	Compare parameter from ini
-			TBool iniIsOpen;
-			if (GET_OPTIONAL_BOOL_PARAMETER(KIsOpen(), aSection, iniIsOpen))
-				{
-				if (isOpen != iniIsOpen)
-					{
-					ERR_PRINTF2(_L("Error compare parameter %S"), &KIsOpen);
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdGetShortName(const TDesC& aSection)
-	{
-	//	Reads the long name of file from ini file.
-	TPtrC longName;
-	if (GET_MANDATORY_STRING_PARAMETER(KLongName(), aSection, longName))
-		{
-		//	Gets the short filename associated with a VFAT long filename.
-		TBuf<KShortNameSize> shortName;
-		TInt err = iFs->GetShortName(longName, shortName);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("GetShortName error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("Short name: %S"), &shortName);
-
-			//	Compares name from ini file and name from function.
-			TPtrC compareName;
-			if (GET_OPTIONAL_STRING_PARAMETER(KShortName(), aSection, compareName))
-				{
-				if (shortName.CompareC(compareName, 0, NULL) != 0)
-					{
-					ERR_PRINTF3(_L("%S != %S"), &shortName, &compareName);
-					SetBlockResult(EFail);
-					}
-				else
-					{
-					INFO_PRINTF3(_L("%S == %S"), &shortName, &compareName);
-					}
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdGetLongName(const TDesC& aSection)
-	{
-	//	Reads the short name of file from ini file.
-	TPtrC shortName;
-	if (GET_MANDATORY_STRING_PARAMETER(KShortName(), aSection, shortName))
-		{
-		//	Gets the long filename associated with a short (8.3) filename.
-		TBuf<KLongNameSize> longName;
-		TInt err = iFs->GetLongName(shortName, longName);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("GetLongName error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("Long name: %S"), &longName);
-
-			//	Compares name from ini file and name from function.
-			TPtrC compareName;
-			if (GET_OPTIONAL_STRING_PARAMETER(KLongName(), aSection, compareName))
-				{
-				if (longName.CompareC(compareName, 0, NULL) != 0)
-					{
-					ERR_PRINTF3(_L("%S != %S"), &longName, &compareName);
-					SetBlockResult(EFail);
-					}
-				else
-					{
-					INFO_PRINTF3(_L("%S == %S"), &longName, &compareName);
-					}
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdIsFileInRom(const TDesC& aSection)
-	{
-	//	Reads the name of file from ini file.
-	TPtrC file;
-	if (GET_MANDATORY_STRING_PARAMETER(KFile(), aSection, file))
-		{
-		//	Gets a pointer to the specified file, if it is in ROM.
-		iIsFileInRom=iFs->IsFileInRom(file);
-		INFO_PRINTF2(_L("Fs->IsFileInRom = 0x%X"), iIsFileInRom);
-
-		TBool	isInROM = (iIsFileInRom!=NULL);
-		if ( isInROM )
-			{
-			INFO_PRINTF2(_L("File %S in ROM"), &file);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("File %S not in ROM"), &file);
-			}
-
-		//	Compare parameter from ini
-		TBool iniIsInROM = FALSE;
-		if (GET_OPTIONAL_BOOL_PARAMETER(KIsInRom(), aSection, iniIsInROM))
-			{
-			if (isInROM != iniIsInROM)
-				{
-				ERR_PRINTF1(_L("Expected result does not match actual"));
-				SetBlockResult(EFail);
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdIsValidName(const TDesC& aSection)
-	{
-	//	Reads the name of file from ini file.
-	TPtrC	name;
-	if (GET_MANDATORY_STRING_PARAMETER(KName(), aSection, name))
-		{
-		TBool	isValid = FALSE;
-		TBool	isBadChar;
-		if (GET_OPTIONAL_BOOL_PARAMETER(KIsBadChar(), aSection, isBadChar))
-			{
-			//	Tests whether a filename and path are syntactically correct.
-			//	badChar = on return, contains any illegal character within name,
-			//	if the path is valid, badChar is blank.
-
-			TText	badChar;
-			isValid = iFs->IsValidName(name, badChar);
-			INFO_PRINTF2(_L("BadChar: %c"), badChar);
-
-			TPtrC	iniBadChar;
-			if (GET_OPTIONAL_STRING_PARAMETER(KBadChar(), aSection, iniBadChar))
-				{
-				TText	expectedBadChar=iniBadChar[0];
-				if (badChar != expectedBadChar)
-					{
-					ERR_PRINTF3(_L("Error compare badchar %c != %c"), badChar, expectedBadChar);
-					SetBlockResult(EFail);
-					}
-				else
-					{
-					INFO_PRINTF3(_L("Badchar's has equal value %c == %c"), badChar, expectedBadChar);
-					}
-				}
-			}
-		else
-			{
-			//	Tests whether a filename and path are syntactically correct.
-			isValid = iFs->IsValidName(name);
-			}
-
-		if (isValid)
-			{
-			INFO_PRINTF2(_L("Name %S is valid"), &name);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("Name %S is not valid"), &name);
-			}
-
-		//	Compare parameter from ini
-		TBool	iniIsValid;
-		if (GET_OPTIONAL_BOOL_PARAMETER(KIsValid(), aSection, iniIsValid))
-			{
-			if (isValid != iniIsValid)
-				{
-				ERR_PRINTF1(_L("Error compare with ini parameter"));
-				SetBlockResult(EFail);
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdSetSessionToPrivate(const TDesC& aSection)
-	{
-	//	Reads the name of drive from ini file.
-	TDriveNumber driveNumber;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("Error read parameter %S"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	else
-		{
-		//	Sets the session path to point to the private path on the specified drive.
-		TInt err = iFs->SetSessionToPrivate(driveNumber);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetSessionToPrivate error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Function DoCmdSetSessionToPrivate() OK"));
-			}
-		}
-	}
-
-void CT_FsData::DoCmdPrivatePath(const TDesC& aSection)
-	{
-	//	Creates the text defining the private path for a process.
-	TBuf<KMaxTestExecuteCommandLength> privatePath;
-	TInt err = iFs->PrivatePath(privatePath);
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("PrivatePath error %d"), err);
-		SetError(err);
-		}
-	else
-		{
-		INFO_PRINTF2(_L("PrivatePath: %S"), &privatePath);
-
-		//	Compares path from ini file and path from function.
-		TPtrC comparePath;
-		if (GET_OPTIONAL_STRING_PARAMETER(KComparePath(), aSection, comparePath))
-			{
-			if (comparePath.CompareC(privatePath, 0, NULL) != 0)
-				{
-				ERR_PRINTF3(_L("%S != %S"), &privatePath, &comparePath);
-				SetBlockResult(EFail);
-				}
-			else
-				{
-				INFO_PRINTF3(_L("%S == %S"), &privatePath, &comparePath);
-				}
-			}
-		}
-	}
-
-void CT_FsData::DoCmdCreatePrivatePath(const TDesC& aSection)
-	{
-	//	Reads the name of drive from ini file.
-	TDriveNumber driveNumber;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("Error read parameter %S"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	else
-		{
-		//	Creates the private path for a process on the specified drive.
-		TInt err = iFs->CreatePrivatePath(driveNumber);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("PrivatePath error %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Function DoCmdCreatePrivatePath() OK"));
-			}
-		}
-	}
-
-TBool CT_FsData::ConvertToSortKey(const TDesC& aSortKeyStr, TUint& aSortKey)
-	{
-	TBool ret = ETrue;
-
-	if (aSortKeyStr == KESortNone)
-		{
-		aSortKey = ESortNone;
-		}
-	else if (aSortKeyStr == KESortByName)
-		{
-		aSortKey = ESortByName;
-		}
-	else if (aSortKeyStr == KESortByExt)
-		{
-		aSortKey = ESortByExt;
-		}
-	else if (aSortKeyStr == KESortBySize)
-		{
-		aSortKey = ESortBySize;
-		}
-	else if (aSortKeyStr == KESortByDate)
-		{
-		aSortKey = ESortByDate;
-		}
-	else if (aSortKeyStr == KESortByUid)
-		{
-		aSortKey = ESortByUid;
-		}
-	else if (aSortKeyStr == KEDirsAnyOrder)
-		{
-		aSortKey = EDirsAnyOrder;
-		}
-	else if (aSortKeyStr == KEDirsFirst)
-		{
-		aSortKey = EDirsFirst;
-		}
-	else if (aSortKeyStr == KEDirsLast)
-		{
-		aSortKey = EDirsLast;
-		}
-	else if (aSortKeyStr == KEAscending)
-		{
-		aSortKey = EAscending;
-		}
-	else if (aSortKeyStr == KEDescending)
-		{
-		aSortKey = EDescending;
-		}
-	else if (aSortKeyStr == KEDirDescending)
-		{
-		aSortKey = EDirDescending;
-		}
-	else if (aSortKeyStr.Match((_L("*|*"))) != KErrNotFound)
-		{
-		TUint tmpSortKey;
-
-		TInt location = aSortKeyStr.Match(_L("*|*"));
-		//Converting Left part of the data
-		TPtrC left = aSortKeyStr.Left(location);
-		if (ConvertToSortKey(left, tmpSortKey))
-			{
-			aSortKey = tmpSortKey;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-
-		//Converting right data can be with another "|"
-		TPtrC right = aSortKeyStr.Mid(location + 1);
-
-		if (ConvertToSortKey(right, tmpSortKey))
-			{
-			aSortKey = aSortKey | tmpSortKey;
-			}
-		else
-			{
-			ret = EFalse;
-			}
-		}
-	else
-		{
-		ret = EFalse;
-		}
-
-	return ret;
-	}
-
-const TDesC& CT_FsData::ConvertToStrAttMask(TUint aAttMask)
-	{
-	switch(aAttMask)
-		{
-	case KEntryAttReadOnly:
-		return KEntryAttReadOnlyStr;
-	case KEntryAttHidden:
-		return KEntryAttHiddenStr;
-	case KEntryAttSystem:
-		return KEntryAttSystemStr;
-	case KEntryAttVolume:
-		return KEntryAttVolumeStr;
-	case KEntryAttDir:
-		return KEntryAttDirStr;
-	case KEntryAttArchive:
-		return KEntryAttArchiveStr;
-	case KEntryAttXIP:
-		return KEntryAttXIPStr;
-	default:
-		break;
-		};
-	return KEntryAttUnknown;
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_FsDataMounts.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1315 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_FsData
-*/
-
-//	User includes
-#include "T_FsData.h"
-
-//	EPOC includes
-#include <f32fsys.h>
-
-/*@{*/
-/// Enumerations
-_LIT(KDriveA,							"EDriveA");
-_LIT(KDriveB,							"EDriveB");
-_LIT(KDriveC,							"EDriveC");
-_LIT(KDriveD,							"EDriveD");
-_LIT(KDriveE,							"EDriveE");
-_LIT(KDriveF,							"EDriveF");
-_LIT(KDriveG,							"EDriveG");
-_LIT(KDriveH,							"EDriveH");
-_LIT(KDriveI,							"EDriveI");
-_LIT(KDriveJ,							"EDriveJ");
-_LIT(KDriveK,							"EDriveK");
-_LIT(KDriveL,							"EDriveL");
-_LIT(KDriveM,							"EDriveM");
-_LIT(KDriveN,							"EDriveN");
-_LIT(KDriveO,							"EDriveO");
-_LIT(KDriveP,							"EDriveP");
-_LIT(KDriveQ,							"EDriveQ");
-_LIT(KDriveR,							"EDriveR");
-_LIT(KDriveS,							"EDriveS");
-_LIT(KDriveT,							"EDriveT");
-_LIT(KDriveU,							"EDriveU");
-_LIT(KDriveV,							"EDriveV");
-_LIT(KDriveW,							"EDriveW");
-_LIT(KDriveX,							"EDriveX");
-_LIT(KDriveY,							"EDriveY");
-_LIT(KDriveZ,							"EDriveZ");
-
-_LIT(KWriteMappingsAndSet,				"EWriteMappingsAndSet");
-_LIT(KWriteMappingsNoSet,				"EWriteMappingsNoSet");
-_LIT(KSwapIntMappingAndSet,				"ESwapIntMappingAndSet");
-
-
-///	Parameters
-_LIT(KDrive,							"drive");
-_LIT(KDriveMappingElement,				"drive_mapping_element_");
-_LIT(KDriveMappingSize,					"drive_mapping_size");
-_LIT(KDriveMappingOperation,			"drive_mapping_operation");
-_LIT(KFileName,							"file_name");
-_LIT(KFileSystemName,					"file_system_name");
-_LIT(KNewFileSystemName,				"new_file_system_name");
-_LIT(KFlags,							"flags");
-_LIT(KIsSync,							"is_sync");
-_LIT(KExtensionName,					"extension_name");
-_LIT(KPosition,							"position");
-_LIT(KMode,								"mode");
-_LIT(KAll,								"all");
-_LIT(KCommandNum,						"command_num");
-_LIT(KSaveInInstance,					"save_in_instance");
-_LIT(KLocalDrive,						"local_drive");
-_LIT(KCompositeDrive,					"composite_drive");
-_LIT(KIsMountSuccess,					"is_mount_success");
-_LIT(KParam1,							"param1");
-_LIT(KParam2,							"param2");
-_LIT(KIndex,							"index");
-_LIT(KSubTypeName,						"sub_type_name");
-
-
-///	Commands
-_LIT(KCmdAddFileSystem,					"AddFileSystem");
-_LIT(KCmdDismountFileSystem,			"DismountFileSystem");
-_LIT(KCmdFileSystemName,				"FileSystemName");
-_LIT(KCmdMountFileSystem,				"MountFileSystem");
-_LIT(KCmdMountFileSystemAndScan,		"MountFileSystemAndScan");
-_LIT(KCmdRemountDrive,					"RemountDrive");
-_LIT(KCmdRemoveFileSystem,				"RemoveFileSystem");
-_LIT(KCmdAddExtension,					"AddExtension");
-_LIT(KCmdMountExtension,				"MountExtension");
-_LIT(KCmdRemoveExtension,				"RemoveExtension");
-_LIT(KCmdExtensionName,					"ExtensionName");
-_LIT(KCmdAddCompositeMount,				"AddCompositeMount");
-_LIT(KCmdAllowDismount,					"AllowDismount");
-_LIT(KCmdNotifyDismount,				"NotifyDismount");
-_LIT(KCmdNotifyDismountCancel,			"NotifyDismountCancel");
-_LIT(KCmdStartupInitComplete,			"StartupInitComplete");
-_LIT(KCmdSwapFileSystem,				"SwapFileSystem");
-_LIT(KCmdSetStartupConfiguration,		"SetStartupConfiguration");
-_LIT(KCmdDismountExtension,				"DismountExtension");
-_LIT(KCmdSetLocalDriveMapping,			"SetLocalDriveMapping");
-_LIT(KCmdFinaliseDrives,				"FinaliseDrives");
-_LIT(KCmdFileSystemSubType,				"FileSystemSubType");
-/*@}*/
-
-
-TBool CT_FsData::DoCommandMountsL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
-/**
- * Process a mounts related command read from the ini file
- *
- * @param aCommand	the command to process
- * @param aSection		the entry in the ini file requiring the command to be processed
- *
- * @return ETrue if the command is processed
- */
-	{
-	TBool retVal = ETrue;
-	
-	if (aCommand == KCmdAddFileSystem)
-		{
-		DoCmdAddFileSystem(aSection);
-		}
-	else if (aCommand == KCmdDismountFileSystem)
-		{
-		DoCmdDismountFileSystem(aSection);
-		}
-	else if (aCommand == KCmdFileSystemName)
-		{
-		DoCmdFileSystemName(aSection);
-		}
-	else if (aCommand == KCmdMountFileSystem)
-		{
-		DoCmdMountFileSystem(aSection);
-		}
-	else if (aCommand == KCmdMountFileSystemAndScan)
-		{
-		DoCmdMountFileSystemAndScan(aSection);
-		}
-	else if (aCommand == KCmdRemoveFileSystem)
-		{
-		DoCmdRemoveFileSystem(aSection);
-		}
-	else if (aCommand == KCmdRemountDrive)
-		{
-		DoCmdRemountDriveL(aSection);
-		}
-	else if (aCommand == KCmdAddExtension)
-		{
-		DoCmdAddExtension(aSection);
-		}
-	else if (aCommand == KCmdRemoveExtension)
-		{
-		DoCmdRemoveExtension(aSection);
-		}
-	else if (aCommand == KCmdExtensionName)
-		{
-		DoCmdExtensionName(aSection);
-		}
-	else if (aCommand == KCmdMountExtension)
-		{
-		DoCmdMountExtension(aSection);
-		}
-	else if (aCommand == KCmdAllowDismount)
-		{
-		DoCmdAllowDismount(aSection);
-		}
-	else if (aCommand == KCmdNotifyDismount)
-		{
-		DoCmdNotifyDismountL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdNotifyDismountCancel)
-		{
-		DoCmdNotifyDismountCancel(aSection);
-		}
-	else if (aCommand == KCmdStartupInitComplete)
-		{
-		DoCmdStartupInitCompleteL(aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdSwapFileSystem)
-		{
-		DoCmdSwapFileSystem(aSection);
-		}
-	else if (aCommand == KCmdSetStartupConfiguration)
-		{
-		DoCmdSetStartupConfigurationL(aSection);
-		}
-	else if (aCommand == KCmdFinaliseDrives)
-		{
-		DoCmdFinaliseDrives();
-		}
-    else if (aCommand == KCmdAddCompositeMount)
-		{
-		DoCmdAddCompositeMount(aSection);
-		}
-    else if (aCommand == KCmdDismountExtension)
-		{
-		DoCmdDismountExtension(aSection);
-		}
-	else if (aCommand == KCmdSetLocalDriveMapping)
-		{
-		DoCmdSetLocalDriveMappingL(aSection);
-		}
-    else if (aCommand == KCmdFileSystemSubType)
-		{
-		DoCmdFileSystemSubType(aSection);
-		}
- 	else
-		{
-		retVal = EFalse;
-		}
-
-	return retVal;
-	}
-
-
-void CT_FsData::DoCmdAddFileSystem(const TDesC& aSection)
-/** Calls RFs::AddFileSystem() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::AddFileSystem()"));
-
-	// get file name from parameters
-	TPtrC	fileName;
-	if ( GET_MANDATORY_STRING_PARAMETER(KFileName(), aSection, fileName))
-		{
-		// call AddFileSystem()
-		TInt	err = iFs->AddFileSystem(fileName);
-
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("AddFileSystem error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdMountFileSystem(const TDesC& aSection)
-/** Calls RFs::MountFileSystem() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::MountFileSystem()"));
-
-	TBool dataOk = ETrue;
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	// get file system name from parameters
-	TPtrC	fileSystemName;
-	if ( !GET_OPTIONAL_STRING_PARAMETER(KFileSystemName(), aSection, fileSystemName) )
-		{
-		fileSystemName.Set(iFileSystemName);
-		}
-
-	if(dataOk)
-		{
-		// get file system name from parameters
-		TBool	isSync = EFalse;
-		TInt	err = KErrNone;
-
-		TPtrC	extensionName;
-		TBool	hasExtensionName=GET_OPTIONAL_STRING_PARAMETER(KExtensionName(), aSection, extensionName);
-		if (GET_OPTIONAL_BOOL_PARAMETER(KIsSync(), aSection, isSync))
-			{
-			if ( hasExtensionName )
-				{
-				// call MountFileSystem()
-				INFO_PRINTF5(_L("MountFileSystem(%S, %S, %d, %d)"), &fileSystemName, &extensionName, driveNumber, isSync);
-				err = iFs->MountFileSystem(fileSystemName, extensionName, driveNumber, isSync);
-				}
-			else
-				{
-				// call MountFileSystem()
-				INFO_PRINTF4(_L("MountFileSystem(%S, %d, %d)"), &fileSystemName, driveNumber, isSync);
-				err = iFs->MountFileSystem(fileSystemName, driveNumber, isSync);
-				}
-			}
-		else
-			{
-			if ( hasExtensionName )
-				{
-				// call MountFileSystem()
-				INFO_PRINTF4(_L("MountFileSystem(%S, %S, %d)"), &fileSystemName, &extensionName, driveNumber);
-				err = iFs->MountFileSystem(fileSystemName, extensionName, driveNumber);
-				}
-			else
-				{
-				// call MountFileSystem()
-				INFO_PRINTF3(_L("MountFileSystem(%S, %d)"), &fileSystemName, driveNumber);
-				err = iFs->MountFileSystem(fileSystemName, driveNumber);
-				}
-			}
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("MountFileSystem error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdMountFileSystemAndScan(const TDesC& aSection)
-/** Calls RFs::MountFileSystemAndScan() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::MountFileSystemAndScan()"));
-
-	TBool dataOk = ETrue;
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	// get file system name from parameters
-	TPtrC	fileSystemName;
-	if ( !GET_OPTIONAL_STRING_PARAMETER(KFileSystemName(), aSection, fileSystemName) )
-		{
-		fileSystemName.Set(iFileSystemName);
-		}
-
-	if(dataOk)
-		{
-		TInt	err=KErrNone;
-		TBool	isMountSuccess = EFalse;
-		// get extension name from parameters
-		TPtrC	extensionName;
-		if (GET_OPTIONAL_STRING_PARAMETER(KExtensionName(), aSection, extensionName))
-			{
-			//call MountFileSystemAndScan
-			INFO_PRINTF4(_L("MountFileSystemAndScan(%S, %S, %d, isMountSuccess)"), &fileSystemName, &extensionName, driveNumber);
-			err = iFs->MountFileSystemAndScan(fileSystemName, extensionName, driveNumber, isMountSuccess);
-			}
-		else
-			{
-			//call MountFileSystemAndScan
-			INFO_PRINTF3(_L("MountFileSystemAndScan(%S, %d, isMountSuccess)"), &fileSystemName, driveNumber);
-			err = iFs->MountFileSystemAndScan(fileSystemName, driveNumber, isMountSuccess);
-			}
-
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("MountFileSystemAndScan error: %d"), err);
-			SetError(err);
-			}
-
-		//Only for info
-		if(isMountSuccess)
-			{
-			INFO_PRINTF1(_L("MountFileSystemAndScan() successfully mounted"));
-			}
-		else
-			{
-			INFO_PRINTF1(_L("MountFileSystemAndScan() not mounted"));
-			}
-
-		//check if mount was successful
-		TBool	expected = EFalse;
-		if ( GET_OPTIONAL_BOOL_PARAMETER(KIsMountSuccess(), aSection, expected) )
-			{
-			if ( isMountSuccess!=expected )
-				{
-				ERR_PRINTF1(_L("MountFileSystemAndScan() does not match expected value"));
-				SetBlockResult(EFail);
-				}
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdDismountFileSystem(const TDesC& aSection)
-/** Calls RFs::DismountFileSystem() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::DismountFileSystem()"));
-
-	TBool dataOk = ETrue;
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-	// get file system name from parameters
-	TPtrC	fileSystemName;
-	if (!GET_OPTIONAL_STRING_PARAMETER(KFileSystemName(), aSection, fileSystemName))
-		{
-		fileSystemName.Set(iFileSystemName);
-		}
-
-	if(dataOk)
-		{
-		// call DismountFileSystem()
-		TInt err = iFs->DismountFileSystem(fileSystemName, driveNumber);
-
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("DismountFileSystem error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdRemoveFileSystem(const TDesC& aSection)
-/** Calls RFs::RemoveFileSystem() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::RemoveFileSystem()"));
-
-	// get file name from parameters
-	TPtrC	fileSystemName;
-	if ( !GET_OPTIONAL_STRING_PARAMETER(KFileSystemName(), aSection, fileSystemName) )
-		{
-		fileSystemName.Set(iFileSystemName);
-		}
-
-	// call RemoveFileSystem()
-	TInt err = iFs->RemoveFileSystem(fileSystemName);
-
-	// check error code
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("RemoveFileSystem error: %d"), err);
-		SetError(err);
-		}
-	}
-
-
-void CT_FsData::DoCmdFileSystemName(const TDesC& aSection)
-/** Calls RFs::FileSystemName() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::FileSystemName()"));
-
-	// get a flag if we need to remember the file system name in an instance variable
-	TBool	save=ETrue;
-	GET_OPTIONAL_BOOL_PARAMETER(KSaveInInstance(), aSection, save);
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	else
-		{
-		// call FileSystemName()
-		TFullName	fileSystemName;
-		TInt		err = iFs->FileSystemName(fileSystemName, driveNumber);
-		INFO_PRINTF2(_L("File system name: %S"), &fileSystemName);
-
-		// check error code
-		if (err == KErrNone)
-			{
-			if ( save )
-				{
-				iFileSystemName=fileSystemName;
-				}
-			}
-		else
-			{
-			ERR_PRINTF2(_L("FileSystemName error: %d"), err);
-			SetError(err);
-			}
-
-		//Check expected result
-		TPtrC	fsNameExpect;
-		if (GET_OPTIONAL_STRING_PARAMETER(KFileSystemName(), aSection, fsNameExpect))
-			{
-			if ( fsNameExpect != fileSystemName)
-				{
-				ERR_PRINTF1(_L("File system name != expected name"));
-				SetBlockResult(EFail);
-				}
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdAddExtension(const TDesC& aSection)
-/** Calls RFs::AddExtension() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::AddExtension()"));
-	TPtrC fileName;
-	if ( GET_MANDATORY_STRING_PARAMETER(KFileName(), aSection, fileName) )
-		{
-		//call AddExtension
-		TInt err = iFs->AddExtension(fileName);
-
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("AddExtension error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdMountExtension(const TDesC& aSection)
-/** Calls RFs::MountExtension() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::MountExtension()"));
-
-	TBool dataOk = ETrue;
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	// get extension name from parameters
-	TPtrC extensionName;
-	if (!GET_MANDATORY_STRING_PARAMETER(KExtensionName(), aSection, extensionName))
-		{
-		dataOk = EFalse;
-		}
-
-	if(dataOk)
-		{
-		TInt	err = iFs->MountExtension(extensionName, driveNumber);
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("MountExtension error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdDismountExtension(const TDesC& aSection)
-/** Calls RFs::DismountExtension() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::DismountExtension()"));
-
-	TBool dataOk = ETrue;
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	TPtrC extensionName;
-	if (!GET_MANDATORY_STRING_PARAMETER(KExtensionName(), aSection, extensionName))
-		{
-		dataOk = EFalse;
-		}
-	if(dataOk)
-		{
-		//call DismountExtension
-		TInt err = iFs->DismountExtension(extensionName, driveNumber);
-
-		//check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("DismountExtension error: %d"), err);
-			SetError(err);
-			}
-		}
-
-	}
-
-
-void CT_FsData::DoCmdRemoveExtension(const TDesC& aSection)
-/** Calls RFs::RemoveExtension() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::RemoveExtension()"));
-
-	TPtrC extensionName;
-	if (GET_MANDATORY_STRING_PARAMETER(KExtensionName(), aSection, extensionName))
-		{
-		//call RemoveExtension
-		TInt err = iFs->RemoveExtension(extensionName);
-
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("RemoveExtension error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdExtensionName(const TDesC& aSection)
-/** Calls RFs::ExtensionName() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::ExtensionName()"));
-
-	TBool dataOk = ETrue;
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-	//get position of the extension in the extension hierarchy.
-	TInt pos = 0;
-	if (!GET_MANDATORY_INT_PARAMETER(KPosition(), aSection, pos))
-		{
-		dataOk = EFalse;
-		}
-
-	if(dataOk)
-		{
-
-		TInt err = iFs->ExtensionName(iExtensionName, driveNumber, pos);
-
-		if(err == KErrNone)
-			{
-			TPtrC extNameExpect;
-			if (GET_OPTIONAL_STRING_PARAMETER(KExtensionName(), aSection, extNameExpect))
-				{
-				if(extNameExpect != iExtensionName)
-					{
-					ERR_PRINTF3(_L("ExtensionName: %S != %S expected name"), &iExtensionName, &extNameExpect);
-					SetBlockResult(EFail);
-					}
-				else
-					{
-					INFO_PRINTF2(_L("ExtensionName: %S"), &iExtensionName);
-					}
-				}
-			else
-				{
-				INFO_PRINTF2(_L("ExtensionName: %S"), &iExtensionName);
-				}
-			}
-		// check error code
-		else
-			{
-			ERR_PRINTF2(_L("ExtensionName error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdRemountDriveL(const TDesC& aSection)
-/** Calls RFs::RemountDrive() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::RemountDrive()"));
-	TBool	dataOk = ETrue;
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	// get flags from parameters can be in hex(0x00000001) or in decimal(1)
-	TUint	flags = 0;
-	TInt	tempVal = 0;
-	
-	if(GetHexFromConfig(aSection, KFlags, tempVal))
-		{
-		flags = tempVal;
-		}
-	else if(GET_OPTIONAL_INT_PARAMETER(KFlags(), aSection, tempVal))
-		{
-		flags = tempVal;
-		}
-	else
-		{
-		ERR_PRINTF2(_L("No parameter %S"), &KFlags());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	RFile	file;
-	HBufC8*	fileDataBuff = NULL;
-
-	// get file name from parameters
-	TPtrC	fileName;
-	TBool	useMountInfo = GET_OPTIONAL_STRING_PARAMETER(KFileName(), aSection, fileName);
-	if ( useMountInfo )
-		{
-		// open file
-		TInt error = file.Open(FileServer(), fileName, EFileRead | EFileShareAny);
-		if(error == KErrNone)
-			{
-			CleanupClosePushL(file);
-			INFO_PRINTF1(_L("File Opened."));
-			// get size
-			TInt	size = 0;
-			error = file.Size(size);
-			INFO_PRINTF2(_L("File Size=%d."), size);
-			if(error == KErrNone)
-				{
-				// read file
-				fileDataBuff = HBufC8::NewL(size);
-				INFO_PRINTF1(_L("Buffer created."));
-
-				CleanupStack::PushL(fileDataBuff);
-				TPtr8	fileData = fileDataBuff->Des();
-				error = file.Read(fileData);
-				if(error != KErrNone)
-					{
-					ERR_PRINTF2(_L("Reading File, Error: %d"), error);
-					dataOk = EFalse;
-					SetBlockResult(EFail);
-					}
-				}
-			else
-				{
-				ERR_PRINTF2(_L("File Size, Error: %d."), error);
-				dataOk = EFalse;
-				SetBlockResult(EFail);
-				}
-			}
-		else
-			{
-			ERR_PRINTF2(_L("File Open, Error: %d"), error);
-			dataOk = EFalse;
-			SetBlockResult(EFail);
-			}
-		}
-
-	if ( dataOk )
-		{
-		// call RemountDrive()
-		TInt err = iFs->RemountDrive(driveNumber, fileDataBuff, flags);
-		INFO_PRINTF2(_L("RemountDrive Flags: %u"), flags);
-
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("RemountDrive error: %d"), err);
-			SetError(err);
-			}
-		}
-
-	// cleanup if mountInfo was used
-	if (useMountInfo)
-		{
-		CleanupStack::PopAndDestroy(2, &file); // file, fileDataBuff
-		}
-
-	}
-
-
-void CT_FsData::DoCmdNotifyDismountL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-/** Calls RFs::NotifyDismount() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::NotifyDismount()"));
-
-	TNotifyDismountMode mode = EFsDismountRegisterClient;
-	TPtrC modeStr;
-	//get NotifyDismountMode from parameters
-	if(GET_MANDATORY_STRING_PARAMETER(KMode(), aSection, modeStr))
-		{
-		if(modeStr == _L("EFsDismountRegisterClient"))
-			{
-			mode = EFsDismountRegisterClient;
-			}
-		else if(modeStr == _L("EFsDismountNotifyClients"))
-			{
-			mode = EFsDismountNotifyClients;
-			}
-		else if(modeStr == _L("EFsDismountForceDismount"))
-			{
-			mode = EFsDismountForceDismount;
-			}
-		else
-			{
-			TInt modeNumber;
-			if(GET_OPTIONAL_INT_PARAMETER(KMode, aSection, modeNumber))
-				{
-				mode = (TNotifyDismountMode)modeNumber;
-				}
-			else
-				{
-				ERR_PRINTF3(_L("NotifyDismount() incorrect parameter %S in %S"), &modeStr, &KMode());
-				SetBlockResult(EFail);
-				}
-			}
-		}
-
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	else
-		{
-		// call NotifyDismount()
-		CActiveCallback*	active = CActiveCallback::NewLC(*this);
-		iNotifyDismount.AppendL(active);
-		CleanupStack::Pop(active);
-		
-		iFs->NotifyDismount(driveNumber, active->iStatus, mode);
-		active->Activate(aAsyncErrorIndex);
-		IncOutstanding();
-		}
-	}
-
-
-void CT_FsData::DoCmdNotifyDismountCancel(const TDesC& aSection)
-/** Calls RFs::NotifyDismountCancel() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::NotifyDismountCancel()"));
-
-	TBool all = ETrue;
-
-	if(GET_MANDATORY_BOOL_PARAMETER(KAll(), aSection, all))
-		{
-		if(all)
-			{
-			//Cancels all outstanding requests.
-			iFs->NotifyDismountCancel();
-			INFO_PRINTF1(_L("NotifyDismountCancel()"));
-			}
-		else
-			{
-			// Cancels a specific outstanding request
-			TInt	index=0;
-			GET_OPTIONAL_INT_PARAMETER(KIndex, aSection, index);
-
-			//Cancels a specific outstanding request
-			iFs->NotifyDismountCancel(iNotifyDismount[index]->iStatus);
-			INFO_PRINTF1(_L("NotifyDismountCancel(TRequestStatus)"));
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdAllowDismount(const TDesC& aSection)
-/** Calls RFs::AllowDismount() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::AllowDismount()"));
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if(!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	else
-		{
-		//call AllowDismount
-		TInt err = iFs->AllowDismount(driveNumber);
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("AllowDismount error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-
-void CT_FsData::DoCmdSetStartupConfigurationL(const TDesC& aSection)
-/** Calls RFs::SetStartupConfiguration() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::SetStartupConfiguration()"));
-
-	//get Command from parameters
-	TPtrC commandNum;
-	TStartupConfigurationCmd configCommand = ELoaderPriority;
-	if(GET_MANDATORY_STRING_PARAMETER(KCommandNum(), aSection, commandNum))
-		{
-		//Converting from string to TStartupConfigurationCmd
-		if(commandNum == _L("ELoaderPriority"))
-			{
-			configCommand = ELoaderPriority;
-			}
-        else if(commandNum == _L("ESetRugged"))
-			{
-			configCommand = ESetRugged;
-			}
-		else if(commandNum == _L("EMaxStartupConfigurationCmd"))
-			{
-			configCommand = EMaxStartupConfigurationCmd;
-			}
-		TAny* param1 = NULL;
-		TPtrC name;
-		if(GET_OPTIONAL_STRING_PARAMETER(KParam1(), aSection, name))
-			{
-			param1 = GetDataObjectL(name);
-			}
-		TAny* param2 = NULL;
-
-		if(GET_OPTIONAL_STRING_PARAMETER(KParam2(), aSection, name))
-			{		
-			param2 = GetDataObjectL(name);
-			}
-		//call SetStartupConfiguration
-		TInt err = iFs->SetStartupConfiguration(configCommand, param1, param2);
-		INFO_PRINTF2(_L("RFs::SetStartupConfiguration() %S"), &commandNum);
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SetStartupConfiguration() error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-
-void CT_FsData::DoCmdAddCompositeMount(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::AddCompositeMount()"));
-
-	TBool dataOk = ETrue;
-
-	// get drive number from parameters
-	TDriveNumber	localDriveToMount = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KLocalDrive(), localDriveToMount))
-		{
-		ERR_PRINTF2(_L("No %S"), &KLocalDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	// get composite drive number from parameters
-	TDriveNumber	compositeDrive = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KCompositeDrive(), compositeDrive))
-		{
-		ERR_PRINTF2(_L("No %S"), &KCompositeDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	// 	get Sync from parameters
-	TBool	sync = EFalse;
-	if(!GET_MANDATORY_BOOL_PARAMETER(KIsSync(), aSection, sync))
-		{
-		dataOk = EFalse;
-		}
-
-	// get fileSystemName from parameters
-	TPtrC	fileSystemName;
-	if ( !GET_OPTIONAL_STRING_PARAMETER(KFileSystemName(), aSection, fileSystemName) )
-		{
-		fileSystemName.Set(iFileSystemName);
-		}
-
-	if(dataOk)
-		{
-		TInt	err = iFs->AddCompositeMount(fileSystemName, localDriveToMount, compositeDrive, sync);
-		INFO_PRINTF1(_L("Calls RFs::AddCompositeMount()"));
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("AddCompositeMount() error: %d"), err);
-			SetError(err);
-			}
-		}
-	}
-void CT_FsData::DoCmdStartupInitCompleteL(TInt aAsyncErrorIndex)
-/** Calls RFs::StartupInitComplete() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::StartupInitComplete()"));
-
-	// call StartupInitComplete()
-	CActiveCallback*	active = CActiveCallback::NewLC(*this);
-	iStartupInitComplete.AppendL(active);
-	CleanupStack::Pop(active);
-		
-	iFs->StartupInitComplete(active->iStatus);
-	active->Activate(aAsyncErrorIndex);
-	IncOutstanding();
-	}
-
-
-void CT_FsData::DoCmdFinaliseDrives()
-/** Calls RFs::FinaliseDrives() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::FinaliseDrives()"));
-
-	TInt err = iFs->FinaliseDrives();
-
-	// check error code
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("FinaliseDrives() error: %d"), err);
-		SetError(err);
-		}
-	}
-
-
-void CT_FsData::DoCmdSetLocalDriveMappingL(const TDesC& aSection)
-/** Calls RFs::SetLocalDriveMapping() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::SetLocalDriveMapping()"));
-
-	// get operation from config	
-	TLocalDriveMappingInfo::TDrvMapOperation operation = TLocalDriveMappingInfo::EWriteMappingsAndSet;
-	if (!GetDrvMapOperationFromConfig(aSection, KDriveMappingOperation(), operation))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDriveMappingOperation());
-		SetBlockResult(EFail);
-		}
-		
-	// create an info buffer and set the operation
-	TLocalDriveMappingInfoBuf infoBuf;
-	TLocalDriveMappingInfo& info = infoBuf();
-	info.iOperation = operation;
-
-	// get drive mapping array from config
-	TInt driveMappingSize = 0;
-	if (GET_MANDATORY_INT_PARAMETER(KDriveMappingSize(), aSection, driveMappingSize))
-		{
-		for(TInt i = 0; i < driveMappingSize; i++)
-			{
-			TBuf<KBufferStringLength> tmpBuff;
-
-			tmpBuff.Append(KDriveMappingElement);
-			tmpBuff.AppendNum(i);
-
-			TDriveNumber driveNumber;
-			if (GetDriveNumberFromConfig(aSection, tmpBuff, driveNumber))
-				{
-				info.iDriveMapping[i] = driveNumber;
-				INFO_PRINTF3(_L("Drive mapping element[%d] = %d"), i, driveNumber);
-				}
-			else
-				{
-				ERR_PRINTF2(_L("No %S"), &tmpBuff);
-				SetBlockResult(EFail);
-				}
-			}
-		}
-
-	// call SetLocalDriveMapping()
-	TInt err = iFs->SetLocalDriveMapping(infoBuf);
-
-	// check error code
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("SetLocalDriveMapping() error: %d"), err);
-		SetError(err);
-		}
-	}
-
-
-void CT_FsData::DoCmdSwapFileSystem(const TDesC& aSection)
-/** Calls RFs::SwapFileSystem() */
-	{
-	INFO_PRINTF1(_L("Calls RFs::SwapFileSystem()"));
-
-	//get OldFileSystemName
-	// get fileSystemName from parameters
-	TPtrC	fileSystemName;
-	if ( !GET_OPTIONAL_STRING_PARAMETER(KFileSystemName(), aSection, fileSystemName) )
-		{
-		fileSystemName.Set(iFileSystemName);
-		}
-
-	//get NewFileSystemName
-	TPtrC newFsName;
-	if(!GET_OPTIONAL_STRING_PARAMETER(KNewFileSystemName(), aSection, newFsName))
-		{
-		newFsName.Set(iFileSystemName);
-		}
-
-	// get drive number from parameters
-	TBool dataOk = ETrue;
-	TDriveNumber	driveNumber = EDriveA;
-	if (!GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		dataOk = EFalse;
-		}
-
-	if(dataOk)
-		{
-		TInt err = iFs->SwapFileSystem(fileSystemName, newFsName, driveNumber);
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("SwapFileSystem() error: %d"), err);
-			SetError(err);
-			}
-		}
-
-	}
-
-void CT_FsData::DoCmdFileSystemSubType(const TDesC& aSection)
-	{
-	INFO_PRINTF1(_L("Calls RFs::FileSystemSubType()"));
-
-	// get drive number from parameters
-	TDriveNumber	driveNumber = EDriveA;
-	if (GetDriveNumberFromConfig(aSection, KDrive(), driveNumber))
-		{
-		TFSName subTypeName;
-		TInt err = iFs->FileSystemSubType(driveNumber, subTypeName);
-		// check error code
-		if (err != KErrNone)
-			{
-			ERR_PRINTF2(_L("FileSystemSubType() error: %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF2(_L("FileSystemSubType() subTypeName = %S"), &subTypeName);
-			//Check expected result
-			TPtrC	subTypeNameExpect;
-			if (GET_OPTIONAL_STRING_PARAMETER(KSubTypeName(), aSection, subTypeNameExpect))
-				{
-				if ( subTypeNameExpect != subTypeName)
-					{
-					ERR_PRINTF1(_L("File system name != expected name"));
-					SetBlockResult(EFail);
-					}
-				}
-			}
-		}
-	else
-		{
-		ERR_PRINTF2(_L("No %S"), &KDrive());
-		SetBlockResult(EFail);
-		}
-	}
-
-TBool CT_FsData::GetDriveNumberFromConfig(const TDesC& aSection, const TDesC& aParameterName, TDriveNumber& aDriveNumber)
-/** Reads drive number from INI-file */
-	{
-	// Read drive number from INI file
-	TPtrC	driveNumberStr;
-	TBool	ret = GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, driveNumberStr);
-	if (ret)
-		{
-		if (driveNumberStr == KDriveA)
-			{
-			aDriveNumber = EDriveA;
-			}
-		else if (driveNumberStr == KDriveB)
-			{
-			aDriveNumber = EDriveB;
-			}
-		else if (driveNumberStr == KDriveC)
-			{
-			aDriveNumber = EDriveC;
-			}
-		else if (driveNumberStr == KDriveD)
-			{
-			aDriveNumber = EDriveD;
-			}
-		else if (driveNumberStr == KDriveE)
-			{
-			aDriveNumber = EDriveE;
-			}
-		else if (driveNumberStr == KDriveF)
-			{
-			aDriveNumber = EDriveF;
-			}
-		else if (driveNumberStr == KDriveG)
-			{
-			aDriveNumber = EDriveG;
-			}
-		else if (driveNumberStr == KDriveH)
-			{
-			aDriveNumber = EDriveH;
-			}
-		else if (driveNumberStr == KDriveI)
-			{
-			aDriveNumber = EDriveI;
-			}
-		else if (driveNumberStr == KDriveJ)
-			{
-			aDriveNumber = EDriveJ;
-			}
-		else if (driveNumberStr == KDriveK)
-			{
-			aDriveNumber = EDriveK;
-			}
-		else if (driveNumberStr == KDriveL)
-			{
-			aDriveNumber = EDriveL;
-			}
-		else if (driveNumberStr == KDriveM)
-			{
-			aDriveNumber = EDriveM;
-			}
-		else if (driveNumberStr == KDriveN)
-			{
-			aDriveNumber = EDriveN;
-			}
-		else if (driveNumberStr == KDriveO)
-			{
-			aDriveNumber = EDriveO;
-			}
-		else if (driveNumberStr == KDriveP) // Sorry, it's a bit long. But looks nice!
-			{
-			aDriveNumber = EDriveP;
-			}
-		else if (driveNumberStr == KDriveQ)
-			{
-			aDriveNumber = EDriveQ;
-			}
-		else if (driveNumberStr == KDriveR)
-			{
-			aDriveNumber = EDriveR;
-			}
-		else if (driveNumberStr == KDriveS)
-			{
-			aDriveNumber = EDriveS;
-			}
-		else if (driveNumberStr == KDriveT)
-			{
-			aDriveNumber = EDriveT;
-			}
-		else if (driveNumberStr == KDriveU)
-			{
-			aDriveNumber = EDriveU;
-			}
-		else if (driveNumberStr == KDriveV)
-			{
-			aDriveNumber = EDriveV;
-			}
-		else if (driveNumberStr == KDriveW)
-			{
-			aDriveNumber = EDriveW;
-			}
-		else if (driveNumberStr == KDriveX)
-			{
-			aDriveNumber = EDriveX;
-			}
-		else if (driveNumberStr == KDriveY)
-			{
-			aDriveNumber = EDriveY;
-			}
-		else if (driveNumberStr == KDriveZ)
-			{
-			aDriveNumber = EDriveZ;
-			}
-		else
-			{
-			TInt driveNumber = 0;
-			ret = GET_OPTIONAL_INT_PARAMETER(aParameterName, aSection, driveNumber);
-			if (ret)
-				{
-				aDriveNumber = (TDriveNumber) driveNumber;
-				}
-			}
-		}
-
-	return ret;
-	}
-
-
-TBool CT_FsData::GetDrvMapOperationFromConfig(const TDesC& aSection, const TDesC& aParameterName, TLocalDriveMappingInfo::TDrvMapOperation& aOperation)
-/** Reads drive mapping operation name from INI-file */
-	{
-	// Read drives mapping operation name from INI file
-	TPtrC operationStr;
-	TBool ret = GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, operationStr);
-	if (ret)
-		{
-		if (operationStr == KWriteMappingsAndSet)
-			{
-			aOperation = TLocalDriveMappingInfo::EWriteMappingsAndSet;
-			}
-		else if (operationStr == KWriteMappingsNoSet)
-			{
-			aOperation = TLocalDriveMappingInfo::EWriteMappingsNoSet;
-			}
-		else if (operationStr == KSwapIntMappingAndSet)
-			{
-			aOperation = TLocalDriveMappingInfo::ESwapIntMappingAndSet;
-			}
-		else
-			{
-			TInt operation = 0;
-			ret = GET_OPTIONAL_INT_PARAMETER(aParameterName, aSection, operation);
-			if (ret)
-				{
-				aOperation = (TLocalDriveMappingInfo::TDrvMapOperation) operation;
-				}
-			}
-		}
-
-	return ret;
-	}
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_OpenFileScanData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,322 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_OpenFileScanData.h"
-#include "FileserverUtil.h"
-
-//Constants
-const TInt	KBufferLength		= 64;
-
-
-// Commands
-_LIT( KCmdDestructor,					"~" );
-_LIT( KCmdNew,						"new" );
-_LIT( KCmdNextL,					"NextL" );
-_LIT( KCmdThreadId,					"ThreadId" );
-
-// Parameters
-_LIT( KParamFileSession,				"FileSession" );
-_LIT( KParamExpectedFileName,			"expected_filename%d");
-_LIT( KParamDirWrapper,					"wrapper");
-
-
-CT_OpenFileScanData* CT_OpenFileScanData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_OpenFileScanData* ret = new (ELeave) CT_OpenFileScanData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_OpenFileScanData::CT_OpenFileScanData()
-:	iOpenFileScan(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-	
-void CT_OpenFileScanData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_OpenFileScanData::~CT_OpenFileScanData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-	
-void CT_OpenFileScanData::DoCleanup()
-/**
-* Contains cleanup implementation
-*/
-	{		
-	delete iOpenFileScan;
-	iOpenFileScan = NULL;
-	}
-	
-TAny* CT_OpenFileScanData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iOpenFileScan;
-	}
-
-TBool CT_OpenFileScanData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-	
-	if ( aCommand == KCmdDestructor )
-		{
-		DoCleanup();
-		}
-	else if ( aCommand == KCmdNew )
-		{
-		DoCmdNew( aSection );
-		}
-	else if ( aCommand == KCmdNextL )
-		{
-		DoCmdNextL( aSection );
-		}
-	else if ( aCommand == KCmdThreadId )
-		{
-		DoCmdThreadId( aSection );
-		}
-	else
-	    {
-	    retVal = EFalse;    
-	    }
-	
-	return retVal;
-	}
-	
-void CT_OpenFileScanData::DoCmdNew( const TDesC& aSection )
-/** Creates new TOpenFileScan class instance */
-	{
-	TPtrC rfsName;
-	RFs* rfs = NULL;
-	if ( GetRfsParam( aSection, rfs, rfsName ) )
-		{
-		INFO_PRINTF2( _L( "Create new TOpenFileScan(%S) class instance." ), &rfsName );
-		
-		// do create		
-		TRAPD( err, iOpenFileScan = new (ELeave) TOpenFileScan( *rfs ) );
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF3( _L( "new TOpenFileScan(%S) error=%d" ), &rfsName, err );
-			SetError( err );
-			}
-		}
-	}
-	
-void CT_OpenFileScanData::DoCmdNextL( const TDesC& aSection )
-/** Calls NextL() function */
-	{
-	RPointerArray<TPath> pathsToFind;
-	CleanupResetAndDestroyPushL(pathsToFind);
-	
-	// Read expected file names into array
-	TBool eof = EFalse;
-	TInt index = 0;
-	do
-		{
-		TBuf<KBufferLength> tempStore;
-		tempStore.Format(KParamExpectedFileName(), ++index);
-		TPtrC fileName;
-		eof = !GET_OPTIONAL_STRING_PARAMETER(tempStore, aSection, fileName);
-		if (!eof)
-			{
-			TPath* path = new(ELeave) TPath(fileName);
-			CleanupStack::PushL(path);
-			pathsToFind.AppendL(path);
-			CleanupStack::Pop();
-			}
-		}
-	while (!eof);
- 
-	TInt err = KErrNone;
-
-	CFileList* fileList = NULL;
-	if(pathsToFind.Count() == 0)
-		{
-		TRAP( err, iOpenFileScan->NextL( fileList ));
-		
-		if( fileList)
-			{
-			CleanupStack::PushL(fileList);
-			// NB! CDir == CFileList
-			TPtrC wrapperName;
-			if (!err && GET_OPTIONAL_STRING_PARAMETER(KParamDirWrapper, aSection, wrapperName))
-				{
-				CT_DirData *wrapper = NULL;
-				
-				TRAPD( error, wrapper = static_cast<CT_DirData*>(GetDataWrapperL(wrapperName)))
-				
-				if( wrapper && (error==KErrNone) )
-					{
-					wrapper->SetObjectL(fileList);
-					fileList = NULL;
-					}
-				else
-					{
-					ERR_PRINTF2( _L( "Wrong CDir wrapper name %S"), &wrapperName );
-					SetBlockResult( EFail );
-					}
-				}
-			
-			CleanupStack::Pop();
-			delete fileList;
-			fileList = NULL;
-			}
-		}
-	else
-		{
-		// Check expected file names
-		for( eof = EFalse ; !eof && (pathsToFind.Count() > 0);  ) 
-			{
-			iOpenFileScan->NextL(fileList);
-			if( fileList)
-				{
-				for ( TInt i = 0; i < fileList->Count(); i++ )
-					{
-					INFO_PRINTF1((*fileList)[i].iName );
-					for(TInt j =  pathsToFind.Count() - 1 ; j >= 0; j--)
-						{			
-						if( *(pathsToFind[j]) == (*fileList)[i].iName )
-							{
-							TPath* elemForRemove = pathsToFind[j];
-							pathsToFind.Remove(j);
-							delete elemForRemove;
-							}
-						}
-					}
-					
-				delete fileList;
-				fileList = NULL;
-				}
-			else
-				{
-				eof = ETrue;
-				}
-			}
-			
-		// Some file names are not found
-		if (pathsToFind.Count() > 0)
-			{
-			for(TInt i = 0; i < pathsToFind.Count(); i++)
-				{
-				ERR_PRINTF2( _L( "File %S haven't been found" ), pathsToFind[i] );
-				}
-			SetBlockResult( EFail );
-			}
-		}
-	
-   	if ( err != KErrNone )
-		{
-		ERR_PRINTF2( _L( "NextL() error=%d" ), err );
-		SetError( err );
-		}
-	
-	//Free massive
-	CleanupStack::PopAndDestroy(&pathsToFind);
-	}
-	
-// Calls ThreadId() function
-void CT_OpenFileScanData::DoCmdThreadId( const TDesC& aSection )
-	{
-	TPtrC rfsName;
-	
-	if(GET_MANDATORY_STRING_PARAMETER( KParamFileSession, aSection, rfsName))
-		{
-		CT_FsData *fsData = NULL;
-		
-		TRAPD(err,fsData =  static_cast<CT_FsData*>(GetDataWrapperL(rfsName)));
-		
-		if( err==KErrNone )
-			{
-			//Recieving thread ids.
-			TUint64 rfsThreadId = fsData->ThreadId();
-			TUint64 id = iOpenFileScan->ThreadId().Id();
-			//Comparing id's
-			if(rfsThreadId != id)
-				{
-				ERR_PRINTF3( _L( "Diffrent thread id's %u %u"),rfsThreadId,id);
-				SetBlockResult( EFail );
-				}
-			}
-		else
-			{
-			ERR_PRINTF2( _L( "Wrong session name:%S"),&rfsName);
-			SetBlockResult( EFail );
-			}
-		}
-
-	}
-	
-TBool CT_OpenFileScanData::GetRfsParam( const TDesC& aSection, RFs*& aRfs, TPtrC& aRfsName )
-/** this function retrieves the "rfs" current command parameter using
-*	GET_MANDATORY_STRING_PAREMETER macro
-* 
-*	@param	aSection		- the entry in the ini file requiring the command to be processed
-*	@param	aRfs 		- the returned RFs pointer
-*	@param	aRfsName	- the returned RFs's name as stated in ini file
-*
-*	@return	ETrue 		- if the the parameter has been successfully read and interpreted
-*				EFalse		- otherwise
-*/
-	{
-	TBool result = EFalse;
-	
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamFileSession, aSection, aRfsName ) )
-		{
-		TRAPD( err, aRfs = (RFs*)GetDataObjectL( aRfsName ) );
-		
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF3( _L( "Unrecognized object name: %S (error = %d)" ), &aRfsName, err );
-			SetBlockResult( EFail );
-			}
-		else
-			{
-			result = ETrue;	
-			}
-		}
-	
-	return result;
-	}
- 
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_ParseBaseData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,522 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_ParseBaseData.h"
-
-// Commands
-
-_LIT( KCmdDrive,					"Drive" );
-_LIT( KCmdDriveAndPath,				"DriveAndPath" );
-_LIT( KCmdDrivePresent,				"DrivePresent" );
-_LIT( KCmdExt,						"Ext" );
-_LIT( KCmdExtPresent,				"ExtPresent" );
-_LIT( KCmdFullName,					"FullName" );
-_LIT( KCmdIsExtWild,				"IsExtWild" );
-_LIT( KCmdIsKMatchAny,				"IsKMatchAny" );
-_LIT( KCmdIsKMatchOne,				"IsKMatchOne" );
-_LIT( KCmdIsNameWild,				"IsNameWild" );
-_LIT( KCmdIsRoot,					"IsRoot" );
-_LIT( KCmdIsWild,					"IsWild" );
-_LIT( KCmdName,						"Name" );
-_LIT( KCmdNameAndExt,				"NameAndExt" );
-_LIT( KCmdNameOrExtPresent,			"NameOrExtPresent" );
-_LIT( KCmdNamePresent,				"NamePresent" );
-_LIT( KCmdPath,						"Path" );
-_LIT( KCmdPathPresent,				"PathPresent" );
-
-// Parameters
-_LIT( KParamExpected,				"expected" );
-
-	
-CT_ParseBaseData::~CT_ParseBaseData()
-/**
-* Destructor.
-*/
-	{
-	}
-	
-
-TAny* CT_ParseBaseData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return GetParse();
-	}
-
-TBool CT_ParseBaseData::DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/ )
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-	
-
-	if ( aCommand == KCmdDrive )
-		{
-		DoCmdDrive( aSection );
-		}
-	else if ( aCommand == KCmdDriveAndPath )
-		{
-		DoCmdDriveAndPath( aSection );
-		}
-	else if ( aCommand == KCmdDrivePresent )
-		{
-		DoCmdDrivePresent( aSection );
-		}
-	else if ( aCommand == KCmdExt )
-		{
-		DoCmdExt( aSection );
-		}
-	else if ( aCommand == KCmdExtPresent )
-		{
-		DoCmdExtPresent( aSection );
-		}
-	else if ( aCommand == KCmdFullName )
-		{
-		DoCmdFullName( aSection );
-		}
-	else if ( aCommand == KCmdIsKMatchAny )
-		{
-		DoCmdIsKMatchAny( aSection );
-		}
-	else if ( aCommand == KCmdIsKMatchOne )
-		{
-		DoCmdIsKMatchOne( aSection );
-		}
-	else if ( aCommand == KCmdIsExtWild )
-		{
-		DoCmdIsExtWild( aSection );
-		}
-	else if ( aCommand == KCmdIsNameWild )
-		{
-		DoCmdIsNameWild( aSection );
-		}
-	else if ( aCommand == KCmdIsRoot)
-		{
-		DoCmdIsRoot( aSection );
-		}
-	else if ( aCommand == KCmdIsWild )
-		{
-		DoCmdIsWild( aSection );
-		}
-	else if ( aCommand == KCmdName )
-		{
-		DoCmdName( aSection );
-		}
-	else if ( aCommand == KCmdNameAndExt )
-		{
-		DoCmdNameAndExt( aSection );
-		}
-	else if ( aCommand == KCmdNameOrExtPresent )
-		{
-		DoCmdNameOrExtPresent( aSection );
-		}
-	else if ( aCommand == KCmdNamePresent )
-		{
-		DoCmdNamePresent( aSection );
-		}
-	else if ( aCommand == KCmdPath )
-		{
-		DoCmdPath( aSection );
-		}
-	else if ( aCommand == KCmdPathPresent )
-		{
-		DoCmdPathPresent( aSection );
-		}
-	else
-	    {
-	    retVal = EFalse;    
-	    }
-	
-	return retVal;
-	}
-	
-
-void CT_ParseBaseData::DoCmdDrive( const TDesC& aSection )
-/** Gets the drive letter using Drive(). */
-	{
-	INFO_PRINTF1( _L( "Drive()" ) );
-		
-	TPtrC result = GetParse()->Drive();
-	INFO_PRINTF2(_L("Drive() return: %S"), &result);
-	
-	TPtrC expected;
-	if ( GET_OPTIONAL_STRING_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( result != expected )
-			{
-			ERR_PRINTF3(_L("Drive() returns %S but expected %S"), &result, &expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdDriveAndPath( const TDesC& aSection )
-/** Gets the path and drive letter using DriveAndPath(). */
-	{
-	INFO_PRINTF1( _L( "DriveAndPath()" ) );
-		
-	TPtrC result = GetParse()->DriveAndPath();
-	INFO_PRINTF2(_L("DriveAndPath() return: %S"), &result);
-	
-	TPtrC expected;
-	if ( GET_OPTIONAL_STRING_PARAMETER( KParamExpected, aSection, expected ) )
-	{
-	if ( result != expected )
-		{
-		ERR_PRINTF3(_L("DriveAndPath() returns %S but expected %S"), &result, &expected);
-		SetBlockResult( EFail);
-		}
-	}
-	
-
-	}
-	
-void CT_ParseBaseData::DoCmdDrivePresent( const TDesC& aSection )
-/** Tests whether a drive is present using DrivePresent(). */
-	{
-	INFO_PRINTF1( _L( "DrivePresent()" ) );
-		
-	TBool result = GetParse()->DrivePresent();
-	
-	TPtrC strIsTrue = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("DrivePresent() return: %S"), &strIsTrue);
-				
-	TBool expected;	
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("DrivePresent() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdExt( const TDesC& aSection )
-/** Gets the file extension using Ext(). */
-	{
-	INFO_PRINTF1( _L( "Ext()" ) );
-		
-	TPtrC result = GetParse()->Ext();
-	INFO_PRINTF2(_L("Ext() returns: %S"), &result);
-	
-	TPtrC expected;
-	if ( GET_OPTIONAL_STRING_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( result != expected )
-			{
-			ERR_PRINTF3(_L("Ext() returns %S but expected %S"), &result, &expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdExtPresent( const TDesC& aSection )
-/** Tests whether an extension is present using ExtPresent(). */
-	{
-	INFO_PRINTF1( _L( "ExtPresent()" ) );
-		
-	TBool result = GetParse()->ExtPresent();
-	
-	TPtrC strIsTrue = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("ExtPresent() return: %S"), &strIsTrue);
-	
-	TBool expected;	
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("ExtPresent() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdFullName( const TDesC& aSection )
-/** Gets the complete file specification using FullName(). */
-	{
-	INFO_PRINTF1( _L( "FullName()" ) );
-		
-	TPtrC result = GetParse()->FullName();
-	INFO_PRINTF2(_L("FullName() return: %S"), &result);
-	
-	TPtrC expected;
-	if ( GET_OPTIONAL_STRING_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( result != expected )
-			{
-			ERR_PRINTF3(_L("FullName() returns %S but expected %S"), &result, &expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdIsExtWild( const TDesC& aSection )
-/** Tests whether the extension in the fully parsed specification contains one or 
- *  more wildcard characters using IsExtWild()
- */
-	{
-	INFO_PRINTF1( _L( "IsExtWild()" ) );
-		
-	TBool result = GetParse()->IsExtWild();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("IsExtWild() return: %S"), &temp);
-	
-	TBool expected;
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		//NB! IsExtWild can return values >1
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("IsExtWild() returns %S but expected %S"), &result, &expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdIsKMatchAny( const TDesC& aSection )
-/** Tests whether the name or the extension contains asterisk wildcards usinbg IsKMatchAny(). */
-	{
-	INFO_PRINTF1( _L( "IsKMatchAny()" ) );
-
-	TBool result = GetParse()->IsKMatchAny();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("IsKMatchAny() return: %S"), &temp);
-	
-	TBool expected;	
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("IsKMatchAny() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdIsKMatchOne( const TDesC& aSection )
-/** Tests whether the name or the extension contains a question mark wildcard using IsKMatchOne() */
-	{
-	INFO_PRINTF1( _L( "IsKMatchOne()" ) );
-
-	TBool result = GetParse()->IsKMatchOne();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("IsKMatchOne() return: %S"), &temp);
-
-	TBool expected;
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("IsKMatchOne() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdIsNameWild( const TDesC& aSection )
-/** Tests whether the filename in the fully parsed specification contains one or more wildcard 
- *  characters using IsNameWild() 
- */
-	{
-	INFO_PRINTF1( _L( "IsNameWild()" ) );
-		
-	TBool result = GetParse()->IsNameWild();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("IsNameWild() return: %S"), &temp);
-
-	TBool expected;
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("IsNameWild() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-
-void CT_ParseBaseData::DoCmdIsRoot( const TDesC& aSection )
-/** Tests whether the path in the fully parsed specification is the root directory using IsRoot(). */
-	{
-	INFO_PRINTF1( _L( "IsRoot()" ) );
-		
-	TBool result = GetParse()->IsRoot();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("IsRoot() return: %S"), &temp);
-
-	TBool expected;
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("IsRoot() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdIsWild( const TDesC& aSection )
-/** Tests whether the filename or the extension in the fully parsed specification contains one or 
-  * more wildcard characters using IsWild()
-  */
-	{
-	INFO_PRINTF1( _L( "IsWild()" ) );
-		
-	TBool result = GetParse()->IsWild();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("IsWild() return: %S"), &temp);
-
-	TBool expected;	
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("IsWild() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	
-	}
-
-void CT_ParseBaseData::DoCmdName( const TDesC& aSection )
-/** Gets the file name using Name(). */
-	{
-	INFO_PRINTF1( _L( "Name()" ) );
-		
-	TPtrC result = GetParse()->Name();
-	INFO_PRINTF2(_L( "Name() return: %S" ), &result);
-
-	TPtrC expected;
-	if ( GET_OPTIONAL_STRING_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( result != expected )
-			{
-			ERR_PRINTF3(_L("Name() returns %S but expected %S"), &result, &expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdNameOrExtPresent( const TDesC& aSection )
-/** Tests whether a name or an extension are present using NameOrExtPresent(). */
-	{
-	INFO_PRINTF1( _L( "NameOrExtPresent()" ) );
-		
-	TBool result = GetParse()->NameOrExtPresent();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("NameOrExtPresent() return: %S"), &temp);
-
-	TBool expected;
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("NameOrExtPresent() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdNameAndExt( const TDesC& aSection )
-/** Gets the file name and extension using NameAndExt(). */
-	{
-	INFO_PRINTF1( _L( "NameAndExt()" ) );
-		
-	TPtrC result = GetParse()->NameAndExt();
-	INFO_PRINTF2( _L( "NameAndExt() return: %S" ), &result );
-
-	TPtrC expected;
-	if ( GET_OPTIONAL_STRING_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( result != expected )
-			{
-			ERR_PRINTF3(_L("NameAndExt() returns %S but expected %S"), &result, &expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdNamePresent( const TDesC& aSection )
-/** Tests whether a file name is present using NamePresent(). */
-	{
-	INFO_PRINTF1( _L( "NamePresent()" ) );
-		
-	TBool result = GetParse()->NamePresent();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("NamePresent() return: %S"), &temp);
-
-	TBool expected;
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("NamePresent() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdPath( const TDesC& aSection )
-/** Gets the path using Path(). */
-	{
-	INFO_PRINTF1( _L( "Path()" ) );
-		
-	TPtrC result = GetParse()->Path();
-	INFO_PRINTF2( _L( "Path() return: %S" ), &result );
-
-	TPtrC expected;
-	if ( GET_OPTIONAL_STRING_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( result != expected )
-			{
-			ERR_PRINTF3(_L("Path() returns %S but expected %S"), &result, &expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
-void CT_ParseBaseData::DoCmdPathPresent( const TDesC& aSection )
-/** Tests whether a path is present using PathPresent(). */
-	{
-	INFO_PRINTF1( _L( "PathPresent()" ) );
-		
-	TBool result = GetParse()->PathPresent();
-	TPtrC temp = result ? _L("TRUE") : _L("FALSE");
-	INFO_PRINTF2(_L("PathPresent() return: %S"), &temp);		
-
-	TBool expected;
-	if ( GET_OPTIONAL_BOOL_PARAMETER( KParamExpected, aSection, expected ) )
-		{
-		if ( (result>0) != (expected>0) )
-			{
-			ERR_PRINTF3(_L("PathPresent() returns %d but expected %d"), result, expected);
-			SetBlockResult( EFail);
-			}
-		}
-	}
-	
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_ParseData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,233 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_ParseData.h"
-
-
-// Commands
-_LIT( KCmdDelete,					"~" );
-_LIT( KCmdAddDir,					"AddDir");
-_LIT( KCmdPopDir,					"PopDir");
-_LIT( KCmdNew,						"new" );
-_LIT( KCmdSet,						"Set" );
-_LIT( KCmdSetNoWild,				"SetNoWild" );
-// Parameters
-_LIT( KParamDefaultSpec,			"DefaultSpec" );
-_LIT( KParamFileSpec,				"FileName" );
-_LIT( KParamRelatedSpec,			"RelatedSpec" );
-_LIT( KParamDirName,				"DirName" );
-
-
-CT_ParseData* CT_ParseData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_ParseData* ret = new (ELeave) CT_ParseData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-TParseBase* CT_ParseData::GetParse()
-	{
-	return iParse;
-	}
-	
-
-CT_ParseData::CT_ParseData()
-:	iParse(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-	
-void CT_ParseData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_ParseData::~CT_ParseData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-	
-
-TAny* CT_ParseData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iParse;
-	}
-
-TBool CT_ParseData::DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-		
-	if ( aCommand == KCmdDelete )
-		{
-		DoCleanup();
-		}
-	else if ( aCommand == KCmdNew )
-		{
-		DoCmdNew();
-		}
-	else if ( aCommand == KCmdSet )
-		{
-		DoCmdSet( aSection );
-		}
-	else if ( aCommand == KCmdSetNoWild )
-		{
-		DoCmdSetNoWild( aSection );
-		}
-	else if ( aCommand == KCmdPopDir )
-		{
-		DoCmdPopDir();
-		}
-	else if ( aCommand == KCmdAddDir )
-		{
-		DoCmdAddDir( aSection );
-		}
-	else
-	    {
-	    retVal = CT_ParseBaseData::DoCommandL(aCommand,aSection,aAsyncErrorIndex);
-	    }
-	
-	return retVal;
-	}
-	
-void CT_ParseData::DoCleanup()
-/** Deletes TParse class instance */
-    {
-    INFO_PRINTF1( _L( "Delete TParse class instance." ) );
-    
-	delete iParse;
-	iParse = NULL;
-    }
-
-void CT_ParseData::DoCmdNew()
-/** Creates new TParse class instance */
-	{
-	DoCleanup();
-	
-	INFO_PRINTF1( _L( "Create new TParse class instance." ) );
-		
-	TRAPD( err, iParse = new (ELeave) TParse() );
-	if ( err != KErrNone )
-		{
-		ERR_PRINTF2( _L( "new TParse error=%d" ), err );
-		SetError( err );
-		}
-	}
-	
-void CT_ParseData::DoCmdSet( const TDesC& aSection )
-	{
-	TPtrC fileSpec;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamFileSpec, aSection, fileSpec ) )
-		{
-		TPtrC relatedSpec(_L(""));
-		GET_OPTIONAL_STRING_PARAMETER( KParamRelatedSpec, aSection, relatedSpec );
-		
-		TPtrC defaultSpec(_L(""));
-		GET_OPTIONAL_STRING_PARAMETER( KParamDefaultSpec, aSection, defaultSpec );
-		
-		INFO_PRINTF4( _L( "Set(%S, %S, %S)"), &fileSpec, &relatedSpec, &defaultSpec );
-		
-		TInt error = iParse->Set( fileSpec, &relatedSpec, &defaultSpec );
-		
-		if ( error != KErrNone)
-			{
-			ERR_PRINTF2( _L( "Set() returned %d error"), error);
-			SetError(error);
-			}
-		}
-	}
-	
-void CT_ParseData::DoCmdSetNoWild( const TDesC& aSection )
-	{
-	TPtrC fileSpec;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamFileSpec, aSection, fileSpec ) )
-		{
-		TPtrC relatedSpec(_L(""));
-		GET_OPTIONAL_STRING_PARAMETER( KParamRelatedSpec, aSection, relatedSpec );
-		
-		TPtrC defaultSpec(_L(""));
-		GET_OPTIONAL_STRING_PARAMETER( KParamDefaultSpec, aSection, defaultSpec );
-		
-		INFO_PRINTF4( _L( "SetNoWild(%S, %S, %S)"), &fileSpec, &relatedSpec, &defaultSpec );
-		
-		TInt error = iParse->SetNoWild( fileSpec, &relatedSpec, &defaultSpec );
-	
-		if ( error != KErrNone)
-			{
-			ERR_PRINTF2( _L( "SetNoWild() returned %d error"), error);
-			SetError(error);
-			}
-		}
-	}
-	
-	
-void CT_ParseData::DoCmdPopDir()
-/** Removes the last directory from the path using PopDir(). */
-	{
-	INFO_PRINTF1( _L( "PopDir()" ) );
-
-	TInt error = iParse->PopDir();
-	if( error != KErrNone)
-		{
-		ERR_PRINTF2( _L( "PopDir() returned %d error"), error);
-		SetError(error);
-		}
-	}
-	
-    
-void CT_ParseData::DoCmdAddDir( const TDesC& aSection )
-/** Adds a single directory onto the end of the path using AddDir. */
-	{
-	TPtrC dirName;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamDirName, aSection, dirName ) )
-		{
-		INFO_PRINTF2( _L( "AddDir(\"%S\")" ), &dirName );
-		
-		TInt error = iParse->AddDir( dirName );
-		if(	error != KErrNone)
-			{
-			ERR_PRINTF2( _L( "AddDir() returned %d error"), error);
-			SetError(error);
-			}
-		}
-	}
-	
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_ParsePtrCData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_ParsePtrCData.h"
-
-
-// Commands
-_LIT( KCmdDelete,					"~" );
-_LIT( KCmdNew,						"new" );
-_LIT( KCmdAddDir,					"AddDir");
-_LIT( KCmdPopDir,					"PopDir");
-
-// Parameters
-_LIT( KParamFileName,				"FileName" );
-_LIT( KParamDirName,				"DirName" );
-
-
-CT_ParsePtrCData* CT_ParsePtrCData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_ParsePtrCData* ret = new (ELeave) CT_ParsePtrCData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_ParsePtrCData::CT_ParsePtrCData()
-:	iParsePtrC(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-	
-void CT_ParsePtrCData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_ParsePtrCData::~CT_ParsePtrCData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-	
-
-
-TParseBase* CT_ParsePtrCData::GetParse()
-	{
-	return iParsePtrC;
-	}
-	
-TBool CT_ParsePtrCData::DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-	
-	if ( aCommand == KCmdDelete )
-		{
-		DoCleanup();
-		}
-	else if ( aCommand == KCmdNew )
-		{
-		DoCmdNew( aSection );
-		}
-	else if ( aCommand == KCmdAddDir )
-		{
-		DoCmdAddDir( aSection );
-		}
-	else if ( aCommand == KCmdPopDir )
-		{
-		DoCmdPopDir();
-		}
-	else
-	    {
-	    retVal = CT_ParseBaseData::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
-	    }
-	
-	return retVal;
-	}
-	
-void CT_ParsePtrCData::DoCleanup()
-/** Deletes TParsePtr class instance */
-    {
-    INFO_PRINTF1( _L( "Delete TParsePtrC class instance." ) );
-
-	delete iParsePtrC;
-	iParsePtrC = NULL;
-    }
-
-void CT_ParsePtrCData::DoCmdNew( const TDesC& aSection )
-/** Creates new TParsePtr class instance */
-	{
-	DoCleanup();
-	
-	TPtrC fileName;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamFileName, aSection, fileName ) )
-		{
-		INFO_PRINTF2( _L( "Create new TParsePtrC(\"%S\") class instance." ), &fileName );
-		
-		iFileName = fileName;
-		TRAPD( err, iParsePtrC = new (ELeave) TParsePtrC( iFileName ) );
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF3( _L( "new TParsePtrC(\"%S\") error=%d" ), &fileName, err );
-			SetError( err );
-			}
-		}
-	}
-
-	
-void CT_ParsePtrCData::DoCmdPopDir()
-/** Removes the last directory from the path using PopDir(). */
-	{
-	INFO_PRINTF1( _L( "PopDir()" ) );
-		
-	TInt err = iParsePtrC->PopDir();
-	
-	if( err != KErrNone)
-			{
-			ERR_PRINTF2( _L( "PopDir() returned %d error"), err);
-			SetError(err);
-			}
-	}
-
-    
-void CT_ParsePtrCData::DoCmdAddDir( const TDesC& aSection )
-/** Adds a single directory onto the end of the path using AddDir. */
-	{
-	TPtrC dirName;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamDirName, aSection, dirName ) )
-		{
-		INFO_PRINTF2( _L( "AddDir(\"%S\")" ), &dirName );
-		
-		TInt err = iParsePtrC->AddDir( dirName );
-		if(	err != KErrNone)
-			{
-			ERR_PRINTF2( _L( "AddDir() returned %d error"), err);
-			SetError(err);
-			}
-		}
-	}
-	
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_ParsePtrData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_ParsePtrData.h"
-
-
-// Commands
-_LIT( KCmdDelete,					"~" );
-_LIT( KCmdNew,						"new" );
-_LIT( KCmdAddDir,					"AddDir");
-_LIT( KCmdPopDir,					"PopDir");
-
-// Parameters
-_LIT( KParamFileName,				"FileName" );
-_LIT( KParamDirName,				"DirName" );
-
-CT_ParsePtrData* CT_ParsePtrData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_ParsePtrData* ret = new (ELeave) CT_ParsePtrData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_ParsePtrData::CT_ParsePtrData( )
-:	iParsePtr(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-
-TParseBase* CT_ParsePtrData::GetParse()
-	{
-	return iParsePtr;
-	}
-
-void CT_ParsePtrData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_ParsePtrData::~CT_ParsePtrData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-	
-
-TAny* CT_ParsePtrData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iParsePtr;
-	}
-
-TBool CT_ParsePtrData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex )
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aEntry		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-	
-	if ( aCommand == KCmdDelete )
-		{
-		DoCleanup();
-		}
-	else if ( aCommand == KCmdNew )
-		{
-		DoCmdNew( aSection );
-		}
-	else if ( aCommand == KCmdAddDir )
-		{
-		DoCmdAddDir( aSection );
-		}
-	else if ( aCommand == KCmdPopDir )
-		{
-		DoCmdPopDir();
-		}
-	else
-	    {
-	    retVal = CT_ParseBaseData::DoCommandL(aCommand, aSection, aAsyncErrorIndex);    
-	    }
-	
-	return retVal;
-	}
-	
-void CT_ParsePtrData::DoCleanup()
-/** Deletes TParsePtr class instance */
-    {
-    INFO_PRINTF1( _L( "Delete TParsePtr class instance." ) );
-    
-	delete iParsePtr;
-	iParsePtr = NULL;
-    }
-
-void CT_ParsePtrData::DoCmdNew( const TDesC& aSection )
-/** Creates new TParsePtr class instance */
-	{
-	DoCleanup();
-
-	TPtrC fileName;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamFileName, aSection, fileName ) )
-		{
-		INFO_PRINTF2( _L( "Create new TParsePtr(\"%S\") class instance." ), &fileName );
-		
-		iFileName = fileName;
-		TRAPD( err, iParsePtr = new (ELeave) TParsePtr( iFileName ) );
-		if ( err != KErrNone )
-			{
-			ERR_PRINTF3( _L( "new TParsePtr(\"%S\") error=%d" ), &fileName, err );
-			SetError( err );
-			}
-		}
-	}
-
- 
-void CT_ParsePtrData::DoCmdPopDir()
-/** Removes the last directory from the path using PopDir(). */
-	{
-	INFO_PRINTF1( _L( "PopDir()" ) );
-		
-	TInt err = iParsePtr->PopDir();
-	
-	if( err != KErrNone)
-			{
-			ERR_PRINTF2( _L( "PopDir() returned %d error"), err);
-			SetError(err);
-			}
-	}
-
-
-    
-void CT_ParsePtrData::DoCmdAddDir( const TDesC& aSection )
-/** Adds a single directory onto the end of the path using AddDir. */
-	{
-	TPtrC dirName;
-	if ( GET_MANDATORY_STRING_PARAMETER( KParamDirName, aSection, dirName ) )
-		{
-		INFO_PRINTF2( _L( "AddDir(\"%S\")" ), &dirName );
-		
-		TInt err = iParsePtr->AddDir( dirName );
-		if(	err != KErrNone)
-			{
-			ERR_PRINTF2( _L( "AddDir() returned %d error"), err);
-			SetError(err);
-			}
-		}
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_RDirData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,582 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-v
-This contains CT_RDirData
-*/
-
-//	User includes
-#include "T_RDirData.h"
-#include "T_SfSrvServer.h"
-#include "FileserverUtil.h"
-
-
-
-/*@{*/
-///	Parameters
-_LIT(KPath,										"path");
-_LIT(KTUidType,									"uidtype");
-_LIT(KRFsObjectName,							"rfsObject");
-_LIT(KAsync,									"async");
-_LIT(KArrayObjectName,							"arrayObject");
-_LIT(KEntryObjectName,							"entryObject");
-_LIT(KEntryAttMask,								"attmask");
-_LIT(KParamExpectedFileName,					"filename%d");
-_LIT(KReadArray,								"readarray");
-_LIT(KCompareFiles,								"compare");
-
-
-///Commands
-_LIT(KCmdNew,									"new");
-_LIT(KCmdDestructor,							"~");
-_LIT(KCmdOpen,									"Open");
-_LIT(KCmdRead,									"Read");
-_LIT(KCmdClose,									"Close");
-
-//Constants
-const TInt	KBufferLength		= 64;
-
-CT_RDirData* CT_RDirData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_RDirData* ret = new (ELeave) CT_RDirData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-
-
-
-CT_RDirData::CT_RDirData()
-:	iRDir(NULL)
-,	iRead(NULL)
-,	iReadBlock(NULL)
-,	iEntry(NULL)
-,	iExpectedNames(NULL)
-,	iObjName(NULL)
-,	iCompare(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-
-
-void CT_RDirData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	iRead = CActiveCallback::NewL( *this );
-	iReadBlock = CActiveCallback::NewL( *this );
-	iExpectedNames = new(ELeave) RPointerArray<TPath>();
-	}
-
-
-CT_RDirData::~CT_RDirData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-
-
-TAny* CT_RDirData::GetObject()
-	{
-	return iRDir;
-	}
-
-
-TBool CT_RDirData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool ret = ETrue;
-
-	if (aCommand == KCmdNew)
-		{
-		DoCmdNew();
-		}
-	else if (aCommand == KCmdOpen)
-		{
-		DoCmdOpenL(aSection);
-		}
-	else if (aCommand == KCmdRead)
-		{
-		DoCmdReadL(aSection, aAsyncErrorIndex);
-		}
-	else if (aCommand == KCmdClose)
-		{
-		DoCmdClose();
-		}
-	else if (aCommand == KCmdDestructor)
-		{
-		DoCmdDestructor();
-		}
-	else
-		{
-		ret = EFalse;
-		}
-	return ret;
-	}
-
-void CT_RDirData::DoCleanup()
-	{
-	INFO_PRINTF1(_L("Deleting current RDir"));
-	delete iEntry;
-	iEntry = NULL;
-	delete iRDir;
-	iRDir = NULL;
-
-	delete iRead;
-	iRead = NULL;
-	delete iReadBlock;
-	iReadBlock = NULL;
-	iExpectedNames->ResetAndDestroy();	
-	}
-
-void CT_RDirData::DoCmdNew()
-	{
-	INFO_PRINTF1(_L("Create new RDirs class instance"));
-
-	delete iRDir;
-	iRDir = NULL;
-
-	TRAPD(err, iRDir = new (ELeave) RDir());
-	if ( err != KErrNone )
-		{
-		ERR_PRINTF2(_L("new error %d"), err);
-		SetError( err );
-		}
-	}
-	
-void CT_RDirData::DoCmdClose()
-/** 
-*	Close RDir handle 
-*/
-	{
-	INFO_PRINTF1(_L("Closing RDir"));
-	iRDir->Close();
-	}
-
-void CT_RDirData::DoCmdDestructor()
-/** 
-*	Destroy RDir the object 
-*/
-	{
-	INFO_PRINTF1(_L("Destroying the RDir object"));
-	DoCleanup();
-	}
-	
-void CT_RDirData::DoCmdOpenL(const TDesC& aSection)
-	{		
-	INFO_PRINTF1(_L("Opening directory!"));
-	
-	TBool	dataOk = ETrue;
-		
-	TPtrC	rfsObjectName;
-	RFs*    rfsObject = NULL;
-	if(GET_MANDATORY_STRING_PARAMETER(KRFsObjectName(), aSection, rfsObjectName))
-	    {
-	    rfsObject = (RFs*)GetDataObjectL(rfsObjectName);
-	    }
-	else
-		{
-		dataOk = EFalse;
-		}
-	    
-	TPtrC path;
-	if(!GET_MANDATORY_STRING_PARAMETER(KPath(), aSection, path))
-		{
-		dataOk = EFalse;
-		}
-	
-	TUidType	uidType = KNullUid;
-	TInt		intUIDType;
-	TBool		isUidType = EFalse;
-
-	TUint		attMask = KEntryAttNormal;
-	INFO_PRINTF2(_L("section name - %S"),&aSection);
-	
-	if(!FileserverUtil::GetAttMask(*this, aSection, KEntryAttMask(), attMask))
-		{
-		if (GET_MANDATORY_INT_PARAMETER(KTUidType(), aSection, intUIDType))
-			{
-    		TUid id = TUid::Uid(intUIDType);
-	   		uidType = TUidType(id);
-	   		INFO_PRINTF2(_L("UID type set to %d"), uidType[0].iUid);
-	   		isUidType = ETrue;
-			}
-		else
-			{
-			dataOk = EFalse;
-			ERR_PRINTF2(_L("attmask or %S must be declared !!!"), &KTUidType);
-			}
-		}
-		
-	if (dataOk)	
-		{
-		TInt 	err = KErrNone;
-		
-		if (isUidType)
-			{
-			err = iRDir->Open(*rfsObject, path, uidType);
-			}
-		else
-			{
-			err = iRDir->Open(*rfsObject, path, attMask);
-			}
-				
-		if (err != KErrNone)
-			{
-			INFO_PRINTF2(_L("Open() error: %d"), err);
-			SetError(err);
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Directory has been opened!"));
-			}
-		}
-	}
-	
-void CT_RDirData::DoCmdReadL(const TDesC& aSection, const TInt aAsyncErrorIndex)
-	{
-	INFO_PRINTF1(_L("Reading directory!"));
-	
-	TBool 	async 		= EFalse;
-	TBool	readArray	= EFalse;
-	TBool	compare		= EFalse;
-	
-	GET_OPTIONAL_BOOL_PARAMETER(KAsync(), aSection, async);
-	
-	if(GET_OPTIONAL_BOOL_PARAMETER(KReadArray(),aSection,readArray))
-		{
-		ReadExpectedNamesL( aSection);
-		}
-		
-	if(GET_OPTIONAL_BOOL_PARAMETER(KCompareFiles(),aSection,compare))
-		{
-		iCompare = compare;
-		}
-
-	TPtrC entryArrayName;
-	if (GET_OPTIONAL_STRING_PARAMETER(KArrayObjectName(), aSection, entryArrayName))
-		{
-		TEntryArray* entryArray = new(ELeave) TEntryArray();
-		CleanupStack::PushL(entryArray);
-		
-		CT_EntryArrayData* entryArrayWrapper = 
-			static_cast<CT_EntryArrayData*> (GetDataWrapperL(entryArrayName));
-		if (entryArrayWrapper)
-			{
-			entryArrayWrapper->SetObjectL(entryArray);
-			}
-		else
-			{
-			ERR_PRINTF2(_L("Not initialized %S"), &entryArrayName);
-			SetBlockResult(EFail);
-			}
-		CleanupStack::Pop(entryArray);
-			
-		if (async)
-			{
-			iObjName = entryArrayName;
-			iRDir->Read(*entryArray, iReadBlock->iStatus);
-			iReadBlock->Activate(aAsyncErrorIndex);
-			IncOutstanding();
-			}
-		else
-			{
-			TInt err = iRDir->Read(*entryArray);
-			
-			if((err == KErrNone) || (err == KErrEof))
-				{
-				INFO_PRINTF1(_L("Read function completed successfully"));
-				SetError(err);
-				if(compare)
-					{
-					CompareEntryArray(entryArray);
-					}
-				}
-			else
-				{
-				ERR_PRINTF2(_L("Read function failed with error: %d"), err);
-				SetError(err);	
-				}
-			}
-		}
-	else
-		{
-		TPtrC entryName;
-		if (GET_MANDATORY_STRING_PARAMETER(KEntryObjectName(), aSection, entryName))
-			{
-			TEntry* entry = new(ELeave) TEntry();
-			CleanupStack::PushL(entry);
-			
-			CT_EntryData* entryWrapper = 
-				static_cast<CT_EntryData*> (GetDataWrapperL(entryName));
-			
-			if (entryWrapper)
-				{
-				entryWrapper->SetObjectL(entry);
-				}
-			else
-				{
-				ERR_PRINTF2(_L("Not initialized %S"), &entryName);
-				SetBlockResult(EFail);
-				}
-			
-			CleanupStack::Pop(entry);
-			
-			if (async)
-				{
-				iObjName = entryName;
-				delete iEntry;
-				iEntry = NULL;
-				iEntry = new(ELeave) TPckg<TEntry>(*entry);
-				iRDir->Read(*iEntry, iRead->iStatus);
-				iRead->Activate(aAsyncErrorIndex);
-				IncOutstanding();
-				}
-			else
-				{
-				TInt err = iRDir->Read(*entry);
-			
-				if((err == KErrNone) || (err == KErrEof))
-					{
-					INFO_PRINTF1(_L("Read function completed successfully"));
-					SetError(err);
-					if(compare)
-						{
-						CompareEntryData(entry);
-						}
-					}
-				else
-					{
-					ERR_PRINTF2(_L("Read function failed with error: %d"), err);
-					SetError(err);	
-					}
-				}
-			}
-		}
-	}
-	
-		
-void CT_RDirData::ReadExpectedNamesL( const TDesC& aSection )
-/**
-*	Read list of expected file names from ili file
-*/
-	{
-	iExpectedNames->ResetAndDestroy();
-
-	TBool moreData = EFalse;
-	TInt index = 0;
-	do
-		{
-		TBuf<KBufferLength> tempStore;
-		tempStore.Format(KParamExpectedFileName(), ++index);
-		TPtrC fileName;
-		moreData = GET_OPTIONAL_STRING_PARAMETER(tempStore, aSection, fileName);
-		if (moreData)
-			{
-			TPath* path = new(ELeave) TPath(fileName);
-			CleanupStack::PushL(path);
-			iExpectedNames->AppendL(path);
-			CleanupStack::Pop();
-			}
-		}
-	while (moreData);
-	}
-
-
-void CT_RDirData::CompareEntryArray(TEntryArray* aEntryArray)
-/**
-*	Compare TEntryArray entryes with list of expected files
-*/
-	{
-	if(aEntryArray->Count() == iExpectedNames->Count())
-		{
-		for(TInt i = 0; i < aEntryArray->Count(); i++)
-			{
-			TBool eof = EFalse;
-			for(TInt k = 0; !eof && (k < iExpectedNames->Count()); k++)
-				{
-				TEntry* tmpEntry = new(ELeave) TEntry();
-				*tmpEntry = aEntryArray->operator[](i);
-				if(*(iExpectedNames->operator[](k)) == tmpEntry->iName)
-					{
-					TPath* name = iExpectedNames->operator[](k);
-					INFO_PRINTF3( _L( "Entry name = expected name, %S = %S"), &tmpEntry->iName, name);
-					
-					iExpectedNames->Remove(k);
-					delete name;
-					eof = ETrue;	
-					}
-					
-				delete tmpEntry;
-				}
-			}
-		if(iExpectedNames->Count() > 0)
-			{
-			ERR_PRINTF1(_L("TEntryArray members are not equal to expected"));
-			SetBlockResult(EFail);
-			}
-		else
-			{
-			INFO_PRINTF1( _L( "TEntryArray members are equal to expected"));
-			}
-		}
-	else if(aEntryArray->Count() > iExpectedNames->Count())
-		{
-		ERR_PRINTF1(_L("Found unexpecded file(s)"));
-		SetBlockResult(EFail);
-		}
-	else if(aEntryArray->Count() < iExpectedNames->Count())
-		{
-		ERR_PRINTF1(_L("List of expected files more than amount of real files"));
-		SetBlockResult(EFail);
-		}
-	}
-	
-void CT_RDirData::CompareEntryData(TEntry* aEntry)
-/**
-*	Compare TEntry with entry in list of expected files
-*/
-	{
-	TBool eof = EFalse;	
-	TBool fileCompare = EFalse;
-	for(TInt i = 0; !eof && (i < iExpectedNames->Count()); i++)
-		{
-		if(*(iExpectedNames->operator[](i)) == aEntry->iName)
-			{
-			TPath* name = iExpectedNames->operator[](i);
-			fileCompare = ETrue;
-				
-			iExpectedNames->Remove(i);
-			delete name;
-			eof = ETrue;
-			}
-		}
-	if(!fileCompare)
-		{
-		ERR_PRINTF2(_L("Unexpected file - %S"),&aEntry->iName);
-		SetBlockResult(EFail);
-		}
-	}
-	
-
-void CT_RDirData::RunL(CActive* aActive, TInt aIndex)
-	{	
-	INFO_PRINTF1(_L("RunL Called!"));
-	
-	if ((aActive == iReadBlock) || (aActive == iRead))
-		{
-
-		TInt err = aActive->iStatus.Int();
-		if (err == KErrNone)
-			{
-			TEntry	&actualEntry = iEntry->operator()();
-			INFO_PRINTF2(_L("Asynchronous Read function completed successfully, %S"),&(actualEntry.iName));
-			}
-		else if (err == KErrEof)
-			{
-			INFO_PRINTF1(_L("Asynchronous Read function reached the end and returned expectedly KErrEof"));
-			SetAsyncError(aIndex, err);
-			}
-		else
-			{
-			ERR_PRINTF2(_L("RunL Error: %d"), err);
-			SetAsyncError(aIndex, err);
-			}
-		
-
-		if(iCompare && ((err == KErrNone) || (err == KErrEof)))
-			{
-			if(aActive == iReadBlock)
-				{
-				TEntryArray *entryArray = static_cast<TEntryArray*>(GetDataObjectL(iObjName));
-				if (entryArray)
-					{
-					CompareEntryArray(entryArray);
-					}
-				else
-					{
-					SetBlockResult(EFail);
-					ERR_PRINTF2(_L("Empty Object: %S"), &iObjName);
-					}
-				}
-			else if(aActive == iRead)
-				{
-				TEntry* entry = static_cast<TEntry*>(GetDataObjectL(iObjName));
-				if (entry)
-					{
-					CompareEntryData(entry);
-					}
-				else
-					{
-					SetBlockResult(EFail);
-					ERR_PRINTF2(_L("Empty Object: %S"), &iObjName);
-					}
-				}
-			}
-
-		delete iEntry;
-		iEntry = NULL;
-		
-		DecOutstanding();
-		}
-	else
-		{
- 		ERR_PRINTF1( _L("Stray RunL signal") );
- 		SetBlockResult( EFail );
-		}
-	}
-	
-void CT_RDirData::DoCancel(CActive* aActive, TInt aIndex)
-	{
-	INFO_PRINTF1(_L("DoCancel Called!"));
-	
-	if ( aActive == iRead )
-		{	
-		TInt err = aActive->iStatus.Int();
-		if(err != KErrNone )
-			{
-			ERR_PRINTF2(_L("DoCancel Error: %d"), err);
-			SetAsyncError(aIndex, err);
-			}
-		DecOutstanding();
-		}
-	else
-		{
- 		ERR_PRINTF1( _L("Stray RunL signal") );
- 		SetBlockResult( EFail );
-		}	
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_RawDiskData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,490 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/**
-@test
-@internalComponent
-
-This contains CT_RawDiskData
-*/
-
-//	User includes
-#include "T_RawDiskData.h"
-
-/*@{*/
-///	Parameters
-_LIT(KDrive,	        						"drive");
-_LIT(KObjectName,                               "object_name");
-_LIT(KData,										"data");
-_LIT(KPosition,									"position");
-
-///Commands
-_LIT(KCmdOpen,                                  "Open");
-_LIT(KCmdClose,                                 "Close");
-_LIT(KCmdNew,                                   "new" );
-_LIT(KCmdDestructor,                            "~" );
-_LIT(KCmdRead,                                  "Read");
-_LIT(KCmdWrite,                                 "Write");
-
-_LIT(KDriveA,							        "EDriveA");
-_LIT(KDriveB,				        			"EDriveB");
-_LIT(KDriveC,	        						"EDriveC");
-_LIT(KDriveD,						        	"EDriveD");
-_LIT(KDriveE,		        					"EDriveE");
-_LIT(KDriveF,		        					"EDriveF");
-_LIT(KDriveG,				        			"EDriveG");
-_LIT(KDriveH,		        					"EDriveH");
-_LIT(KDriveI,		        					"EDriveI");
-_LIT(KDriveJ,       							"EDriveJ");
-_LIT(KDriveK,							        "EDriveK");
-_LIT(KDriveL,					        		"EDriveL");
-_LIT(KDriveM,				    	    		"EDriveM");
-_LIT(KDriveN,		        					"EDriveN");
-_LIT(KDriveO,       							"EDriveO");
-_LIT(KDriveP,					    	    	"EDriveP");
-_LIT(KDriveQ,					        		"EDriveQ");
-_LIT(KDriveR,		        					"EDriveR");
-_LIT(KDriveS,	    		    				"EDriveS");
-_LIT(KDriveT,   				    			"EDriveT");
-_LIT(KDriveU,							        "EDriveU");
-_LIT(KDriveV,					        		"EDriveV");
-_LIT(KDriveW,				        			"EDriveW");
-_LIT(KDriveX,				           			"EDriveX");
-_LIT(KDriveY,				    	    		"EDriveY");
-_LIT(KDriveZ,			    	    			"EDriveZ");
-/*@}*/
-
-CT_RawDiskData* CT_RawDiskData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_RawDiskData* ret = new (ELeave) CT_RawDiskData();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-
-CT_RawDiskData::CT_RawDiskData()
-:	iRawDisk(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-
-void CT_RawDiskData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_RawDiskData::~CT_RawDiskData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-
-void CT_RawDiskData::DoCleanup()
-/**
-* Contains cleanup implementation
-*/
-	{
-	//Deleting RRawDisk.
-	if (iRawDisk)
-		{
-		DoCmdClose();
-		INFO_PRINTF1(_L("Deleting current RRawDisk"));
-		delete iRawDisk;
-		iRawDisk = NULL;
-		}
-	}
-
-TAny* CT_RawDiskData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iRawDisk;
-	}
-
-TBool CT_RawDiskData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
-/**
- * Process a command read from the ini file
- *
- * @param	aCommand requiring command to be processed
- * @param	aSection the section in the ini file requiring the command to be processed
- * @param	aAsyncErrorIndex the index of asynchronous command error code belongs to.
- *
- * @leave	system wide error
- *
- * @return	ETrue if the command is processed
- */
-	{
-	TBool retVal = ETrue;
-	
-	if (aCommand == KCmdNew)
-		{
-		DoCmdNewL();
-		}
-	else if (aCommand == KCmdDestructor)
-		{
-		DoCmdDestructor();
-		}
-    else if (aCommand == KCmdOpen)
-	    {
-	    DoCmdOpen(aSection);
-	    }
-	else if (aCommand == KCmdClose)
-	    {
-	    DoCmdClose();
-	    }
-    else if (aCommand == KCmdRead)
-        {
-        DoCmdReadL(aSection);
-        }
-    else if (aCommand == KCmdWrite)
-        {
-        DoCmdWriteL(aSection);
-        }
-	else
-		{
-		retVal = EFalse;
-		}
-	return retVal;
-	}
-
-
-void CT_RawDiskData::DoCmdNewL()
-/** Creates new RRawDisk class instance */
-	{
-	//Deletes previous RRawDisk class instance if it was already created.
-	DoCleanup();
-
-	INFO_PRINTF1(_L("Create new RRawDisk class instance"));
-
-	// do create
-	TRAPD(err, iRawDisk = new (ELeave) RRawDisk());
-	if (err != KErrNone)
-		{
-		ERR_PRINTF2(_L("new error %d"), err);
-		SetError(err);
-		}
-	else
-		{
-		INFO_PRINTF1(_L("Create new RRawDisk class instance completed successfully!"));
-		}
-	}
-	
-	
-void CT_RawDiskData::DoCmdDestructor()
-/** Destroy RRawDisk the object */
-	{
-	DoCleanup();
-	}
-
-
-void CT_RawDiskData::DoCmdOpen(const TDesC& aSection)
-/** RRawDisk::Open */
-	{
-	INFO_PRINTF1(_L("Opening a direct access channel to the disk!"));
-
-	RFs* rfsObject = NULL;
-	TPtrC rfsObjectName;
-	if (GET_MANDATORY_STRING_PARAMETER(KObjectName, aSection, rfsObjectName))
-		{
-		TRAPD(err, rfsObject = (RFs*)GetDataObjectL(rfsObjectName));
-		
-		if (err == KErrNone)
-			{
-    		// get drive number from parameters
-    		TDriveNumber driveNumber = EDriveA;
-    		if (!GetDriveNumber(aSection, KDrive(), driveNumber))
-    			{
-    			ERR_PRINTF2(_L("No %S"), &KDrive());
-    			SetBlockResult(EFail);
-    			}
-    		else
-    		    {
-		   		TInt err = KErrNone;
-            	err = iRawDisk->Open(*rfsObject, driveNumber);
-
-	    		if (err != KErrNone)
-	    			{
-	    			ERR_PRINTF2(_L("Opening iRawDisk failed with error : %d"), err);
-	    			SetError( err );
-	    			}
-	    		else
-					{
-					INFO_PRINTF1(_L("Opening iRawDisk completed successfully!"));
-					}
-	    	    }
-			}
-		else
-			{
-			ERR_PRINTF1(_L("Error with fileserver"));
-    		SetBlockResult(EFail);	
-			}
-		}
-	}
-
-
-void CT_RawDiskData::DoCmdClose()
-/** RRawDisk::Close */
-	{
-	INFO_PRINTF1(_L("Closing current RRawDisk"));
-	iRawDisk->Close();
-	}
-
-
-void CT_RawDiskData::DoCmdReadL( const TDesC& aSection )
-    {
-	INFO_PRINTF1(_L("Reading directly from disc!"));
-    TInt err = KErrNone;
-    
-    TPtrC	expectedData;
-	if(GET_MANDATORY_STRING_PARAMETER(KData(), aSection, expectedData))
-		{		
-		HBufC* expectedResultBuf = HBufC::NewL(expectedData.Length());
-		
-		TPtr expectedResult = expectedResultBuf->Des();
-		expectedResult.Copy(expectedData);
-		
-		INFO_PRINTF2(_L("Expecting data: %S"), &expectedResult);
-		
-		HBufC8* readBuf = HBufC8::NewL( expectedData.Length());
-		TPtr8 readBufPtr = readBuf->Des();
-			
-		TInt64 pos = 0;
-		GET_OPTIONAL_INT64_PARAMETER(KPosition(), aSection, pos);
-			
-		err = iRawDisk->Read(pos, readBufPtr);
-
-		if(err == KErrNone)
-			{
-			HBufC* readResultBuf = HBufC::NewL(readBufPtr.Length());
-			
-			TPtr readResult = readResultBuf->Des();
-			readResult.Copy(readBufPtr);
-			
-			INFO_PRINTF2(_L("Reading data: %S"), &readResult);
-			
-			if (readResult != expectedResult)
-				{
-				ERR_PRINTF3(_L("Read data does not match expected data! Read: %S expected: %S"), &readResult, &expectedResult);
-				SetBlockResult( EFail );	
-				}
-			else
-				{
-				INFO_PRINTF1(_L("Reading data directly from disc was successful!"));	
-				}
-			delete readResultBuf;
-			readResultBuf = NULL;
-			}
-		else
-			{
-			ERR_PRINTF2(_L("Reading data directly from disc failed with error %d"), err);
-			SetError(err);
-			}
-		delete expectedResultBuf;
-		expectedResultBuf = NULL;
-		delete readBuf;
-		readBuf = NULL;
-		}
-    else
-    	{
-    	ERR_PRINTF2(_L("No %S"), &KData());
-    	SetBlockResult(EFail);
-    	}
-    }
-
-
-void CT_RawDiskData::DoCmdWriteL( const TDesC& aSection )
-    {
-    INFO_PRINTF1(_L("Writing directly to disc!"));
-    
-    TPtrC	writeData;
-	if(GET_MANDATORY_STRING_PARAMETER(KData(), aSection, writeData))
-		{
-		
-		INFO_PRINTF2(_L("Writing following data: %S"), &writeData);
-		
-		HBufC8*	writeBuf = NULL;
-		TRAPD (err, writeBuf = HBufC8::NewL( writeData.Length() ));
-		if (err == KErrNone)
-			{
-			TPtr8 writeBufPtr = writeBuf->Des();
-			writeBufPtr.Copy(writeData);
-			
-			TInt64 pos = 0;
-			GET_OPTIONAL_INT64_PARAMETER(KPosition(), aSection, pos);
-			
-			err = iRawDisk->Write(pos, writeBufPtr);
-			
-			if(err == KErrNone)
-				{
-				INFO_PRINTF1(_L("Writing data directly to disc was successful!"));
-				}
-			else
-				{
-				ERR_PRINTF2(_L("Writing data directly to disc failed with error %d"), err);
-				SetError(err);
-				}
-			delete writeBuf;
-			writeBuf = NULL;
-			}
-		}
-    else
-    	{
-    	ERR_PRINTF2(_L("No %S"), &KData());
-    	SetBlockResult(EFail);
-    	}
-    }
-
-
-TBool CT_RawDiskData::GetDriveNumber(const TDesC& aSection, const TDesC& aParameterName, TDriveNumber& aDriveNumber)
-/** Reads drive number from INI-file */
-    {
-	// Read drive number from INI file
-	TPtrC driveNumberStr;
-	TBool ret = GET_OPTIONAL_STRING_PARAMETER(aParameterName, aSection, driveNumberStr);
-	if (ret)
-		{
-		if (driveNumberStr == KDriveA)
-			{
-			aDriveNumber = EDriveA;
-			}
-		else if (driveNumberStr == KDriveB)
-			{
-			aDriveNumber = EDriveB;
-			}
-		else if (driveNumberStr == KDriveC)
-			{
-			aDriveNumber = EDriveC;
-			}
-		else if (driveNumberStr == KDriveD)
-			{
-			aDriveNumber = EDriveD;
-			}
-		else if (driveNumberStr == KDriveE)
-			{
-			aDriveNumber = EDriveE;
-			}
-		else if (driveNumberStr == KDriveF)
-			{
-			aDriveNumber = EDriveF;
-			}
-		else if (driveNumberStr == KDriveG)
-			{
-			aDriveNumber = EDriveG;
-			}
-		else if (driveNumberStr == KDriveH)
-			{
-			aDriveNumber = EDriveH;
-			}
-		else if (driveNumberStr == KDriveI)
-			{
-			aDriveNumber = EDriveI;
-			}
-		else if (driveNumberStr == KDriveJ)
-			{
-			aDriveNumber = EDriveJ;
-			}
-		else if (driveNumberStr == KDriveK)
-			{
-			aDriveNumber = EDriveK;
-			}
-		else if (driveNumberStr == KDriveL)
-			{
-			aDriveNumber = EDriveL;
-			}
-		else if (driveNumberStr == KDriveM)
-			{
-			aDriveNumber = EDriveM;
-			}
-		else if (driveNumberStr == KDriveN)
-			{
-			aDriveNumber = EDriveN;
-			}
-		else if (driveNumberStr == KDriveO)
-			{
-			aDriveNumber = EDriveO;
-			}
-		else if (driveNumberStr == KDriveP)
-			{
-			aDriveNumber = EDriveP;
-			}
-		else if (driveNumberStr == KDriveQ)
-			{
-			aDriveNumber = EDriveQ;
-			}
-		else if (driveNumberStr == KDriveR)
-			{
-			aDriveNumber = EDriveR;
-			}
-		else if (driveNumberStr == KDriveS)
-			{
-			aDriveNumber = EDriveS;
-			}
-		else if (driveNumberStr == KDriveT)
-			{
-			aDriveNumber = EDriveT;
-			}
-		else if (driveNumberStr == KDriveU)
-			{
-			aDriveNumber = EDriveU;
-			}
-		else if (driveNumberStr == KDriveV)
-			{
-			aDriveNumber = EDriveV;
-			}
-		else if (driveNumberStr == KDriveW)
-			{
-			aDriveNumber = EDriveW;
-			}
-		else if (driveNumberStr == KDriveX)
-			{
-			aDriveNumber = EDriveX;
-			}
-		else if (driveNumberStr == KDriveY)
-			{
-			aDriveNumber = EDriveY;
-			}
-		else if (driveNumberStr == KDriveZ)
-			{
-			aDriveNumber = EDriveZ;
-			}
-		else
-			{
-			TInt driveNumber = 0;
-			ret = GET_OPTIONAL_INT_PARAMETER(aParameterName, aSection, driveNumber);
-			if (ret)
-				{
-				aDriveNumber = (TDriveNumber) driveNumber ;
-				}
-			}
-		}
-
-	return ret;
-	}
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_SfSrvServer.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_SfSrvServer.h"
-
-CT_SfSrvServer* CT_SfSrvServer::NewL()
-/**
- * @return - Instance of the test server
- * Same code for Secure and non-secure variants
- * Called inside the MainL() function to create and start the
- * CTestServer derived server.
- */
-	{
-	CT_SfSrvServer* server = new (ELeave) CT_SfSrvServer();
-	CleanupStack::PushL(server);
-	server->ConstructL();
-	CleanupStack::Pop(server);
-	return server;
-	}
-
-LOCAL_C void MainL()
-/**
- * Secure variant
- * Much simpler, uses the new Rendezvous() call to sync with the client
- */
-	{
-#if (defined __DATA_CAGING__)
-	RProcess().DataCaging(RProcess::EDataCagingOn);
-	RProcess().SecureApi(RProcess::ESecureApiOn);
-#endif
-	CActiveScheduler* sched=NULL;
-	sched=new(ELeave) CActiveScheduler;
-	CActiveScheduler::Install(sched);
-	CT_SfSrvServer* server = NULL;
-	TRAPD(err, server = CT_SfSrvServer::NewL());
-	if(!err)
-		{
-		RProcess::Rendezvous(KErrNone);
-		sched->Start();
-		}
-	delete server;
-	delete sched;
-	}
-
-GLDEF_C TInt E32Main()
-/**
- * @return - Standard Epoc error code on process exit
- * Secure variant only
- * Process entry point. Called by client using RProcess API
- */
-	{
-	CTrapCleanup* cleanup = CTrapCleanup::New();
-	if(cleanup == NULL)
-		{
-		return KErrNoMemory;
-		}
-#if (defined TRAP_IGNORE)
-	TRAP_IGNORE(MainL());
-#else
-	TRAPD(err,MainL());
-#endif
-	delete cleanup;
-	return KErrNone;
-    }
--- a/baseapitest/basesvs/validation/f32/sfsrv/src/T_VolumeInfoData.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "T_VolumeInfoData.h"
-
-
-// Commands
-_LIT( KCmdNew,               "new" );
-_LIT( KCmdDestructor,        "~" );
-
-CT_VolumeInfoData* CT_VolumeInfoData::NewL()
-/**
-* Two phase constructor
-*/
-	{
-	CT_VolumeInfoData* ret = new (ELeave) CT_VolumeInfoData();
-	CleanupStack::PushL( ret );
-	ret->ConstructL();
-	CleanupStack::Pop( ret );
-	return ret;
-	}
-
-CT_VolumeInfoData::CT_VolumeInfoData()
-:	iVolumeInfo(NULL)
-/**
-* Protected constructor. First phase construction
-*/
-	{
-	}
-	
-void CT_VolumeInfoData::ConstructL()
-/**
-* Protected constructor. Second phase construction
-*/
-	{
-	}
-	
-CT_VolumeInfoData::~CT_VolumeInfoData()
-/**
-* Destructor.
-*/
-	{
-	DoCleanup();
-	}
-	
-
-TAny* CT_VolumeInfoData::GetObject()
-/**
-* Return a pointer to the object that the data wraps
-*
-* @return pointer to the object that the data wraps
-*/
-	{
-	return iVolumeInfo;
-	}
-
-void CT_VolumeInfoData::SetObjectL(TAny* aAny)
-	{
-	DoCleanup();
-	iVolumeInfo = static_cast<TVolumeInfo*> (aAny);
-	}
-	
-void CT_VolumeInfoData::DisownObjectL()
-	{
-	iVolumeInfo = NULL;
-	}
-	
-inline TCleanupOperation CT_VolumeInfoData::CleanupOperation()
-	{
-	return CleanupOperation;
-	}
-
-void CT_VolumeInfoData::CleanupOperation(TAny* aAny)
-	{
-	TVolumeInfo* volumeInfo = static_cast<TVolumeInfo*>(aAny);
-	delete volumeInfo;
-	}
-
-TBool CT_VolumeInfoData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& /*aSection*/, const TInt /*aAsyncErrorIndex*/ )
-/**
-* Process a command read from the ini file
-*
-* @param aCommand	the command to process
-* @param aSection		the entry in the ini file requiring the command to be processed
-*
-* @return ETrue if the command is processed
-*/
-	{
-	TBool retVal = ETrue;
-	
-	if ( aCommand == KCmdNew )
-		{
-		DoCmdNew();
-		}
-	else if ( aCommand == KCmdDestructor )
-		{
-		DoCleanup();
-		}
-	else
-	    {
-	    retVal = EFalse;    
-	    }
-	
-	return retVal;
-	}
-	
-void CT_VolumeInfoData::DoCmdNew()
-/** Creates new TVolumeInfo class instance */
-	{
-	INFO_PRINTF1( _L( "Create new TVolumeInfo class instance" ) );
-	
-	TRAPD( err, iVolumeInfo = new (ELeave) TVolumeInfo() );
-	if ( err!=KErrNone )
-		{
-		ERR_PRINTF2( _L( "new error %d" ), err );
-		SetError( err );
-		}
-	}
-
-void CT_VolumeInfoData::DoCleanup()
-	{
-	INFO_PRINTF1( _L( "Delete TVolumeInfo class instance." ) );
-	
-	delete iVolumeInfo;
-	iVolumeInfo = NULL;
-	}
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/1mb	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-DUAL-DRIVE-Publicapi-RAM.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1059 +0,0 @@
-[include]
-file1			=\base\dual_drive_env.ini
-
-
-[file]
-name			=file
-
-
-
-[file1]
-name			=file1
-
-[file2]
-name			=file2
-
-
-[fileMan]
-name			=fileMan
-
-
-[fileMan2]
-name			=fileMan2
-
-
-
-[fileMan1]
-name			=fileMan1
-
-
-
-[format1]
-name			=format1
-
-
-[format2]
-name			=format2
-
-[rfs]
-name			=rfs
-
-
-[rfs1]
-name			=rfs1
-
-[rfs2]
-name			=rfs2
-
-[tEntry1]
-name            =tEntry1
-
-[tEntry2]
-name            =tEntry2
-
-
-[cdir1]
-name            =cdir1
-
-[cdir2]
-name            =cdir2
-
-[cdirScan1]
-name            =cdirScan1
-
-[cdirScan2]
-name            =cdirScan2
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0001_GetMediaSerialNumber_drive1]
-drive			={Drives, Drive1}
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0001_GetMediaSerialNumber_drive2]
-drive			={Drives, Drive2}
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll_drive1]
-dir			    ={Drives, DriveTestPath1}test\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll2_drive1]
-dir			    ={Drives, DriveTestPath1}test2\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll3_drive1]
-dir			    ={Drives, DriveTestPath1}test3\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll4_drive1]
-dir			    ={Drives, DriveTestPath1}test4\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry_drive1]
-entry			=tEntry1
-name			={Drives, DriveTestPath1}test\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry2_drive1]
-entry			=tEntry1
-name			={Drives, DriveTestPath1}test2\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry3_drive1]
-entry			=tEntry1
-name			={Drives, DriveTestPath1}test3\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry4_drive1]
-entry			=tEntry1
-name			={Drives, DriveTestPath1}test4\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive1]
-expected		=true
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir_drive1]
-dir			={Drives, DriveTestPath1}test\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir2_drive1]
-dir			={Drives, DriveTestPath1}test2\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir3_drive1]
-dir			={Drives, DriveTestPath1}test3\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir4_drive1]
-dir			={Drives, DriveTestPath1}test4\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll_drive2]
-dir			    ={Drives, DriveTestPath2}test\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll2_drive2]
-dir			    ={Drives, DriveTestPath2}test2\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll3_drive2]
-dir			    ={Drives, DriveTestPath2}test3\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_MkdirAll4_drive2]
-dir			    ={Drives, DriveTestPath2}test4\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry_drive2]
-entry			=tEntry2
-name			={Drives, DriveTestPath2}test\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry2_drive2]
-entry			=tEntry2
-name			={Drives, DriveTestPath2}test2\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry3_drive2]
-entry			=tEntry2
-name			={Drives, DriveTestPath2}test3\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_Entry4_drive2]
-entry			=tEntry2
-name			={Drives, DriveTestPath2}test4\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_IsDir_drive2]
-expected		=true
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir_drive2]
-dir			={Drives, DriveTestPath2}test\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir2_drive2]
-dir			={Drives, DriveTestPath2}test2\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir3_drive2]
-dir			={Drives, DriveTestPath2}test3\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0002_RmDir4_drive2]
-dir			={Drives, DriveTestPath2}test4\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0003_ErasePassword_drive1]
-drive			={Drives, Drive1}
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0003_ErasePassword_drive2]
-drive			={Drives, Drive2}
-
-
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0004_Open_drive1]
-RFs			=rfs1
-drive			={Drives, DrivePath1}
-format			=EHighDensity|EQuickFormat
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0004_Open_drive2]
-RFs			=rfs2
-drive			={Drives, DrivePath2}
-format			=EHighDensity|EQuickFormat
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Open_drive1]
-RFs			=rfs1
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}USBLOAD.ZIP
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Open2_drive1]
-RFs			=rfs1
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}test.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_NewL_drive1]
-rfsObject			=rfs1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy_drive1]
-newname					={Drives, DriveChar1}:\USBLOAD.ZIP
-rfileObject			=file1
-operation				=0
-async						=false
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy2_drive1]
-newname					={Drives, DriveChar1}:\test.txt
-rfileObject			=file1
-operation				=0
-async						=false
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Att1_drive1]
-name		={Drives, DriveChar1}:\USBLOAD.ZIP
-issetatt		=true
-setattmask		=KEntryAttNormal
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Att2_drive1]
-name		={Drives, DriveChar1}:\USBLOAD.ZIP
-issetatt		=true
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs1_drive1]
-filename		={Drives, DriveChar1}:\USBLOAD.ZIP
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttNormal
-operation		=ERecurse
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs_drive1]
-filename		={Drives, DriveChar1}:\USBLOAD.ZIP
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs2_drive1]
-filename		={Drives, DriveChar1}:\USBLOAD.ZIP
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete_drive1]
-name={Drives, DriveChar1}:\USBLOAD.ZIP
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete2_drive1]
-name={Drives, DriveChar1}:\test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete_drive2]
-name={Drives, DriveChar2}:\USBLOAD.ZIP
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Delete2_drive2]
-name={Drives, DriveChar2}:\test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Open_drive2]
-RFs			=rfs2
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}USBLOAD.ZIP
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Open2_drive2]
-RFs			=rfs2
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_NewL_drive2]
-rfsObject			=rfs2
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy_drive2]
-newname					={Drives, DriveChar2}:\USBLOAD.ZIP
-rfileObject			=file2
-operation				=0
-async						=false
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Copy2_drive2]
-newname					={Drives, DriveChar2}:\test.txt
-rfileObject			=file2
-operation				=0
-async						=false
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Att1_drive2]
-name		={Drives, DriveChar2}:\USBLOAD.ZIP
-issetatt		=true
-setattmask		=KEntryAttNormal
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Att2_drive2]
-name		={Drives, DriveChar2}:\USBLOAD.ZIP
-issetatt		=true
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs1_drive2]
-filename		={Drives, DriveChar2}:\USBLOAD.ZIP
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttNormal
-operation		=ERecurse
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0005_Attribs2_drive2]
-filename		={Drives, DriveChar2}:\USBLOAD.ZIP
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0006_UnlockDrive_drive1]
-drive_old_password	=test
-drive			={Drives, Drive1}
-store			=FALSE
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0006_UnlockDrive_drive2]
-drive_old_password	=test
-drive			={Drives, Drive2}
-store			=FALSE
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0007_ClearPassword_drive1]
-drive_old_password	=test
-drive			={Drives, Drive1}
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0007_ClearPassword_drive2]
-drive_old_password	=test
-drive			={Drives, Drive2}
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Replace_drive1]
-RFs=rfs1
-file_mode   =EFileShareAny | EFileWrite
-file        ={Drives, DriveChar1}:\test.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Write_drive1]
-datawrite=Open test
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Open_drive1]
-RFs=rfs1
-file_mode   =EFileShareAny | EFileWrite
-file    ={Drives, DriveChar1}:\test.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Read_drive1]
-expected_string=Open test
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Delete_drive1]
-name={Drives, DriveChar1}:\test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Replace_drive2]
-RFs=rfs2
-file_mode=EFileShareAny | EFileWrite
-file={Drives, DriveChar2}:\test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Copy_drive2]
-newname					={Drives, DriveChar2}:\test.txt
-rfileObject			=file2
-operation				=0
-async						=false
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Copy_drive1]
-newname					={Drives, DriveChar1}:\test.txt
-rfileObject			=file1
-operation				=0
-async						=false
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Write_drive2]
-datawrite=Open test
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Open_drive2]
-RFs=rfs2
-file_mode=EFileShareAny | EFileWrite
-file={Drives, DriveChar2}:\test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Open1_drive2]
-RFs=rfs2
-file_mode=EFileShareAny | EFileWrite
-file={Drives, SystemDriveTestPath}test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Open1_drive1]
-RFs=rfs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, SystemDriveTestPath}test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_NewL_drive1]
-rfsObject			=rfs1
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_NewL_drive2]
-rfsObject			=rfs2
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Read_drive2]
-expected_string=Open test
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0008_Delete_drive2]
-name={Drives, DriveChar2}:\test.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Open_drive1]
-RFs			=rfs1
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}Test1.txt
-
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_NewL_drive1]
-rfsObject			=rfs1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Copy_drive1]
-newname					={Drives, DriveChar1}:\Test1.txt
-rfileObject			=file1
-operation				=0
-async						=false
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_NewL_drive1]
-rfsObject		=rfs1
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Rename_drive1]
-newname			={Drives, DriveChar1}:\Renamed.txt
-oldname		={Drives, DriveChar1}:\Test1.txt
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Open_drive1]
-file				={Drives, DriveChar1}:\Renamed.txt
-RFs					=rfs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Delete_drive1]
-name={Drives, DriveChar1}:\Renamed.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Open_drive2]
-RFs			=rfs2
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}Test1.txt
-
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_NewL_drive2]
-rfsObject			=rfs2
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Copy_drive2]
-newname					={Drives, DriveChar2}:\Test1.txt
-rfileObject			=file2
-operation				=0
-async						=false
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_NewL_drive2]
-rfsObject		=rfs2
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Rename_drive2]
-newname			={Drives, DriveChar2}:\Renamed.txt
-oldname		={Drives, DriveChar2}:\Test1.txt
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Open_drive2]
-file				={Drives, DriveChar2}:\Renamed.txt
-RFs					=rfs2
-file_mode		=EFileShareAny
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0009_Delete_drive2]
-name={Drives, DriveChar2}:\Renamed.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_MkDir_drive1]
-dir			={Drives, DriveChar1}:\Copy\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_MkDir_drive2]
-dir			={Drives, DriveChar2}:\Copy\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_NewL_drive1]
-rfsObject		=rfs1
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_Move_drive1]
-filefrom		={Drives, DriveChar1}:\Renamed.txt
-fileto			={Drives, DriveChar2}:\Copy\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_Open_drive1]
-file				={Drives, DriveChar2}:\Copy\Renamed.txt
-RFs					=rfs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_Move_drive2]
-filefrom		={Drives, DriveChar2}:\Renamed.txt
-fileto			={Drives, DriveChar1}:\Copy\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_Open_drive2]
-file				={Drives, DriveChar1}:\Copy\Renamed.txt
-RFs					=rfs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_Delete_drive1]
-name={Drives, DriveChar1}:\Copy\Renamed.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_Attribs_drive1]
-filename		={Drives, DriveChar1}:\Copy\Renamed.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_Attribs_drive2]
-filename		={Drives, DriveChar2}:\Copy\Renamed.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_Delete_drive2]
-name={Drives, DriveChar2}:\Copy\Renamed.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_RmDir_drive1]
-dir			={Drives, DriveChar1}:\Copy\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0010_RmDir_drive2]
-dir			={Drives, DriveChar2}:\Copy\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0012_Volume_drive1]
-drive			={Drives, Drive1}
-save_in_instance	=TRUE
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0012_SetVolumeLabel_drive1]
-drive			={Drives, Drive1}
-volume_label		=Test
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0012_Volume_drive1]
-drive			={Drives, Drive1}
-volume_label		=Test
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0012_SetVolumeLabel_drive1]
-drive			={Drives, Drive1}
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0012_Volume_drive2]
-drive			={Drives, Drive2}
-save_in_instance	=TRUE
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0012_SetVolumeLabel_drive2]
-drive			={Drives, Drive2}
-volume_label		=Test
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0012_Volume_drive2]
-drive			={Drives, Drive2}
-volume_label		=Test
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0012_SetVolumeLabel_drive2]
-drive			={Drives, Drive2}
-
-///////////
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_MkDir_drive1]
-dir			={Drives, DriveChar1}:\Move\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_NewL_drive1]
-rfsObject		=rfs1
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_Move_drive1]
-filefrom		={Drives, SystemDriveTestPath}Test1.txt
-fileto			={Drives, DriveChar1}:\Move\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_Open_drive1]
-file				={Drives, DriveChar1}:\Move\Test1.txt
-RFs					=rfs1
-file_mode		    =EFileShareAny
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_Move2_drive1]
-fileto		        ={Drives, SystemDriveTestPath}
-filefrom			={Drives, DriveChar1}:\Move\Test1.txt
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_Open2_drive1]
-file				={Drives, SystemDriveTestPath}Test1.txt
-RFs					=rfs1
-file_mode		    =EFileShareAny
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_RmDir_drive1]
-dir			={Drives, DriveChar1}:\Move\
-///
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_MkDir_drive2]
-dir			={Drives, DriveChar2}:\Move\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_NewL_drive2]
-rfsObject		=rfs2
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_Move_drive2]
-filefrom		={Drives, SystemDriveTestPath}Test2.txt
-fileto			={Drives, DriveChar2}:\Move\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_Open_drive2]
-file				={Drives, DriveChar2}:\Move\Test2.txt
-RFs					=rfs2
-file_mode		    =EFileShareAny
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_Move2_drive2]
-fileto		        ={Drives, SystemDriveTestPath}
-filefrom			={Drives, DriveChar2}:\Move\Test2.txt
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_Open2_drive2]
-file				={Drives, SystemDriveTestPath}Test2.txt
-RFs					=rfs2
-file_mode		    =EFileShareAny
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0011_RmDir_drive2]
-dir			={Drives, DriveChar2}:\Move\
-
-///////////
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll_drive1]
-dir			={Drives, DrivePath1}dirscan\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_NewL_drive1]
-rfsObject		=rfs1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy1_drive1]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, DrivePath1}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy2_drive1]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, DrivePath1}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy3_drive1]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, DrivePath1}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy4_drive1]
-oldname			={Drives, SystemDriveTestPath}test.txt
-newname			={Drives, DrivePath1}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll2_drive1]
-dir			={Drives, DrivePath1}dirscan\TempDir\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_CDirScan_NewL_drive1]
-rfsObject		=rfs1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_SetScanDataL_drive1]
-path			={Drives, DrivePath1}dirscan\
-attmask			=KEntryAttNormal
-sortkey			=ESortByName
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_NextL_drive1]
-dirObject		=cdir1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_FullPath_drive1]
-expected		={Drives, DrivePath1}dirscan\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Count_drive1]
-expected		=4
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_index1_drive1]
-element_number		=0
-entryObject		=tEntry1
-expectedName		=test.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_index2_drive1]
-element_number		=1
-entryObject		=tEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_index3_drive1]
-element_number		=2
-entryObject		=tEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_index4_drive1]
-element_number		=3
-entryObject		=tEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir1_drive1]
-dir			={Drives, DrivePath1}dirscan\TempDir\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Delete_drive1]
-filename		={Drives, DrivePath1}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir2_drive1]
-path			={Drives, DrivePath1}dirscan\
-async			=false
-dir			={Drives, DrivePath1}dirscan\
-///////////
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll_drive2]
-dir			={Drives, DrivePath2}dirscan\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_NewL_drive2]
-rfsObject		=rfs2
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy1_drive2]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, DrivePath2}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy2_drive2]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, DrivePath2}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy3_drive2]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, DrivePath2}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Copy4_drive2]
-oldname			={Drives, SystemDriveTestPath}test.txt
-newname			={Drives, DrivePath2}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_MkDirAll2_drive2]
-dir			={Drives, DrivePath2}dirscan\TempDir\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_CDirScan_NewL_drive2]
-rfsObject		=rfs2
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_SetScanDataL_drive2]
-path			={Drives, DrivePath2}dirscan\
-attmask			=KEntryAttNormal
-sortkey			=ESortByName
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_NextL_drive2]
-dirObject		=cdir2
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_FullPath_drive2]
-expected		={Drives, DrivePath2}dirscan\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Count_drive2]
-expected		=4
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_index1_drive2]
-element_number		=0
-entryObject		=tEntry2
-expectedName		=test.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_index2_drive2]
-element_number		=1
-entryObject		=tEntry2
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_index3_drive2]
-element_number		=2
-entryObject		=tEntry2
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_index4_drive2]
-element_number		=3
-entryObject		=tEntry2
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir1_drive2]
-dir			={Drives, DrivePath2}dirscan\TempDir\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_Delete_drive2]
-filename		={Drives, DrivePath2}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0015_RmDir2_drive2]
-path			={Drives, DrivePath2}dirscan\
-async			=false
-dir			    ={Drives, DrivePath2}dirscan\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0018_Open_drive2]
-RFs			=rfs2
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}big.txt
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0018_Open2_drive2]
-RFs			=rfs2
-file_mode		=EFileShareAny | EFileWrite
-file			={Drives, DrivePath2}big.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0018_NewL_drive2]
-rfsObject			=rfs2
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0018_Copy_drive2]
-newname					={Drives, DriveChar2}:\big.txt
-rfileObject			=file2
-operation				=0
-async						=false
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0018_Write_drive2]
-position=0
-datawrite=opentest
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0018_Read_drive2]
-position=0
-length=8
-expected_string=opentest
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0018_Delete_drive2]
-name		={Drives, DriveChar2}:\big.txt
-
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0020_Open_drive1]
-RFs			=rfs1
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}big.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0020_NewL_drive1]
-rfsObject			=rfs1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0020_Copy_drive1]
-newname					={Drives, DriveChar1}:\big.txt
-rfileObject			=file1
-operation				=0
-async						=false
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0020_Attribs_drive1]
-filename		={Drives, DriveChar1}:\big.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0020_Delete_drive1]
-name={Drives, DriveChar1}:\big.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0021_MkDir_drive1]
-dir			={Drives, DriveChar1}:\Move\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0021_NewL_drive1]
-rfsObject		=rfs1
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0021_Move_drive1]
-filefrom		={Drives, SystemDriveTestPath}USBLOAD.zip
-fileto			={Drives, DriveChar1}:\Move\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0021_Open_drive1]
-file				={Drives, DriveChar1}:\Move\USBLOAD.zip
-RFs					=rfs1
-file_mode		    =EFileShareAny
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0021_Move2_drive1]
-fileto		        ={Drives, SystemDriveTestPath}
-filefrom			={Drives, DriveChar1}:\Move\USBLOAD.zip
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0021_Open2_drive1]
-file				={Drives, SystemDriveTestPath}USBLOAD.zip
-RFs					=rfs1
-file_mode		    =EFileShareAny
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0021_RmDir_drive1]
-dir			={Drives, DriveChar1}:\Move\
-
-[PBASE-F32-DualDrive-Publicapi-RAM-FinaliseDrive_drive1]
-finaliseDrvMode     =EFinal_RW
-drive               ={Drives, Drive1}
-
-[PBASE-F32-DualDrive-Publicapi-RAM-FinaliseDrive_drive2]
-finaliseDrvMode     =EFinal_RW
-drive               ={Drives, Drive2}
-
-//////////////////////////
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_MkDirAll_drive1]
-dir			={Drives, DriveChar1}:\dirscan\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_NewL_drive1]
-rfsObject		=rfs1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_Copy1_drive1]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, DriveChar1}:\dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_Copy2_drive1]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, DriveChar1}:\dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_Copy3_drive1]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, DriveChar1}:\dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_Copy4_drive1]
-oldname			={Drives, SystemDriveTestPath}test.txt
-newname			={Drives, DriveChar1}:\dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_MkDirAll2_drive1]
-dir			={Drives, DriveChar1}:\dirscan\TempDir\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_CDirScan_NewL_drive1]
-rfsObject		=rfs1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_SetScanDataL_drive1]
-path			={Drives, DriveChar1}:\dirscan\
-attmask			=KEntryAttReadOnly|KEntryAttMatchExclusive
-sortkey			=ESortByName
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_NextL_drive1]
-dirObject		=cdir1
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_FullPath_drive1]
-expected		={Drives, DriveChar1}:\dirscan\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_Count_drive1]
-expected		=2
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_index1_drive1]
-element_number		=0
-entryObject		=tEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_index2_drive1]
-element_number		=1
-entryObject		=tEntry1
-expectedName		=Test2.txt
-
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_RmDir1_drive1]
-dir			={Drives, DriveChar1}:\dirscan\TempDir\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_Delete_drive1]
-filename		={Drives, DriveChar1}:\dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_RmDir2_drive1]
-dir			={Drives, DriveChar1}:\dirscan\
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_SetAtt1_drive1]
-clearattmask		=KEntryAttNormal
-name			={Drives, DriveChar1}:\dirscan\Test1.txt
-setattmask		=KEntryAttReadOnly
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_SetAtt2_drive1]
-clearattmask		=KEntryAttNormal
-name			={Drives, DriveChar1}:\dirscan\Test2.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_SetAtt4_drive1]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, DriveChar1}:\dirscan\Test1.txt
-setattmask		=KEntryAttNormal
-
-[PBASE-F32-DualDrive-Publicapi-RAM-0023_SetAtt5_drive1]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, DriveChar1}:\dirscan\Test2.txt
-setattmask		=KEntryAttNormal
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-Dir-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,951 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-[RFs1]
-name=RFs1
-
-
-[CFileMan1]
-name=CFileMan1
-
-
-[TEntry1]
-name=TEntry1
-
-
-[CDir1]
-name=CDir1
-
-
-[CDir2]
-name=CDir2
-
-
-[PBASE-F32-Dir-PublicApi-0001-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0001-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0001-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0001-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0001-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0001-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0001-002-GetDir_command004]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=ESortByName
-attmask			=KEntryAttHidden
-
-
-[PBASE-F32-Dir-PublicApi-0001-002-Count_command005]
-expected		=4
-
-
-[PBASE-F32-Dir-PublicApi-0001-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0001-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0001-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0002-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0002-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0002-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0002-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0002-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0002-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0002-002-GetDir_command005]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=ESortByName
-attmask			=KEntryAttHidden
-
-
-[PBASE-F32-Dir-PublicApi-0002-002-index_command007]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-Dir-PublicApi-0002-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0002-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0002-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0003-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0003-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0003-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0003-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0003-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0003-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0003-002-GetDir_command005]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=ESortNone
-attmask			=KEntryAttHidden
-
-
-[PBASE-F32-Dir-PublicApi-0003-002-Sort_command007]
-sortkey			=ESortByName|EAscending
-
-
-[PBASE-F32-Dir-PublicApi-0003-002-index_command008]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-Dir-PublicApi-0003-002-index_command009]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-Dir-PublicApi-0003-002-index_command010]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-Dir-PublicApi-0003-002-index_command011]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-Dir-PublicApi-0003-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0003-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0003-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0004-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0004-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0004-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0004-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0004-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0004-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0004-002-GetDir_command005]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=ESortNone
-attmask			=KEntryAttHidden
-
-
-[PBASE-F32-Dir-PublicApi-0004-002-Sort_command007]
-sortkey			=ESortByExt|EDescending
-
-
-[PBASE-F32-Dir-PublicApi-0004-002-index_command008]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-Dir-PublicApi-0004-002-index_command009]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-Dir-PublicApi-0004-002-index_command010]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-Dir-PublicApi-0004-002-index_command011]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=big_line.txt 
-
-
-[PBASE-F32-Dir-PublicApi-0004-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0004-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0004-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0005-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0005-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0005-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0005-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0005-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0005-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0005-002-GetDir_command005]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=ESortNone
-attmask			=KEntryAttHidden
-
-
-[PBASE-F32-Dir-PublicApi-0005-002-Sort_command007]
-sortkey			=ESortByUid
-
-
-[PBASE-F32-Dir-PublicApi-0005-002-index_command008]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-Dir-PublicApi-0005-002-index_command009]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-Dir-PublicApi-0005-002-index_command010]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-Dir-PublicApi-0005-002-index_command011]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-Dir-PublicApi-0005-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0005-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0005-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0006-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0006-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0006-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0006-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0006-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0006-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-MkDirAll_command005]
-dir			={Drives, RAMDriveTestPath}Dir\BBDir\
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}Dir\CCDir\
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-MkDirAll_command007]
-dir			={Drives, RAMDriveTestPath}Dir\AADir\
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-SetModified_command008]
-name			={Drives, RAMDriveTestPath}Dir\big_line.txt
-time			=20060103:
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-SetModified_command009]
-name			={Drives, RAMDriveTestPath}Dir\Test1.txt
-time			=20060102:
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-SetModified_command010]
-name			={Drives, RAMDriveTestPath}Dir\Test2.txt
-time			=20060101:
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-SetModified_command011]
-name			={Drives, RAMDriveTestPath}Dir\Test3.txt
-time			=20060104:
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-GetDir_command012]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=EDirsLast
-attmask			=KEntryAttMaskSupported
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-Sort_command014]
-sortkey			=EDirsFirst|EDirDescending|ESortByDate
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-index_command015]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=CCDir
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-index_command016]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=BBDir
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-index_command017]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=AADir
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-index_command018]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-index_command019]
-element_number		=4
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-index_command020]
-element_number		=5
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-index_command021]
-element_number		=6
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-RmDir_command022]
-dir			={Drives, RAMDriveTestPath}Dir\AADir\
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-RmDir_command023]
-dir			={Drives, RAMDriveTestPath}Dir\BBDir\
-
-
-[PBASE-F32-Dir-PublicApi-0006-002-RmDir_command024]
-dir			={Drives, RAMDriveTestPath}Dir\CCDir\
-
-
-[PBASE-F32-Dir-PublicApi-0006-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0006-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0006-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0007-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0007-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0007-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0007-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0007-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0007-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-MkDirAll_command005]
-dir			={Drives, RAMDriveTestPath}Dir\BBDir\
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}Dir\CCDir\
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-MkDirAll_command007]
-dir			={Drives, RAMDriveTestPath}Dir\AADir\
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-GetDir_command008]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=ESortNone
-attmask			=KEntryAttMaskSupported
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-Sort_command010]
-sortkey			=EDirsLast|ESortBySize
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-index_command011]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-index_command012]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-index_command013]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-index_command014]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-index_command015]
-element_number		=4
-entryObject		=TEntry1
-expectedName		=AADir
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-index_command016]
-element_number		=5
-entryObject		=TEntry1
-expectedName		=BBDir
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-index_command017]
-element_number		=6
-entryObject		=TEntry1
-expectedName		=CCDir
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-RmDir_command018]
-dir			={Drives, RAMDriveTestPath}Dir\AADir\
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-RmDir_command019]
-dir			={Drives, RAMDriveTestPath}Dir\BBDir\
-
-
-[PBASE-F32-Dir-PublicApi-0007-002-RmDir_command020]
-dir			={Drives, RAMDriveTestPath}Dir\CCDir\
-
-
-[PBASE-F32-Dir-PublicApi-0007-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0007-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0007-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0008-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0008-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}Dir\BBDir\
-
-
-[PBASE-F32-Dir-PublicApi-0008-002-MkDirAll_command007]
-dir			={Drives, RAMDriveTestPath}Dir\CCDir\
-
-
-[PBASE-F32-Dir-PublicApi-0008-002-MkDirAll_command008]
-dir			={Drives, RAMDriveTestPath}Dir\AADir\
-
-
-[PBASE-F32-Dir-PublicApi-0008-002-GetDir_command009]
-dirEntryObject		=CDir1
-dirDirectoryObject	=CDir2
-name			={Drives, RAMDriveTestPath}Dir\
-isdirlist		=TRUE
-sortkey			=ESortNone
-attmask			=KEntryAttMaskSupported
-
-
-[PBASE-F32-Dir-PublicApi-0008-002-Sort_command011]
-sortkey			=EDirsAnyOrder
-
-
-[PBASE-F32-Dir-PublicApi-0008-002-RmDir_command012]
-dir			={Drives, RAMDriveTestPath}Dir\AADir\
-
-
-[PBASE-F32-Dir-PublicApi-0008-002-RmDir_command013]
-dir			={Drives, RAMDriveTestPath}Dir\BBDir\
-
-
-[PBASE-F32-Dir-PublicApi-0008-002-RmDir_command014]
-dir			={Drives, RAMDriveTestPath}Dir\CCDir\
-
-
-[PBASE-F32-Dir-PublicApi-0008-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0009-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0009-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0009-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0009-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0009-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0009-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0009-002-GetDir_command006]
-dirEntryObject		=CDir1
-dirDirectoryObject	=CDir2
-name			={Drives, RAMDriveTestPath}Dir\
-isdirlist		=TRUE
-sortkey			=ESortByName|EAscending
-attmask			=KEntryAttMaskSupported
-
-
-[PBASE-F32-Dir-PublicApi-0009-002-Sort_command008]
-sortkey			=ESortByName|EAscending
-
-
-[PBASE-F32-Dir-PublicApi-0009-002-index_command009]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-Dir-PublicApi-0009-002-index_command010]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-Dir-PublicApi-0009-002-index_command011]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-Dir-PublicApi-0009-002-index_command012]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-Dir-PublicApi-0009-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0009-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0009-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0010-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}Dir\BBDir\
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-MkDirAll_command007]
-dir			={Drives, RAMDriveTestPath}Dir\CCDir\
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-MkDirAll_command008]
-dir			={Drives, RAMDriveTestPath}Dir\AADir\
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-GetDir_command009]
-dirEntryObject		=CDir1
-dirDirectoryObject	=CDir2
-name			={Drives, RAMDriveTestPath}Dir\
-isdirlist		=TRUE
-sortkey			=ESortNone
-attmask			=KEntryAttMaskSupported
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-Sort_command011]
-sortkey			=EDirDescending|EDirsFirst
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-index_command012]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=CCDir
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-index_command013]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=BBDir
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-index_command014]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=AADir
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-RmDir_command015]
-dir			={Drives, RAMDriveTestPath}Dir\AADir\
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-RmDir_command016]
-dir			={Drives, RAMDriveTestPath}Dir\BBDir\
-
-
-[PBASE-F32-Dir-PublicApi-0010-002-RmDir_command017]
-dir			={Drives, RAMDriveTestPath}Dir\CCDir\
-
-
-[PBASE-F32-Dir-PublicApi-0010-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0101-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0101-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0101-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0101-002-GetDir_command005]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=ESortByName
-attmask			=KEntryAttHidden
-
-
-[PBASE-F32-Dir-PublicApi-0101-002-index_command007]
-element_number		=50
-entryObject		=TEntry1
-
-
-[PBASE-F32-Dir-PublicApi-0101-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0101-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0101-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0102-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Dir\
-
-
-[PBASE-F32-Dir-PublicApi-0102-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0102-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Dir\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Dir-PublicApi-0102-002-GetDir_command005]
-dirEntryObject		=CDir1
-name			={Drives, RAMDriveTestPath}Dir\
-sortkey			=ESortByName
-attmask			=KEntryAttHidden
-
-
-[PBASE-F32-Dir-PublicApi-0102-002-index_command007]
-element_number		=-1
-entryObject		=TEntry1
-
-
-[PBASE-F32-Dir-PublicApi-0102-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Dir-PublicApi-0102-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Dir\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Dir-PublicApi-0102-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Dir\
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-DirScan-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1185 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-[RFs1]
-name=RFs1
-
-
-[CFileMan1]
-name=CFileMan1
-
-
-[TEntry1]
-name=TEntry1
-
-
-[CDirScan1]
-name=CDirScan1
-
-
-[CDir1]
-name=CDir1
-
-
-
-[PBASE-F32-DirScan-PublicApi-1001-001-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1002-001-NewLC_command004]
-rfsObject		=RFs1
-
-
-
-
-[PBASE-F32-DirScan-PublicApi-1003-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1003-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1003-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1003-002-NewLC_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1003-002-SetScanDataL_command005]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttHidden
-scandirection		=EScanUpTree
-
-
-[PBASE-F32-DirScan-PublicApi-1003-002-FullPath_command006]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1003-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1003-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DirScan-PublicApi-1003-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command005]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir2\
-	
-
-[PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\TempDir1Sub1\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command007]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\TempDir1Sub2\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-MkDirAll_command008]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir2\TempDir2Sub\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-NewL_command009]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-SetScanDataL_command010]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttDir
-sortkey			=ESortByName
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-NextL_command011]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command013]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-NextL_command014]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command016]
-expected		={Drives, RAMDriveTestPath}dirscan\TempDir1\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-NextL_command017]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command019]
-expected		={Drives, RAMDriveTestPath}dirscan\TempDir1\TempDir1Sub1\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-NextL_command020]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command022]
-expected		={Drives, RAMDriveTestPath}dirscan\TempDir1\TempDir1Sub2\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-NextL_command023]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command025]
-expected		={Drives, RAMDriveTestPath}dirscan\TempDir2\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-NextL_command026]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-FullPath_command028]
-expected		={Drives, RAMDriveTestPath}dirscan\TempDir2\TempDir2Sub\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-NextL_command029]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command032]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\TempDir1Sub1\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command033]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\TempDir1Sub2\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command034]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir2\TempDir2Sub\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command035]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-002-RmDir_command036]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir2\
-
-
-[PBASE-F32-DirScan-PublicApi-1004-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1005-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-[PBASE-F32-DirScan-PublicApi-1005-002-NewLC_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1005-002-SetScanDataL_command005]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttHidden
-scandirection		=EScanUpTree
-
-
-[PBASE-F32-DirScan-PublicApi-1005-002-AbbreviatedPath_command006]
-expected		=\
-
-
-[PBASE-F32-DirScan-PublicApi-1005-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1006-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1006-002-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1006-002-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1006-002-SetScanDataL_command006]
-path			={Drives, RAMDriveTestPath}dirscan\TempDir\
-attmask			=KEntryAttDir
-sortkey			=ESortByName
-
-
-[PBASE-F32-DirScan-PublicApi-1006-002-NextL_command007]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1006-002-FullPath_command009]
-expected		={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1006-002-NextL_command010]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1006-002-RmDir_command013]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1006-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1007-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1007-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1007-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1007-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1007-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1007-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-NewL_command008]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-SetScanDataL_command009]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttNormal
-sortkey			=ESortByName
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-NextL_command010]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-FullPath_command011]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-Count_command012]
-expected		=4
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-index_command013]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-index_command014]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-index_command015]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-index_command016]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1007-002-RmDir_command019]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1007-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1007-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DirScan-PublicApi-1007-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1008-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1008-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1008-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1008-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1008-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1008-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-NewL_command008]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-SetScanDataL_command009]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttDir
-sortkey			=ESortByName
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-NextL_command010]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-FullPath_command011]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-Count_command012]
-expected		=5
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-index_command013]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-index_command014]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=TempDir
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-index_command015]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-index_command016]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-index_command017]
-element_number		=4
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1008-002-RmDir_command020]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1008-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1008-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DirScan-PublicApi-1008-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1009-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1009-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1009-002-NewL_command008]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1009-002-SetScanDataL_command009]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttDir|KEntryAttMatchExclusive
-sortkey			=ESortByName
-
-
-[PBASE-F32-DirScan-PublicApi-1009-002-NextL_command010]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1009-002-FullPath_command011]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1009-002-Count_command012]
-expected		=1
-
-
-[PBASE-F32-DirScan-PublicApi-1009-002-index_command013]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=TempDir
-
-
-[PBASE-F32-DirScan-PublicApi-1009-002-RmDir_command016]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir\
-
-
-[PBASE-F32-DirScan-PublicApi-1009-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1010-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1010-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1010-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1010-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1010-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1010-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command006]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, SystemDriveTestPath}big_line.txt 
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command007]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, SystemDriveTestPath}Test1.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command008]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, SystemDriveTestPath}Test2.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command009]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, SystemDriveTestPath}Test3.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command010]
-clearattmask		=KEntryAttNormal
-name			={Drives, SystemDriveTestPath}Test2.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command011]
-clearattmask		=KEntryAttNormal
-name			={Drives, SystemDriveTestPath}Test3.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-NewL_command013]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetScanDataL_command014]
-path			={Drives, SystemDriveTestPath}
-attmask			=KEntryAttReadOnly|KEntryAttMatchExclusive
-sortkey			=ESortByName
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-NextL_command015]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-FullPath_command016]
-expected		={Drives, SystemDriveTestPath}
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-Count_command017]
-expected		=2
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-index_command018]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-index_command019]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command020]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, SystemDriveTestPath}Test2.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-DirScan-PublicApi-1010-002-SetAtt_command021]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, SystemDriveTestPath}Test3.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-DirScan-PublicApi-1010-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1010-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DirScan-PublicApi-1010-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1011-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1011-002-SetSessionPath_command004]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-DirScan-PublicApi-1011-002-SessionPath_command005]
-comparepath		={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-DirScan-PublicApi-1011-002-NewL_command006]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1011-002-SetScanDataL_command007]
-path			={Drives, RAMDriveTestPathRelative}dirscan\
-attmask			=KEntryAttNormal
-sortkey			=ESortByName
-
-
-[PBASE-F32-DirScan-PublicApi-1011-002-NextL_command008]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1011-002-FullPath_command009]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1011-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1012-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1012-002-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1012-002-SetScanDataL_command005]
-path			={Drives, RAMDriveTestPath}dirscan
-attmask			=KEntryAttNormal
-sortkey			=ESortByName
-
-
-[PBASE-F32-DirScan-PublicApi-1012-002-NextL_command006]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1012-002-FullPath_command007]
-expected		={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-DirScan-PublicApi-1012-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1013-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1013-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1013-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1013-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1013-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1013-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-NewL_command007]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-SetScanDataL_command008]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttNormal
-sortkey			=ESortByName|EAscending
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-NextL_command009]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-FullPath_command010]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-Count_command011]
-expected		=4
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-index_command012]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-index_command013]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-index_command014]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1013-002-index_command015]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1013-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1013-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DirScan-PublicApi-1013-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1014-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1014-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1014-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1014-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1014-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1014-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-
-[PBASE-F32-DirScan-PublicApi-1014-002-NewL_command007]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1014-002-SetScanDataL_command008]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttNormal
-sortkey			=ESortByExt|EDescending
-
-
-[PBASE-F32-DirScan-PublicApi-1014-002-NextL_command009]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1014-002-FullPath_command010]
-expected		={Drives, RAMDriveTestPath}dirscan\
-	
-
-[PBASE-F32-DirScan-PublicApi-1014-002-Count_command011]
-expected		=4
-
-
-[PBASE-F32-DirScan-PublicApi-1014-002-index_command012]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1014-002-index_command013]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1014-002-index_command014]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1014-002-index_command015]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1014-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1014-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DirScan-PublicApi-1014-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1015-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1015-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1015-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1015-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1015-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1015-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-MkDirAll_command007]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir2\
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-SetModified_command008]
-name			={Drives, RAMDriveTestPath}dirscan\big_line.txt
-time			=20060104:
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-SetModified_command009]
-name			={Drives, RAMDriveTestPath}dirscan\Test1.txt
-time			=20060102:
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-SetModified_command010]
-name			={Drives, RAMDriveTestPath}dirscan\Test2.txt
-time			=20060101:
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-SetModified_command011]
-name			={Drives, RAMDriveTestPath}dirscan\Test3.txt
-time			=20060103:
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-NewL_command013]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-SetScanDataL_command014]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttDir
-sortkey			=EDirsFirst|EDirDescending|ESortByDate
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-NextL_command015]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-FullPath_command016]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-Count_command017]
-expected		=6
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-index_command018]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=TempDir2
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-index_command019]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=TempDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-index_command020]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-index_command021]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-index_command022]
-element_number		=4
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-index_command023]
-element_number		=5
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-RmDir_command024]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\
-
-
-[PBASE-F32-DirScan-PublicApi-1015-002-RmDir_command025]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir2\
-
-
-[PBASE-F32-DirScan-PublicApi-1015-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1015-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DirScan-PublicApi-1015-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1016-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1016-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1016-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1016-001-Copy_command007]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1016-001-Copy_command008]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1016-001-Copy_command009]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}dirscan\
-async			=false
-operation		=0
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-MkDirAll_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-MkDirAll_command007]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir2\
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-NewL_command009]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-SetScanDataL_command010]
-path			={Drives, RAMDriveTestPath}dirscan\
-attmask			=KEntryAttDir
-sortkey			=EDirsLast|ESortBySize
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-NextL_command011]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-FullPath_command012]
-expected		={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-Count_command013]
-expected		=6
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-index_command014]
-element_number		=0
-entryObject		=TEntry1
-expectedName		=big_line.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-index_command015]
-element_number		=1
-entryObject		=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-index_command016]
-element_number		=2
-entryObject		=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-index_command017]
-element_number		=3
-entryObject		=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-index_command018]
-element_number		=4
-entryObject		=TEntry1
-expectedName		=TempDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-index_command019]
-element_number		=5
-entryObject		=TEntry1
-expectedName		=TempDir2
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-RmDir_command020]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir1\
-
-
-[PBASE-F32-DirScan-PublicApi-1016-002-RmDir_command021]
-dir			={Drives, RAMDriveTestPath}dirscan\TempDir2\
-
-
-[PBASE-F32-DirScan-PublicApi-1016-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1016-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}dirscan\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-DirScan-PublicApi-1016-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1101-001-MkDirAll_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1101-002-NewLC_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1101-002-SetScanDataL_command005]
-path			={Drives, RAMDriveTestPath}dirscan\NotExistDirectory\
-attmask			=KEntryAttHidden
-scandirection		=EScanUpTree
-
-
-[PBASE-F32-DirScan-PublicApi-1101-002-NextL_command006]
-dirObject		=CDir1
-
-
-[PBASE-F32-DirScan-PublicApi-1101-003-RmDir_command003]
-dir			={Drives, RAMDriveTestPath}dirscan\
-
-
-[PBASE-F32-DirScan-PublicApi-1102-001-NewLC_command004]
-rfsObject	=RFs1
-
-
-[PBASE-F32-DirScan-PublicApi-1102-001-NextL_command005]
-dirObject	=CDir1
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-DriveUnit-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-
-
-[driveUnit1]
-name=driveUnit1
-
-
-[PBASE-F32-DriveUnit-PublicApi-0001-001-new_command01]
-driveName=3
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-0001-001-convertToInt_command02]
-driveExpValue=3
-
-
-[PBASE-F32-DriveUnit-PublicApi-0002-001-new_command01]
-driveName=C
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-0002-001-name_command02]
-driveNameExpValue=C:
-
-
-[PBASE-F32-DriveUnit-PublicApi-0003-001-new_command01]
-driveName=3
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-0003-001-_command02]
-driveName=4
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-0003-001-convertToInt_command03]
-driveExpValue=4
-
-
-[PBASE-F32-DriveUnit-PublicApi-0004-001-new_command01]
-driveName=C
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-0004-001-_command02]
-driveName=F
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-0004-001-name_command03]
-driveNameExpValue=F:
-
-
-[PBASE-F32-DriveUnit-PublicApi-0005-001-new_command01]
-driveName=C
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-0005-001-convertToInt_command02]
-driveExpValue=2
-
-
-[PBASE-F32-DriveUnit-PublicApi-0006-001-new_command01]
-driveName=22
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-0006-001-name_command02]
-driveNameExpValue=W:
-
-
-[PBASE-F32-DriveUnit-PublicApi-0007-001-new_command01]
-driveName=C:
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-0007-001-name_command02]
-driveNameExpValue=C:
-
-
-[PBASE-F32-DriveUnit-PublicApi-0008-001-new_command01]
-driveName=c
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-0008-001-name_command02]
-driveNameExpValue=C:
-
-
-[PBASE-F32-DriveUnit-PublicApi-0009-001-new_command01]
-driveName=C
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-0009-001-_command02]
-driveName=f
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-0009-001-name_command03]
-driveNameExpValue=F:
-
-
-[PBASE-F32-DriveUnit-PublicApi-0010-001-new_command01]
-driveNameType=none
-
-
-[PBASE-F32-DriveUnit-PublicApi-1001-001-new_command01]
-driveName=100
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-1002-001-new_command01]
-driveName=16
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-1002-001-_command02]
-driveName=100
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-1003-001-new_command01]
-driveName=26
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-1004-001-new_command01]
-driveName=50
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-1005-001-new_command01]
-driveName=7
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-1005-001-_command02]
-driveName=100
-driveNameType=number
-
-
-[PBASE-F32-DriveUnit-PublicApi-1006-001-new_command01]
-driveName=##
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-1007-001-new_command01]
-driveName=Z
-driveNameType=letter
-
-
-[PBASE-F32-DriveUnit-PublicApi-1007-001-_command02]
-driveName=##
-driveNameType=letter
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-Entry-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,584 +0,0 @@
-[include]
-file1					=\base\base_f32_env.ini
-
-[TEntry1]
-name=TEntry1
-
-
-[TEntry2]
-name=TEntry2
-
-
-[RFs1]
-name=RFs1
-
-
-[CFileMan1]
-name=CFileMan1
-
-
-[PBASE-F32-Entry-PublicApi-0002-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0002-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0002-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0002-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0002-002-=_command009]
-object			=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0002-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0002-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0002-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0003-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0003-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0003-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0003-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0003-002-new_command008]
-object			=TEntry1
-
-
-[PBASE-F32-Entry-PublicApi-0003-002-IsReadOnly_command009]
-expected		=false
-
-
-
-[PBASE-F32-Entry-PublicApi-0003-002-IsHidden_command010]
-expected		=false
-
-
-
-[PBASE-F32-Entry-PublicApi-0003-002-IsDir_command011]
-expected		=false
-
-
-[PBASE-F32-Entry-PublicApi-0003-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0003-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0003-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0004-001-index_command003]
-index			=3
-
-
-[PBASE-F32-Entry-PublicApi-0005-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0005-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0005-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0005-002-IsUidPresent_command006]
-value			=0
-expected		=true
-
-
-
-[PBASE-F32-Entry-PublicApi-0005-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test3.txt
-
-
-
-[PBASE-F32-Entry-PublicApi-0005-002-IsUidPresent_command008]
-value			=0
-expected		=true
-
-[PBASE-F32-Entry-PublicApi-0005-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0005-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0005-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0006-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0006-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0006-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0006-002-IsTypeValid_command006]
-expected		=false
-
-
-[PBASE-F32-Entry-PublicApi-0006-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test3.txt
-
-
-[PBASE-F32-Entry-PublicApi-0006-002-IsTypeValid_command008]
-expected		=false
-
-
-[PBASE-F32-Entry-PublicApi-0006-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0006-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0006-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0007-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0007-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0007-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0007-002-Entry_command006]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test3.txt
-
-
-[PBASE-F32-Entry-PublicApi-0007-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0007-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0007-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0008-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0008-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0008-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0008-002-SetAtt_command005]
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-setattmask		=KEntryAttReadOnly
-clearattmask		=KEntryAttNormal
-
-
-[PBASE-F32-Entry-PublicApi-0008-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0008-002-IsReadOnly_command008]
-expected		=true
-
-
-[PBASE-F32-Entry-PublicApi-0008-002-SetAtt_command009]
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-setattmask		=KEntryAttNormal
-clearattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-Entry-PublicApi-0008-002-Entry_command010]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0008-002-IsReadOnly_command011]
-expected		=false
-
-
-[PBASE-F32-Entry-PublicApi-0008-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0008-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0008-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0009-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0009-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0009-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0009-002-SetAtt_command005]
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-setattmask		=KEntryAttHidden
-clearattmask		=KEntryAttNormal
-
-
-[PBASE-F32-Entry-PublicApi-0009-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0009-002-IsHidden_command008]
-expected		=true
-
-
-[PBASE-F32-Entry-PublicApi-0009-002-SetAtt_command009]
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-setattmask		=KEntryAttNormal
-clearattmask		=KEntryAttHidden
-
-
-[PBASE-F32-Entry-PublicApi-0009-002-Entry_command010]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0009-002-IsHidden_command011]
-expected		=false
-
-
-[PBASE-F32-Entry-PublicApi-0009-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0009-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0009-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0010-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0010-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0010-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0010-002-SetAtt_command005]
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-setattmask		=KEntryAttSystem
-clearattmask		=KEntryAttNormal
-
-
-[PBASE-F32-Entry-PublicApi-0010-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0010-002-IsSystem_command008]
-expected		=true
-
-
-[PBASE-F32-Entry-PublicApi-0010-002-SetAtt_command009]
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-setattmask		=KEntryAttNormal
-clearattmask		=KEntryAttSystem
-
-
-[PBASE-F32-Entry-PublicApi-0010-002-Entry_command010]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0010-002-IsSystem_command011]
-expected		=false
-
-
-[PBASE-F32-Entry-PublicApi-0010-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0010-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0010-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0011-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0011-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0011-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0011-002-SetAtt_command005]
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-setattmask		=KEntryAttArchive
-clearattmask		=KEntryAttNormal
-
-
-[PBASE-F32-Entry-PublicApi-0011-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0011-002-IsArchive_command008]
-expected		=true
-
-
-[PBASE-F32-Entry-PublicApi-0011-002-SetAtt_command009]
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-setattmask		=KEntryAttNormal
-clearattmask		=KEntryAttArchive
-
-
-[PBASE-F32-Entry-PublicApi-0011-002-Entry_command010]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0011-002-IsArchive_command011]
-expected		=false
-
-
-[PBASE-F32-Entry-PublicApi-0011-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0011-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0011-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0012-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0012-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0012-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0012-002-MkDirAll_command005]
-dir			={Drives, RAMDriveTestPath}Entry\test\
-
-
-[PBASE-F32-Entry-PublicApi-0012-002-Entry_command007]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\test\
-
-
-[PBASE-F32-Entry-PublicApi-0012-002-IsDir_command008]
-expected		=true
-
-
-[PBASE-F32-Entry-PublicApi-0012-002-Entry_command009]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test1.txt
-
-
-[PBASE-F32-Entry-PublicApi-0012-002-IsDir_command010]
-expected		=false
-
-
-[PBASE-F32-Entry-PublicApi-0012-002-RmDir_command012]
-dir			={Drives, RAMDriveTestPath}Entry\test\
-
-
-[PBASE-F32-Entry-PublicApi-0012-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0012-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0012-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-[PBASE-F32-Entry-PublicApi-0013-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}Entry\
-
-
-[PBASE-F32-Entry-PublicApi-0013-001-NewL_command005]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0013-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}Entry\
-async			=false
-operation		=0
-
-
-[PBASE-F32-Entry-PublicApi-0013-002-Entry_command006]
-entry			=TEntry1
-name			={Drives, RAMDriveTestPath}Entry\Test3.txt
-
-
-[PBASE-F32-Entry-PublicApi-0013-002-index_command007]
-index			=0
-
-
-[PBASE-F32-Entry-PublicApi-0013-003-NewL_command004]
-rfsObject		=RFs1
-
-
-[PBASE-F32-Entry-PublicApi-0013-003-Delete_command005]
-filename		={Drives, RAMDriveTestPath}Entry\*.*
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-Entry-PublicApi-0013-003-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}Entry\
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-EntryArray-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,206 +0,0 @@
-[include]
-file1					=\base\base_f32_env.ini
-
-[RFs1]
-name=RFs1
-
-[RDir1]
-name=RDir1
-
-[RFile1]
-name=RFile1
-
-[TEntry1]
-name=TEntry1
-
-[TEntryTemp]
-name=TEntryTemp
-
-[TEntryArray1]
-name=TEntryArray1
-
-[file]
-name=file
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}EntryArray\
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-CreateFile_command010]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test1.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-CreateFile_command012]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test2.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-CreateFile_command014]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test3.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-OpenDir_command016]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}EntryArray\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-Read_command017]
-arrayObject		=TEntryArray1
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-Count_command019]
-expected		=3
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-DeleteFile_command020]
-name			={Drives, RAMDriveTestPath}EntryArray\test1.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-DeleteFile_command021]
-name			={Drives, RAMDriveTestPath}EntryArray\test2.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-002-DeleteFile_command022]
-name			={Drives, RAMDriveTestPath}EntryArray\test3.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0002-003-RmDir_command004]
-dir			={Drives, RAMDriveTestPath}EntryArray\
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}EntryArray\
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-CreateFile_command014]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test1.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-CreateFile_command016]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test2.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-CreateFile_command018]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test3.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-OpenDir_command020]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}EntryArray\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-Read_command021]
-arrayObject		=TEntryArray1
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-brackets_command023]
-index			=0
-destination		=TEntry1
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-equal_command024]
-object			=TEntry1
-expectedName		=test1.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-brackets_command025]
-index			=1
-destination		=TEntry1
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-equal_command026]
-object			=TEntry1
-expectedName		=test2.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-brackets_command027]
-index			=2
-destination		=TEntry1
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-equal_command028]
-object			=TEntry1
-expectedName		=test3.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-DeleteFile_command029]
-name			={Drives, RAMDriveTestPath}EntryArray\test1.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-DeleteFile_command030]
-name			={Drives, RAMDriveTestPath}EntryArray\test2.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-002-DeleteFile_command031]
-name			={Drives, RAMDriveTestPath}EntryArray\test3.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0003-003-RmDir_command004]
-dir			={Drives, RAMDriveTestPath}EntryArray\
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}EntryArray\
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-002-CreateFile_command012]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test1.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-002-CreateFile_command014]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test2.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-002-CreateFile_command016]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}EntryArray\test3.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-002-OpenDir_command018]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}EntryArray\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-002-Read_command019]
-arrayObject		=TEntryArray1
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-002-brackets_command021]
-index			=3
-destination		=TEntry1
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-003-DeleteFile_command004]
-name			={Drives, RAMDriveTestPath}EntryArray\test1.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-003-DeleteFile_command005]
-name			={Drives, RAMDriveTestPath}EntryArray\test2.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-003-DeleteFile_command006]
-name			={Drives, RAMDriveTestPath}EntryArray\test3.txt
-
-
-[PBASE-F32-EntryArray-PublicApi-0004-003-RmDir_command007]
-dir			={Drives, RAMDriveTestPath}EntryArray\
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-File-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2214 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-[file]
-name=file
-
-
-[RFs1]
-name=RFs1
-
-
-[file2]
-name=file2
-
-[PBASE-F32-File-PublicApi-Install]
-dir={Drives, RAMDriveTestPath}file\
-
-[PBASE-F32-File-PublicApi-0001-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0001.txt
-
-
-[PBASE-F32-File-PublicApi-0001-001-Write_command006]
-datawrite=Open test
-
-
-[PBASE-F32-File-PublicApi-0001-001-Open_command008]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0001.txt
-
-
-[PBASE-F32-File-PublicApi-0001-001-Read_command009]
-expected_string=Open test
-
-
-[PBASE-F32-File-PublicApi-0001-001-Delete_command013]
-name={Drives, RAMDriveTestPath}file\tc0001.txt
-
-
-[PBASE-F32-File-PublicApi-0003-001-Create_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-name={Drives, RAMDriveTestPath}file\tc0003.txt
-
-
-[PBASE-F32-File-PublicApi-0003-001-Write_command006]
-datawrite=test created this file
-
-
-[PBASE-F32-File-PublicApi-0003-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc0003.txt
-
-
-[PBASE-F32-File-PublicApi-0004-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0004.txt
-
-
-[PBASE-F32-File-PublicApi-0004-001-Write_command006]
-datawrite=This File is Replaced
-
-
-[PBASE-F32-File-PublicApi-0004-001-Open_command009]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0004.txt
-
-
-[PBASE-F32-File-PublicApi-0004-001-Delete_command013]
-name={Drives, RAMDriveTestPath}file\tc0004.txt
-
-
-[PBASE-F32-File-PublicApi-0005-001-Temp_command005]
-RFs=RFs1
-path={Drives, RAMDriveTestPath}file\
-file_mode=EFileWrite
-
-
-[PBASE-F32-File-PublicApi-0005-001-Write_command006]
-datawrite=This is temporary file
-
-
-[PBASE-F32-File-PublicApi-0005-001-Rename_command007]
-name={Drives, RAMDriveTestPath}file\tc0005.txt
-
-
-[PBASE-F32-File-PublicApi-0005-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0005.txt
-
-
-[PBASE-F32-File-PublicApi-0006-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0006.txt
-
-
-[PBASE-F32-File-PublicApi-0006-001-Write_command006]
-datawrite=synchronous read test
-
-
-[PBASE-F32-File-PublicApi-0006-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0006-001-Read_command008]
-expected_string=synchronous read test
-
-
-[PBASE-F32-File-PublicApi-0006-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0006.txt
-
-
-[PBASE-F32-File-PublicApi-0007-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0007.txt
-
-
-[PBASE-F32-File-PublicApi-0007-001-Write_command006]
-datawrite=Asynchronous read test
-
-
-[PBASE-F32-File-PublicApi-0007-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0007-001-Read_command008]
-async=true
-expected_string=Asynchronous read test
-
-
-[PBASE-F32-File-PublicApi-0007-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0007.txt
-
-
-[PBASE-F32-File-PublicApi-0008-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0008.txt
-
-
-[PBASE-F32-File-PublicApi-0008-001-Write_command006]
-datawrite=synchronous read with length test
-
-
-[PBASE-F32-File-PublicApi-0008-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0008-001-Read_command008]
-length=5
-expected_string=synch
-
-
-[PBASE-F32-File-PublicApi-0008-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0008.txt
-
-
-[PBASE-F32-File-PublicApi-0009-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0009.txt
-
-
-[PBASE-F32-File-PublicApi-0009-001-Write_command006]
-datawrite=Asynchronous read with length test
-
-
-[PBASE-F32-File-PublicApi-0009-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0009-001-Read_command008]
-async=true
-length=5
-expected_string=Async
-
-
-[PBASE-F32-File-PublicApi-0009-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0009.txt
-
-
-[PBASE-F32-File-PublicApi-0010-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0010.txt
-
-
-[PBASE-F32-File-PublicApi-0010-001-Write_command006]
-datawrite=synchronous read with position test
-
-
-[PBASE-F32-File-PublicApi-0010-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0010-001-Read_command008]
-position=5
-expected_string=ronous read with position test
-
-
-[PBASE-F32-File-PublicApi-0010-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0010.txt
-
-
-[PBASE-F32-File-PublicApi-0011-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0011.txt
-
-
-[PBASE-F32-File-PublicApi-0011-001-Write_command006]
-datawrite=asynchronous read with position test
-
-
-[PBASE-F32-File-PublicApi-0011-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0011-001-Read_command008]
-async=true
-expected_string=hronous read with position test
-position=5
-
-
-[PBASE-F32-File-PublicApi-0011-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0011.txt
-
-
-[PBASE-F32-File-PublicApi-0012-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0012.txt
-
-
-[PBASE-F32-File-PublicApi-0012-001-Write_command006]
-datawrite=synchronous read with position and length test
-
-
-[PBASE-F32-File-PublicApi-0012-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0012-001-Read_command008]
-position=5
-length=5
-expected_string=ronou
-
-
-[PBASE-F32-File-PublicApi-0012-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0012.txt
-
-
-[PBASE-F32-File-PublicApi-0013-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0013.txt
-
-
-[PBASE-F32-File-PublicApi-0013-001-Write_command006]
-datawrite=asynchronous read with position and length test
-
-
-[PBASE-F32-File-PublicApi-0013-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0013-001-Read_command008]
-async=true
-length=5
-expected_string=hrono
-position=5
-
-[PBASE-F32-File-PublicApi-0013-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0013.txt
-
-
-[PBASE-F32-File-PublicApi-0014-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0014.txt
-
-
-[PBASE-F32-File-PublicApi-0014-001-Write_command006]
-datawrite=short data
-
-
-[PBASE-F32-File-PublicApi-0014-001-Open_command008]
-RFs=RFs1
-file_mode=EFileReadAsyncAll | EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc0014.txt
-
-
-[PBASE-F32-File-PublicApi-0014-001-Seek_command009]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0014-001-Read_command010]
-async=true
-
-
-[PBASE-F32-File-PublicApi-0014-001-Delete_command015]
-name={Drives, RAMDriveTestPath}file\tc0014.txt
-
-
-[PBASE-F32-File-PublicApi-0015-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0015.txt
-
-
-[PBASE-F32-File-PublicApi-0015-001-Write_command006]
-datawrite=short data
-
-
-[PBASE-F32-File-PublicApi-0015-001-Open_command008]
-RFs=RFs1
-file_mode=EFileReadAsyncAll | EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc0015.txt
-
-
-[PBASE-F32-File-PublicApi-0015-001-Seek_command009]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0015-001-Read_command010]
-async=true
-
-
-[PBASE-F32-File-PublicApi-0015-001-Read_command011]
-async=true
-
-
-[PBASE-F32-File-PublicApi-0015-001-ReadCancel_command012]
-cancel_all=true
-
-
-[PBASE-F32-File-PublicApi-0015-001-Delete_command016]
-name={Drives, RAMDriveTestPath}file\tc0015.txt
-
-
-[PBASE-F32-File-PublicApi-0016-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0016.txt
-
-
-[PBASE-F32-File-PublicApi-0016-001-Write_command006]
-datawrite=Write test
-
-
-[PBASE-F32-File-PublicApi-0016-001-Open_command009]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc0016.txt
-
-
-[PBASE-F32-File-PublicApi-0016-001-Read_command010]
-expected_string=Write test
-
-
-[PBASE-F32-File-PublicApi-0016-001-Delete_command014]
-name={Drives, RAMDriveTestPath}file\tc0016.txt
-
-
-[PBASE-F32-File-PublicApi-0017-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0017.txt
-
-
-[PBASE-F32-File-PublicApi-0017-001-Write_command006]
-async=true
-datawrite=Asynchronous write test
-
-
-[PBASE-F32-File-PublicApi-0017-001-Open_command009]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc0017.txt
-
-
-[PBASE-F32-File-PublicApi-0017-001-Read_command010]
-expected_string=Asynchronous write test
-
-
-[PBASE-F32-File-PublicApi-0017-001-Delete_command014]
-name={Drives, RAMDriveTestPath}file\tc0017.txt
-
-
-[PBASE-F32-File-PublicApi-0018-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0018.txt
-
-
-[PBASE-F32-File-PublicApi-0018-001-Write_command006]
-length=5
-datawrite=Synchronous write test with length
-
-
-[PBASE-F32-File-PublicApi-0018-001-Open_command009]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0018.txt
-
-
-[PBASE-F32-File-PublicApi-0018-001-Read_command010]
-expected_string=Synch
-
-
-[PBASE-F32-File-PublicApi-0018-001-Delete_command014]
-name={Drives, RAMDriveTestPath}file\tc0018.txt
-
-
-[PBASE-F32-File-PublicApi-0019-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0019.txt
-
-
-[PBASE-F32-File-PublicApi-0019-001-Write_command006]
-async=true
-length=5
-datawrite=Asynchronous write test with length
-
-
-[PBASE-F32-File-PublicApi-0019-001-Open_command009]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0019.txt
-
-
-[PBASE-F32-File-PublicApi-0019-001-Read_command010]
-expected_string=Async
-
-
-[PBASE-F32-File-PublicApi-0019-001-Delete_command014]
-name={Drives, RAMDriveTestPath}file\tc0019.txt
-
-
-[PBASE-F32-File-PublicApi-0020-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0020.txt
-
-
-[PBASE-F32-File-PublicApi-0020-001-Write_command006]
-datawrite=__test
-
-
-[PBASE-F32-File-PublicApi-0020-001-Write_command008]
-position=2
-datawrite=Synchronous write test with position
-
-
-[PBASE-F32-File-PublicApi-0020-001-Open_command011]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0020.txt
-
-
-[PBASE-F32-File-PublicApi-0020-001-Read_command012]
-expected_string=__Synchronous write test with position
-
-
-[PBASE-F32-File-PublicApi-0020-001-Delete_command016]
-name={Drives, RAMDriveTestPath}file\tc0020.txt
-
-
-[PBASE-F32-File-PublicApi-0021-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0021.txt
-
-
-[PBASE-F32-File-PublicApi-0021-001-Write_command006]
-datawrite=__test
-
-
-[PBASE-F32-File-PublicApi-0021-001-Write_command008]
-async =true
-datawrite=Asynchronous write test with position
-position=2
-
-
-[PBASE-F32-File-PublicApi-0021-001-Open_command011]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0021.txt
-
-
-[PBASE-F32-File-PublicApi-0021-001-Read_command012]
-expected_string=__Asynchronous write test with position
-
-
-[PBASE-F32-File-PublicApi-0021-001-Delete_command016]
-name={Drives, RAMDriveTestPath}file\tc0021.txt
-
-
-[PBASE-F32-File-PublicApi-0022-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0022.txt
-
-
-[PBASE-F32-File-PublicApi-0022-001-Write_command006]
-datawrite=__test
-
-
-[PBASE-F32-File-PublicApi-0022-001-Write_command008]
-position=2
-length=4
-datawrite=Synchronous write test with position, length
-
-
-[PBASE-F32-File-PublicApi-0022-001-Open_command011]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0022.txt
-
-
-[PBASE-F32-File-PublicApi-0022-001-Read_command012]
-expected_string=__Sync
-
-
-[PBASE-F32-File-PublicApi-0022-001-Delete_command016]
-name={Drives, RAMDriveTestPath}file\tc0022.txt
-
-
-[PBASE-F32-File-PublicApi-0023-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0023.txt
-
-
-[PBASE-F32-File-PublicApi-0023-001-Write_command006]
-datawrite=__test
-
-
-[PBASE-F32-File-PublicApi-0023-001-Write_command008]
-async =true
-length=4
-datawrite=Asynchronous write test with position, length
-position=2
-
-
-[PBASE-F32-File-PublicApi-0023-001-Open_command011]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0023.txt
-
-
-[PBASE-F32-File-PublicApi-0023-001-Read_command012]
-expected_string=__Asyn
-
-
-[PBASE-F32-File-PublicApi-0023-001-Delete_command016]
-name={Drives, RAMDriveTestPath}file\tc0023.txt
-
-
-[PBASE-F32-File-PublicApi-0024-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0024.txt
-
-
-[PBASE-F32-File-PublicApi-0024-001-Open_command008]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0024.txt
-
-
-[PBASE-F32-File-PublicApi-0024-001-Write_command010]
-datawrite=Lock test
-
-
-[PBASE-F32-File-PublicApi-0024-001-Lock_command011]
-position=0
-length=3
-
-
-[PBASE-F32-File-PublicApi-0024-001-UnLock_command016]
-position=0
-length=3
-
-
-[PBASE-F32-File-PublicApi-0024-001-Delete_command025]
-name={Drives, RAMDriveTestPath}file\tc0024.txt
-
-
-[PBASE-F32-File-PublicApi-0025-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0025.txt
-
-
-[PBASE-F32-File-PublicApi-0025-001-Write_command006]
-datawrite=Should seek to pos here
-
-
-[PBASE-F32-File-PublicApi-0025-001-Seek_command007]
-position=19
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0025-001-Read_command008]
-expected_string=here
-
-
-[PBASE-F32-File-PublicApi-0025-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0025.txt
-
-
-[PBASE-F32-File-PublicApi-0026-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0026.txt
-
-
-[PBASE-F32-File-PublicApi-0026-001-Write_command006]
-datawrite=This data should be flushed
-
-[PBASE-F32-File-PublicApi-0026-001-Seek_command008]
-position=0
-seek=ESeekStart
-
-[PBASE-F32-File-PublicApi-0026-001-Read_command009]
-expected_string=This data should be flushed
-
-[PBASE-F32-File-PublicApi-0026-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0026.txt
-
-
-[PBASE-F32-File-PublicApi-0027-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0027.txt
-
-
-[PBASE-F32-File-PublicApi-0027-001-Write_command006]
-datawrite=This data should be flushed
-
-
-[PBASE-F32-File-PublicApi-0027-001-Flush_command007]
-async=true
-
-[PBASE-F32-File-PublicApi-0027-001-Seek_command008]
-position=0
-seek=ESeekStart
-
-[PBASE-F32-File-PublicApi-0027-001-Read_command009]
-expected_string=This data should be flushed
-
-
-[PBASE-F32-File-PublicApi-0027-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0027.txt
-
-
-[PBASE-F32-File-PublicApi-0028-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0028.txt
-
-
-[PBASE-F32-File-PublicApi-0028-001-Write_command006]
-datawrite=Size test this text should be truncated
-
-
-[PBASE-F32-File-PublicApi-0028-001-SetSize_command007]
-size=10
-
-
-[PBASE-F32-File-PublicApi-0028-001-Size_command008]
-	
-
-
-[PBASE-F32-File-PublicApi-0028-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0028.txt
-
-
-[PBASE-F32-File-PublicApi-0029-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0029.txt
-
-
-[PBASE-F32-File-PublicApi-0029-001-Write_command006]
-datawrite=SetAtt test
-
-
-[PBASE-F32-File-PublicApi-0029-001-SetAtt_command007]
-set_att_mask=KEntryAttArchive
-clear_att_mask=KEntryAttReadOnly
-
-
-[PBASE-F32-File-PublicApi-0029-001-Open_command010]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0029.txt
-
-
-[PBASE-F32-File-PublicApi-0029-001-Att_command011]
-compare_value=KEntryAttArchive
-
-
-[PBASE-F32-File-PublicApi-0029-001-Delete_command015]
-name={Drives, RAMDriveTestPath}file\tc0029.txt
-
-
-[PBASE-F32-File-PublicApi-0030-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0030.txt
-
-
-[PBASE-F32-File-PublicApi-0030-001-SetModified_command006]
-date=20070118:
-
-
-[PBASE-F32-File-PublicApi-0030-001-Open_command008]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0030.txt
-
-
-[PBASE-F32-File-PublicApi-0030-001-Modified_command009]
-compare_value=20070118:
-
-[PBASE-F32-File-PublicApi-0030-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0030.txt
-
-[PBASE-F32-File-PublicApi-0031-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc0031.txt
-
-
-[PBASE-F32-File-PublicApi-0031-001-Set_command006]
-date=20070118:
-set_att_mask=KEntryAttArchive
-clear_att_mask=KEntryAttReadOnly
-
-
-[PBASE-F32-File-PublicApi-0031-001-Att_command007]
-compare_value=KEntryAttArchive
-
-
-[PBASE-F32-File-PublicApi-0031-001-Modified_command008]
-compare_value=20070118:
-
-
-[PBASE-F32-File-PublicApi-0031-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0031.txt
-
-
-[PBASE-F32-File-PublicApi-0032-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareExclusive
-file={Drives, RAMDriveTestPath}file\tc0032.txt
-
-
-[PBASE-F32-File-PublicApi-0032-001-Open_command007]
-RFs=RFs1
-file_mode=EFileShareExclusive
-file={Drives, RAMDriveTestPath}file\tc0032.txt
-
-
-[PBASE-F32-File-PublicApi-0032-001-ChangeMode_command008]
-file_mode=EFileShareReadersOnly
-
-
-[PBASE-F32-File-PublicApi-0032-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0032.txt
-
-
-[PBASE-F32-File-PublicApi-0033-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareExclusive | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0033.txt
-
-
-[PBASE-F32-File-PublicApi-0033-001-Rename_command006]
-name={Drives, RAMDriveTestPath}file\test_renamed.txt
-
-
-[PBASE-F32-File-PublicApi-0033-001-Rename_command008]
-name={Drives, RAMDriveTestPath}file\tc0033.txt
-
-
-[PBASE-F32-File-PublicApi-0033-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc0033.txt
-
-
-[PBASE-F32-File-PublicApi-0034-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc0034.txt
-
-
-[PBASE-F32-File-PublicApi-0034-001-Drive_command006]
-//!compare_value=23
-
-
-[PBASE-F32-File-PublicApi-0034-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc0034.txt
-
-
-[PBASE-F32-File-PublicApi-0039-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0039.txt
-
-
-[PBASE-F32-File-PublicApi-0039-001-Name_command006]
-compare_value=tc0039.txt
-
-
-[PBASE-F32-File-PublicApi-0039-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc0039.txt
-
-
-[PBASE-F32-File-PublicApi-0040-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0040.txt
-
-
-[PBASE-F32-File-PublicApi-0040-001-Write_command006]
-datawrite=Duplicate Test
-
-
-[PBASE-F32-File-PublicApi-0040-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0040-001-Duplicate_command010]
-file_object_name=file
-
-[PBASE-F32-File-PublicApi-0040-001-Read_command011]
-expected_string=Duplicate Test
-
-
-[PBASE-F32-File-PublicApi-0040-001-Delete_command017]
-name={Drives, RAMDriveTestPath}file\tc0040.txt
-
-
-[PBASE-F32-File-PublicApi-0041-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc0041.txt
-
-
-[PBASE-F32-File-PublicApi-0041-001-FullName_command006]
-compare_path={Drives, RAMDriveTestPath}file\tc0041.txt
-
-
-[PBASE-F32-File-PublicApi-0041-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc0041.txt
-
-
-[PBASE-F32-File-PublicApi-0101-001-Open_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\base\chickenfarm\chicken.txt
-
-
-[PBASE-F32-File-PublicApi-0103-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc0103.txt
-
-
-[PBASE-F32-File-PublicApi-0103-001-Open_command007]
-RFs=RFs1
-file_mode=EFileWrite | EFileShareReadersOnly
-file={Drives, RAMDriveTestPath}file\tc0103.txt
-
-
-[PBASE-F32-File-PublicApi-0103-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc0103.txt
-
-
-[PBASE-F32-File-PublicApi-0125-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0125.txt
-
-
-[PBASE-F32-File-PublicApi-0125-001-Write_command006]
-datawrite=Should seek to pos here
-
-
-[PBASE-F32-File-PublicApi-0125-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-0125-001-Read_command008]
-length=7
-
-
-[PBASE-F32-File-PublicApi-0125-001-Seek_command009]
-position=5
-seek=ESeekCurrent
-
-
-[PBASE-F32-File-PublicApi-0125-001-Read_command010]
-expected_string=to pos here
-
-
-[PBASE-F32-File-PublicApi-0125-001-Delete_command014]
-name={Drives, RAMDriveTestPath}file\tc0125.txt
-
-
-[PBASE-F32-File-PublicApi-0201-001-Create_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-name={Drives, RAMDriveChar}:\base\chickenfarm\chicken.txt
-
-
-[PBASE-F32-File-PublicApi-0202-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc0202.txt
-
-
-[PBASE-F32-File-PublicApi-0202-001-Create_command007]
-RFs=RFs1
-file_mode=EFileShareAny
-name={Drives, RAMDriveTestPath}file\tc0202.txt
-
-
-[PBASE-F32-File-PublicApi-0202-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc0202.txt
-
-
-[PBASE-F32-File-PublicApi-0203-001-Replace_command001]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0203.txt
-
-[PBASE-F32-File-PublicApi-0203-001-Delete_command002]
-name={Drives, RAMDriveTestPath}file\tc0203.txt
-
-[PBASE-F32-File-PublicApi-0203-001-Create_command005]
-RFs=RFs1
-file_mode=EFileWrite | EFileShareReadersOnly
-name={Drives, RAMDriveTestPath}file\tc0203.txt
-
-
-[PBASE-F32-File-PublicApi-0301-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveChar}:\base\chickenfarm\chicken.txt
-
-
-[PBASE-F32-File-PublicApi-0303-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareReadersOnly | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc0303.txt
-
-
-[PBASE-F32-File-PublicApi-0401-001-Temp_command005]
-RFs=RFs1
-path={Drives, RAMDriveChar}:\base\chickenfarm\
-file_mode=EFileShareAny
-
-
-[PBASE-F32-File-PublicApi-0403-001-Temp_command005]
-RFs=RFs1
-path={Drives, RAMDriveTestPath}file\
-file_mode=EFileShareReadersOnly | EFileWrite
-
-
-[PBASE-F32-File-PublicApi-0701-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc0701.txt
-
-
-[PBASE-F32-File-PublicApi-0701-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-0701-001-Read_command007]
-length=-1
-
-
-[PBASE-F32-File-PublicApi-0701-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0701.txt
-
-
-[PBASE-F32-File-PublicApi-0702-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc0702.txt
-
-
-[PBASE-F32-File-PublicApi-0702-001-Write_command006]
-datawrite=readtest
-
-
-[PBASE-F32-File-PublicApi-0702-001-Read_command007]
-buffer_length=4
-length=100
-
-
-[PBASE-F32-File-PublicApi-0702-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0702.txt
-
-
-[PBASE-F32-File-PublicApi-0703-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc0703.txt
-
-
-[PBASE-F32-File-PublicApi-0703-001-Write_command006]
-datawrite=readtest
-
-
-[PBASE-F32-File-PublicApi-0703-001-Read_command007]
-buffer_length=4
-length=0
-expected_string=
-
-
-[PBASE-F32-File-PublicApi-0703-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0703.txt
-
-
-[PBASE-F32-File-PublicApi-0801-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc0801.txt
-
-
-[PBASE-F32-File-PublicApi-0801-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-0801-001-Read_command007]
-length=-1
-async =true
-
-
-[PBASE-F32-File-PublicApi-0801-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0801.txt
-
-
-[PBASE-F32-File-PublicApi-0802-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc0802.txt
-
-
-[PBASE-F32-File-PublicApi-0802-001-Write_command006]
-datawrite=readtest
-
-
-[PBASE-F32-File-PublicApi-0802-001-Read_command007]
-buffer_length=4
-length=1000
-async =true
-
-
-[PBASE-F32-File-PublicApi-0802-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0802.txt
-
-
-[PBASE-F32-File-PublicApi-0901-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc0901.txt
-
-
-[PBASE-F32-File-PublicApi-0901-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-0901-001-Read_command007]
-position=-1
-
-
-[PBASE-F32-File-PublicApi-0901-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc0901.txt
-
-
-[PBASE-F32-File-PublicApi-0902-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tx0902.txt
-
-
-[PBASE-F32-File-PublicApi-0902-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-0902-001-Read_command007]
-position=100
-expected_string=
-
-
-[PBASE-F32-File-PublicApi-0902-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tx0902.txt
-
-
-[PBASE-F32-File-PublicApi-1001-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1001.txt
-
-
-[PBASE-F32-File-PublicApi-1001-001-Write_command006]
-datawrite="synchronous read with position test"
-
-
-[PBASE-F32-File-PublicApi-1001-001-Read_command007]
-position=-1
-async =true
-
-
-[PBASE-F32-File-PublicApi-1001-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1001.txt
-
-
-[PBASE-F32-File-PublicApi-1002-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1002.txt
-
-
-[PBASE-F32-File-PublicApi-1002-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1002-001-Read_command007]
-position=100
-expected_string=
-async =true
-
-
-[PBASE-F32-File-PublicApi-1002-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1002.txt
-
-
-[PBASE-F32-File-PublicApi-1040-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileWrite
-file={Drives, RAMDriveTestPath}file\tc1040.txt
-
-
-[PBASE-F32-File-PublicApi-1040-001-Write_command006]
-datawrite=Duplicate Test
-
-
-[PBASE-F32-File-PublicApi-1040-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-1040-001-Duplicate_command010]
-file_object_name=file
-owner_type=EOwnerThread
-
-[PBASE-F32-File-PublicApi-1040-001-Read_command011]
-expected_string=Duplicate Test
-
-[PBASE-F32-File-PublicApi-1040-001-Delete_command017]
-name={Drives, RAMDriveTestPath}file\tc1040.txt
-
-
-[PBASE-F32-File-PublicApi-1101-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1101.txt
-
-
-[PBASE-F32-File-PublicApi-1101-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1101-001-Read_command007]
-position=-1
-length=4
-
-
-[PBASE-F32-File-PublicApi-1101-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1101.txt
-
-
-[PBASE-F32-File-PublicApi-1102-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1102.txt
-
-
-[PBASE-F32-File-PublicApi-1102-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1102-001-Read_command007]
-position=10
-length=-4
-
-
-[PBASE-F32-File-PublicApi-1102-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1102.txt
-
-
-[PBASE-F32-File-PublicApi-1103-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1103.txt
-
-
-[PBASE-F32-File-PublicApi-1103-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1103-001-Read_command007]
-position=10
-length=4
-
-
-[PBASE-F32-File-PublicApi-1103-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1103.txt
-
-
-[PBASE-F32-File-PublicApi-1104-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1104.txt
-
-
-[PBASE-F32-File-PublicApi-1104-001-Write_command006]
-datawrite=readtest
-
-
-[PBASE-F32-File-PublicApi-1104-001-Read_command007]
-buffer_length=4
-position=10
-length=1000
-
-
-[PBASE-F32-File-PublicApi-1104-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1104.txt
-
-
-[PBASE-F32-File-PublicApi-1201-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1201.txt
-
-
-[PBASE-F32-File-PublicApi-1201-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1201-001-Read_command007]
-position=-1
-length=4
-async =true
-
-
-[PBASE-F32-File-PublicApi-1201-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1201.txt
-
-
-[PBASE-F32-File-PublicApi-1202-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1202.txt
-
-
-[PBASE-F32-File-PublicApi-1202-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1202-001-Read_command007]
-position=10
-length=-4
-async =true
-
-
-[PBASE-F32-File-PublicApi-1202-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1202.txt
-
-
-[PBASE-F32-File-PublicApi-1203-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1203.txt
-
-
-[PBASE-F32-File-PublicApi-1203-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1203-001-Read_command007]
-position=10
-length=4
-async =true
-
-
-[PBASE-F32-File-PublicApi-1203-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1203.txt
-
-
-[PBASE-F32-File-PublicApi-1204-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1204.txt
-
-
-[PBASE-F32-File-PublicApi-1204-001-Write_command006]
-datawrite=synchronous read with length and position test
-
-
-[PBASE-F32-File-PublicApi-1204-001-Read_command007]
-buffer_length=4
-position=10
-length=1000
-async =true
-
-[PBASE-F32-File-PublicApi-1204-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc1204.txt
-
-
-[PBASE-F32-File-PublicApi-1301-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1301.txt
-
-
-[PBASE-F32-File-PublicApi-1301-001-Write_command006]
-buffer_length = 0
-datawrite=
-
-
-[PBASE-F32-File-PublicApi-1301-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1301.txt
-
-
-[PBASE-F32-File-PublicApi-1401-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1401.txt
-
-
-[PBASE-F32-File-PublicApi-1401-001-Write_command006]
-buffer_length =0
-datawrite=
-async =true
-
-
-[PBASE-F32-File-PublicApi-1401-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1401.txt
-
-
-[PBASE-F32-File-PublicApi-1602-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1602.txt
-
-
-[PBASE-F32-File-PublicApi-1602-001-Write_command006]
-length=-1
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1602-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1602.txt
-
-
-[PBASE-F32-File-PublicApi-1603-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1603.txt
-
-
-[PBASE-F32-File-PublicApi-1603-001-Write_command006]
-length=0
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1603-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1603.txt
-
-
-[PBASE-F32-File-PublicApi-1701-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1701.txt
-
-
-[PBASE-F32-File-PublicApi-1701-001-Write_command006]
-length=-1
-datawrite=test
-async =true
-
-
-[PBASE-F32-File-PublicApi-1701-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1701.txt
-
-
-[PBASE-F32-File-PublicApi-1702-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1702.txt
-
-
-[PBASE-F32-File-PublicApi-1702-001-Write_command006]
-length=0
-datawrite=test
-async =true
-
-
-[PBASE-F32-File-PublicApi-1702-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1702.txt
-
-
-[PBASE-F32-File-PublicApi-1801-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1801.txt
-
-
-[PBASE-F32-File-PublicApi-1801-001-Write_command006]
-position=-1
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-1801-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1801.txt
-
-
-[PBASE-F32-File-PublicApi-1802-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1802.txt
-
-
-[PBASE-F32-File-PublicApi-1802-001-Write_command006]
-position=1
-datawrite=
-buffer_length=0
-
-
-[PBASE-F32-File-PublicApi-1802-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1802.txt
-
-
-[PBASE-F32-File-PublicApi-1901-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1901.txt
-
-
-[PBASE-F32-File-PublicApi-1901-001-Write_command006]
-position=-1
-datawrite=test
-async =true
-
-
-[PBASE-F32-File-PublicApi-1901-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1901.txt
-
-[PBASE-F32-File-PublicApi-1902-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc1902.txt
-
-
-[PBASE-F32-File-PublicApi-1902-001-Write_command006]
-position=1
-datawrite=
-async =true
-buffer_length=0
-
-
-[PBASE-F32-File-PublicApi-1902-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc1902.txt
-
-[PBASE-F32-File-PublicApi-2001-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2001.txt
-
-
-[PBASE-F32-File-PublicApi-2001-001-Write_command006]
-position=-1
-length=-1
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2001-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc2001.txt
-
-
-[PBASE-F32-File-PublicApi-2002-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2002.txt
-
-
-[PBASE-F32-File-PublicApi-2002-001-Write_command006]
-position=0
-length=0
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2002-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc2002.txt
-
-
-[PBASE-F32-File-PublicApi-2003-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2003.txt
-
-
-[PBASE-F32-File-PublicApi-2003-001-Write_command006]
-position=0
-length=-1
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2003-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc2003.txt
-
-[PBASE-F32-File-PublicApi-2101-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2101.txt
-
-
-[PBASE-F32-File-PublicApi-2101-001-Write_command006]
-position=-1
-length=-1
-datawrite=test
-async =true
-
-
-[PBASE-F32-File-PublicApi-2101-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc2101.txt
-
-
-[PBASE-F32-File-PublicApi-2102-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2102.txt
-
-
-[PBASE-F32-File-PublicApi-2102-001-Write_command006]
-position=0
-length=0
-datawrite=test
-async =true
-
-
-[PBASE-F32-File-PublicApi-2102-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc2102.txt
-
-
-[PBASE-F32-File-PublicApi-2103-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2103.txt
-
-
-[PBASE-F32-File-PublicApi-2103-001-Write_command006]
-position=0
-length=-1
-datawrite=test
-async =true
-
-
-[PBASE-F32-File-PublicApi-2103-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc2103.txt
-
-
-[PBASE-F32-File-PublicApi-2201-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2201.txt
-
-
-[PBASE-F32-File-PublicApi-2201-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2201-001-Lock_command007]
-position=0
-length=0
-
-
-[PBASE-F32-File-PublicApi-2201-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc2201.txt
-
-
-[PBASE-F32-File-PublicApi-2202-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc2202.txt
-
-
-[PBASE-F32-File-PublicApi-2202-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2202-001-Lock_command007]
-position=0
-length=2
-
-
-[PBASE-F32-File-PublicApi-2202-001-Open_command010]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc2202.txt
-
-
-[PBASE-F32-File-PublicApi-2202-001-Lock_command011]
-position=0
-length=2
-
-[PBASE-F32-File-PublicApi-2202-001-Delete_command017]
-name={Drives, RAMDriveTestPath}file\tc2202.txt
-
-
-[PBASE-F32-File-PublicApi-2203-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc2203.txt
-
-
-[PBASE-F32-File-PublicApi-2203-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2203-001-Lock_command007]
-position=0
-length=-1
-
-[PBASE-F32-File-PublicApi-2203-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc2203.txt
-
-[PBASE-F32-File-PublicApi-2204-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc2204.txt
-
-
-[PBASE-F32-File-PublicApi-2204-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2204-001-Lock_command007]
-position=-1
-length=1
-
-
-[PBASE-F32-File-PublicApi-2204-001-Delete_command010]
-name={Drives, RAMDriveTestPath}file\tc2204.txt
-
-
-[PBASE-F32-File-PublicApi-2205-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc2205.txt
-
-
-[PBASE-F32-File-PublicApi-2205-001-Open_command008]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc2205.txt
-
-
-[PBASE-F32-File-PublicApi-2205-001-Write_command010]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2205-001-Lock_command011]
-position=6
-length=4
-
-
-[PBASE-F32-File-PublicApi-2205-001-Write_command013]
-datawrite=Trying to write to locked region
-
-
-[PBASE-F32-File-PublicApi-2205-001-Delete_command020]
-name={Drives, RAMDriveTestPath}file\tc2205.txt
-
-
-[PBASE-F32-File-PublicApi-2301-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2301.txt
-
-
-[PBASE-F32-File-PublicApi-2301-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2301-001-UnLock_command007]
-position=0
-length=2
-
-
-[PBASE-F32-File-PublicApi-2301-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc2301.txt
-
-
-[PBASE-F32-File-PublicApi-2302-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc2302.txt
-
-
-[PBASE-F32-File-PublicApi-2302-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2302-001-Lock_command007]
-position=0
-length=2
-
-
-[PBASE-F32-File-PublicApi-2302-001-Close_command008]
-position=0
-length=1
-
-
-[PBASE-F32-File-PublicApi-2302-001-Delete_command014]
-name={Drives, RAMDriveTestPath}file\tc2302.txt
-
-
-[PBASE-F32-File-PublicApi-2303-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc2303.txt
-
-
-[PBASE-F32-File-PublicApi-2303-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2303-001-Lock_command007]
-position=2
-length=2
-
-
-[PBASE-F32-File-PublicApi-2303-001-UnLock_command008]
-position=2
-length=-2
-
-[PBASE-F32-File-PublicApi-2303-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc2303.txt
-
-
-[PBASE-F32-File-PublicApi-2304-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc2304.txt
-
-
-[PBASE-F32-File-PublicApi-2304-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2304-001-Lock_command007]
-position=2
-length=2
-
-
-[PBASE-F32-File-PublicApi-2304-001-UnLock_command008]
-position=-2
-length=2
-
-
-[PBASE-F32-File-PublicApi-2304-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc2304.txt
-
-
-[PBASE-F32-File-PublicApi-2401-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2401.txt
-
-
-[PBASE-F32-File-PublicApi-2401-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2401-001-Seek_command007]
-position=-1
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-2401-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc2401.txt
-
-
-[PBASE-F32-File-PublicApi-2701-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2701.txt
-
-
-[PBASE-F32-File-PublicApi-2701-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2701-001-SetSize_command007]
-size=-2
-
-
-[PBASE-F32-File-PublicApi-2701-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc2701.txt
-
-
-[PBASE-F32-File-PublicApi-2901-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc2901.txt
-
-
-[PBASE-F32-File-PublicApi-2901-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-2901-001-SetAtt_command007]
-set_att_mask=KEntryAttReadOnly
-clear_att_mask=KEntryAttReadOnly
-
-
-[PBASE-F32-File-PublicApi-2901-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc2901.txt
-
-
-[PBASE-F32-File-PublicApi-3101-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3101.txt
-
-
-[PBASE-F32-File-PublicApi-3101-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-3101-001-Open_command008]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3101.txt
-
-
-[PBASE-F32-File-PublicApi-3101-001-SetModified_command009]
-date=20070118:
-
-
-[PBASE-F32-File-PublicApi-3101-001-Delete_command013]
-name={Drives, RAMDriveTestPath}file\tc3101.txt
-
-
-[PBASE-F32-File-PublicApi-3201-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3201.txt
-
-
-[PBASE-F32-File-PublicApi-3201-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-3201-001-Set_command007]
-date=20070118:
-set_att_mask=KEntryAttReadOnly
-clear_att_mask=KEntryAttReadOnly
-
-
-[PBASE-F32-File-PublicApi-3201-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc3201.txt
-
-
-[PBASE-F32-File-PublicApi-5501-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc5501.txt
-
-
-[PBASE-F32-File-PublicApi-5501-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-5501-001-ChangeMode_command007]
-file_mode=EFileWrite
-
-
-[PBASE-F32-File-PublicApi-5501-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc5501.txt
-
-
-[PBASE-F32-File-PublicApi-3401-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc3401.txt
-
-
-[PBASE-F32-File-PublicApi-3401-001-Write_command006]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-3401-001-Open_command008]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3401.txt
-
-
-[PBASE-F32-File-PublicApi-3401-001-Rename_command009]
-name={Drives, RAMDriveTestPath}file\test_renamed.txt
-
-[PBASE-F32-File-PublicApi-3401-001-Delete_command12]
-name={Drives, RAMDriveTestPath}file\tc3401.txt
-
-[PBASE-F32-File-PublicApi-4001-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc4001.txt
-
-
-[PBASE-F32-File-PublicApi-4001-001-Open_command007]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc4001.txt
-
-
-[PBASE-F32-File-PublicApi-4001-001-Write_command008]
-datawrite=test
-
-
-[PBASE-F32-File-PublicApi-4001-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc4001.txt
-
-
-[PBASE-F32-File-PublicApi-4002-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc4002.txt
-
-
-[PBASE-F32-File-PublicApi-4002-001-Open_command007]
-RFs=RFs1
-file_mode=EFileShareExclusive
-file={Drives, RAMDriveTestPath}file\tc4002.txt
-
-
-[PBASE-F32-File-PublicApi-4002-001-Open_command010]
-RFs=RFs1
-file_mode=EFileShareExclusive
-file={Drives, RAMDriveTestPath}file\tc4002.txt
-
-
-[PBASE-F32-File-PublicApi-4002-001-Delete_command017]
-name={Drives, RAMDriveTestPath}file\tc4002.txt
-
-
-[PBASE-F32-File-PublicApi-4003-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc4003.txt
-
-
-[PBASE-F32-File-PublicApi-4003-001-Write_command006]
-datawrite=open test
-
-
-[PBASE-F32-File-PublicApi-4003-001-Open_command008]
-RFs=RFs1
-file_mode=EFileShareReadersOnly
-file={Drives, RAMDriveTestPath}file\tc4003.txt
-
-
-[PBASE-F32-File-PublicApi-4003-001-Open_command011]
-RFs=RFs1
-file_mode=EFileShareReadersOnly
-file={Drives, RAMDriveTestPath}file\tc4003.txt
-
-
-[PBASE-F32-File-PublicApi-4003-001-Read_command012]
-expected_string=open test
-
-
-[PBASE-F32-File-PublicApi-4003-001-Write_command013]
-datawrite=Will cause error
-
-
-[PBASE-F32-File-PublicApi-4003-001-Delete_command020]
-name={Drives, RAMDriveTestPath}file\tc4003.txt
-
-
-[PBASE-F32-File-PublicApi-4004-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc4004.txt
-
-
-[PBASE-F32-File-PublicApi-4004-001-Write_command006]
-datawrite=open test
-
-
-[PBASE-F32-File-PublicApi-4004-001-Open_command008]
-RFs=RFs1
-file_mode=EFileShareAny
-file={Drives, RAMDriveTestPath}file\tc4004.txt
-
-
-[PBASE-F32-File-PublicApi-4004-001-Open_command011]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc4004.txt
-
-
-[PBASE-F32-File-PublicApi-4004-001-Read_command012]
-expected_string=open test
-
-
-[PBASE-F32-File-PublicApi-4004-001-Write_command013]
-datawrite=open test
-
-
-[PBASE-F32-File-PublicApi-4004-001-Delete_command020]
-name={Drives, RAMDriveTestPath}file\tc4004.txt
-
-
-[PBASE-F32-File-PublicApi-4005-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileShareAny | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc4005.txt
-
-
-[PBASE-F32-File-PublicApi-4005-001-Write_command006]
-datawrite=open test
-
-
-[PBASE-F32-File-PublicApi-4005-001-Open_command008]
-RFs=RFs1
-file_mode=EFileShareReadersOrWriters | EFileRead
-file={Drives, RAMDriveTestPath}file\tc4005.txt
-
-
-[PBASE-F32-File-PublicApi-4005-001-Open_command011]
-RFs=RFs1
-file_mode=EFileShareReadersOrWriters | EFileWrite
-file={Drives, RAMDriveTestPath}file\tc4005.txt
-
-
-[PBASE-F32-File-PublicApi-4005-001-Read_command012]
-expected_string=open test
-
-
-[PBASE-F32-File-PublicApi-4005-001-Write_command013]
-datawrite=open test
-
-
-[PBASE-F32-File-PublicApi-4005-001-Delete_command020]
-name={Drives, RAMDriveTestPath}file\tc4005.txt
-
-
-[PBASE-F32-File-PublicApi-3402-001-Replace_command003]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3402.txt
-
-[PBASE-F32-File-PublicApi-3402-001-Delete_command007]
-name={Drives, RAMDriveTestPath}file\tc3402.txt
-
-
-[PBASE-F32-File-PublicApi-3403-001-Replace_command003]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3403.txt
-
-[PBASE-F32-File-PublicApi-3403-001-Delete_command007]
-name={Drives, RAMDriveTestPath}file\tc3403.txt
-
-
-[PBASE-F32-File-PublicApi-3403-001-RmDir_command16]
-dir={Drives, RAMDriveTestPath}file\
-
-
-
-// NAND 
-
-[PBASE-F32-File-PublicApi-6001-001-Replace_command003]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, ROMDriveTestPath}test_rom.txt
-
-[PBASE-F32-File-PublicApi-6001-001-BlockMap_command003]
-usage=EBlockMapUsagePaging
-start_pos=0
-end_pos=-1
-
-
-
-
-[PBASE-F32-File-PublicApi-6002-001-Replace_command003]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, ROMDriveTestPath}test_rom.txt
-
-[PBASE-F32-File-PublicApi-6002-001-BlockMap_command004]
-usage=EBlockMapUsagePaging
-start_pos=0
-end_pos=1024
-
-
-[PBASE-F32-File-PublicApi-3501-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3501.txt
-
-
-[PBASE-F32-File-PublicApi-3501-001-Write_command006]
-datawrite=Asynchronous read with length test
-
-
-[PBASE-F32-File-PublicApi-3501-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-3501-001-Read_command008]
-async=true
-length=0
-expected_string=
-
-
-[PBASE-F32-File-PublicApi-3501-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc3501.txt
-
-
-[PBASE-F32-File-PublicApi-3502-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3502.txt
-
-
-[PBASE-F32-File-PublicApi-3502-001-Write_command006]
-datawrite=synchronous read with position and length test
-
-
-[PBASE-F32-File-PublicApi-3502-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-3502-001-Read_command008]
-position=5
-length=0
-expected_string=
-
-
-[PBASE-F32-File-PublicApi-3502-001-Delete_command012]
-name={Drives, RAMDriveTestPath}file\tc3502.txt
-
-
-[PBASE-F32-File-PublicApi-3503-001-Replace_command005]
-RFs=RFs1
-file_mode=EFileRead
-file={Drives, RAMDriveTestPath}file\tc3503.txt
-
-
-[PBASE-F32-File-PublicApi-3503-001-Write_command006]
-datawrite=asynchronous read with position and length test
-
-
-[PBASE-F32-File-PublicApi-3503-001-Seek_command007]
-position=0
-seek=ESeekStart
-
-
-[PBASE-F32-File-PublicApi-3503-001-Read_command008]
-async=true
-length=0
-expected_string=
-position=5
-
-[PBASE-F32-File-PublicApi-3503-001-Delete_command011]
-name={Drives, RAMDriveTestPath}file\tc3503.txt
-
-
-
-[PBASE-F32-File-PublicApi-Unistall]
-dir={Drives, RAMDriveTestPath}file\
-
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-FileMan-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2450 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-[CFileMan1]
-name			=CFileMan1
-
-
-[RFs1]
-name			=RFs1
-
-[RFile1]
-name			=RFile1
-
-[TEntry1]
-name			=TEntry1
-
-[RDir1]
-name			=RDir1
-
-
-[PBASE-F32-FileMan-PublicApi-NewL]
-rfsObject		=RFs1
-
-[PBASE-F32-FileMan-PublicApi-MkDirAll-Install]
-dir				={Drives, RAMDriveTestPath}fileman\
-
-[PBASE-F32-FileMan-PublicApi-Copy-Install]
-oldname			={Drives, SystemDriveTestPath}Test*.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-Delete-Uninstall]
-filename		={Drives, RAMDriveTestPath}fileman\*
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-RmDir-Uninstall]
-dir			={Drives, RAMDriveTestPath}fileman\
-
-
-[PBASE-F32-FileMan-PublicApi-MkDir_CopyDir]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\
-
-[PBASE-F32-FileMan-PublicApi-MkDir_TestDir]
-dir			={Drives, RAMDriveTestPath}fileman\Test\
-
-[PBASE-F32-FileMan-PublicApi-MkDir_Copy-Test]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\Test\
-
-[PBASE-F32-FileMan-PublicApi-RmDir_CopyDir]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\
-
-[PBASE-F32-FileMan-PublicApi-RmDir_TestDir]
-dir			={Drives, RAMDriveTestPath}fileman\Test\
-
-[PBASE-F32-FileMan-PublicApi-RmDir_Copy-Test]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\Test\
-
-[PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_EOverWrite]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-Copy_Test1_txt_0]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_EOverWrite]
-oldname			={Drives, RAMDriveTestPath}fileman\Test2.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-Copy_Test2_txt_0]
-oldname			={Drives, RAMDriveTestPath}fileman\Test2.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_EOverWrite]
-oldname			={Drives, RAMDriveTestPath}fileman\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-Copy_Test3_txt_0]
-oldname			={Drives, RAMDriveTestPath}fileman\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2002-001-NewL_command004]
-rfsObject		=RFs1
-use_observer	=true
-
-
-[PBASE-F32-FileMan-PublicApi-2003-001-CurrentAction_command008]
-read_history		=true
-current_action		=ECopy
-notify_type			=operation
-
-[PBASE-F32-FileMan-PublicApi-2003-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2004-001-GetCurrentTarget_command008]
-target				={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-read_history	=true
-notify_type			=operation
-
-
-[PBASE-F32-FileMan-PublicApi-2004-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2005-001-GetCurrentSource_command008]
-read_history	=true
-notify_type		=operation
-source		={Drives, RAMDriveTestPath}fileman\Test3.txt
-
-
-[PBASE-F32-FileMan-PublicApi-2005-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2006-001-BytesTransferredByCopyStep_command008]
-read_history	=true
-notify_type		=operation
-bytes		=51192
-
-[PBASE-F32-FileMan-PublicApi-2006-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2007-001-Att_command005]
-name		={Drives, RAMDriveTestPath}fileman\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2007-001-Attribs_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttNormal
-operation		=ERecurse
-
-
-[PBASE-F32-FileMan-PublicApi-2007-001-Att_command007]
-name		={Drives, RAMDriveTestPath}fileman\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttReadOnly
-
-[PBASE-F32-FileMan-PublicApi-2007-001-Attribs_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2007-001-Att_command009]
-name		={Drives, RAMDriveTestPath}fileman\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2008-001-Att_command005]
-name		={Drives, RAMDriveTestPath}fileman\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2008-001-Attribs_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Test1.txt
-async				=true
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttNormal
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2008-001-Att_command007]
-name		={Drives, RAMDriveTestPath}fileman\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttReadOnly
-
-[PBASE-F32-FileMan-PublicApi-2008-001-Attribs_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Test1.txt
-async				=true
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2008-001-Att_command009]
-name		={Drives, RAMDriveTestPath}fileman\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2009-001-Copy_command006]
-oldname		={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname		={Drives, RAMDriveTestPath}fileman\Copy\
-async			=false
-operation	=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2009-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2009-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2010-001-Copy_command006]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2010-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2010-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2011-001-Copy_command006]
-oldname		={Drives, RAMDriveTestPath}fileman\Test2.txt
-newname		={Drives, RAMDriveTestPath}fileman\Copy\
-async			=false
-operation	=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2011-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test2.txt
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2011-001-Open_command008]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2012-001-Copy_command006]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2012-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2012-001-Open_command008]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2013-001-Move_command006]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2013-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2013-001-Move_command008]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2013-001-Open_command009]
-file				={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2014-001-Move_command006]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2014-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2014-001-Move_command008]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2014-001-Open_command009]
-file				={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2015-001-Rename_command005]
-newname			={Drives, RAMDriveTestPath}fileman\Renamed.txt
-oldname		={Drives, RAMDriveTestPath}fileman\Test1.txt
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2015-001-Open_command006]
-file				={Drives, RAMDriveTestPath}fileman\Renamed.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2015-001-Rename_command007]
-newname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-oldname		={Drives, RAMDriveTestPath}fileman\Renamed.txt
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2015-001-Open_command008]
-file				={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2016-001-Rename_command005]
-newname			={Drives, RAMDriveTestPath}fileman\Renamed.txt
-oldname		={Drives, RAMDriveTestPath}fileman\Test1.txt
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2016-001-Open_command006]
-file				={Drives, RAMDriveTestPath}fileman\Renamed.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2016-001-Rename_command007]
-newname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-oldname		={Drives, RAMDriveTestPath}fileman\Renamed.txt
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2016-001-Open_command008]
-file				={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2017-001-MkDir_command004]
-dir			={Drives, RAMDriveTestPath}fileman\Removable\
-
-
-[PBASE-F32-FileMan-PublicApi-2017-001-Open_command006]
-path				={Drives, RAMDriveTestPath}fileman\Removable\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2017-001-RmDir_command007]
-path			={Drives, RAMDriveTestPath}fileman\Removable\
-async			=false
-
-[PBASE-F32-FileMan-PublicApi-2017-001-Open_command008]
-path				={Drives, RAMDriveTestPath}fileman\Removable\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2018-001-MkDir_command004]
-dir			={Drives, RAMDriveTestPath}fileman\Removable\
-
-
-[PBASE-F32-FileMan-PublicApi-2018-001-Open_command006]
-path				={Drives, RAMDriveTestPath}fileman\Removable\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-[PBASE-F32-FileMan-PublicApi-2018-001-RmDir_command007]
-path			={Drives, RAMDriveTestPath}fileman\Removable\
-async			=true
-
-[PBASE-F32-FileMan-PublicApi-2018-001-Open_command008]
-path				={Drives, RAMDriveTestPath}fileman\Removable\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2019-001-Open_command006]
-file			={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs			=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2019-001-Copy_command008]
-rfileObject		=RFile1
-newname				={Drives, RAMDriveTestPath}fileman\Test1_RFs.txt
-async					=false
-operation			=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2019-001-Open_command009]
-file				={Drives, RAMDriveTestPath}fileman\Test1_RFs.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2019-001-Delete_command010]
-filename			={Drives, RAMDriveTestPath}fileman\Test1_RFs.txt
-async					=false
-operation			=0
-
-
-[PBASE-F32-FileMan-PublicApi-2020-001-Open_command006]
-file			={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs			=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2020-001-Copy_command008]
-rfileObject		=RFile1
-newname				={Drives, RAMDriveTestPath}fileman\Test1_RFs.txt
-async					=true
-operation			=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2020-001-Open_command009]
-file				={Drives, RAMDriveTestPath}fileman\Test1_RFs.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2020-001-Delete_command010]
-filename			={Drives, RAMDriveTestPath}fileman\Test1_RFs.txt
-async					=false
-operation			=0
-
-
-[PBASE-F32-FileMan-PublicApi-2022-001-CurrentEntry_command008]
-read_history	=true
-notify_type		=operation
-name					=Test3.txt
-expectedName	=Test3.txt
-
-
-[PBASE-F32-FileMan-PublicApi-2022-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2023-001-AbbreviatedPath_command008]
-path		=\
-read_history	=true
-notify_type		=operation
-
-[PBASE-F32-FileMan-PublicApi-2023-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2024-001-FullPath_command008]
-path		={Drives, RAMDriveTestPath}fileman\
-read_history	=true
-notify_type		=operation
-
-
-[PBASE-F32-FileMan-PublicApi-2024-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2025-001-GetLastError_command008]
-error		=0
-read_history	=true
-notify_type = operation
-
-
-[PBASE-F32-FileMan-PublicApi-2025-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2026-001-GetMoreInfoAboutError_command008]
-error		=ENoExtraInformation
-read_history	=true
-notify_type = operation
-
-
-[PBASE-F32-FileMan-PublicApi-2026-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2027-001-MkDirAll_command004]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\
-
-
-[PBASE-F32-FileMan-PublicApi-2027-001-Copy_command006]
-oldname			={Drives, SystemDriveTestPath}Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2027-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2027-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2027-001-RmDir_command009]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\
-
-
-[PBASE-F32-FileMan-PublicApi-2028-001-Att_command006]
-name		={Drives, RAMDriveTestPath}fileman\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttNormal
-
-[PBASE-F32-FileMan-PublicApi-2028-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly|KEntryAttHidden
-clearmask		=KEntryAttNormal
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2028-001-Att_command008]
-name		={Drives, RAMDriveTestPath}fileman\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttReadOnly|KEntryAttHidden
-
-
-[PBASE-F32-FileMan-PublicApi-2028-001-Open_command010]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2028-001-Att_command011]
-name		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-issetatt		=true
-setattmask		=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2028-001-Attribs_command012]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly|KEntryAttHidden
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2028-001-Delete_command013]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2028-001-Attribs_command014]
-filename		={Drives, RAMDriveTestPath}fileman\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly|KEntryAttHidden
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Attribs_command003]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-setmask			=KEntryAttHidden
-clearmask		=KEntryAttNormal
-async				=false
-time				=00000000:
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Att_command004]
-name					={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-issetatt			=true
-setattmask		=KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Att_command005]
-name					={Drives, RAMDriveTestPath}fileman\Copy\Test\Test1.txt
-issetatt			=false
-setattmask		=KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Attribs_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttHidden
-async				=false
-time				=00000000:
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-setmask			=KEntryAttHidden
-clearmask		=KEntryAttNormal
-async				=false
-time				=00000000:
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Att_command008]
-name					={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-issetatt			=true
-setattmask		=KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Att_command009]
-name					={Drives, RAMDriveTestPath}fileman\Copy\Test\Test1.txt
-issetatt			=true
-setattmask		=KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Attribs_command010]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttHidden
-async				=false
-time				=00000000:
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2029-001-Delete_command011]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=ERecurse
-
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Attribs_command003]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-setmask			=KEntryAttHidden
-clearmask		=KEntryAttNormal
-async				=true
-time				=00000000:
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Att_command004]
-name					={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-issetatt			=true
-setattmask		=KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Att_command005]
-name					={Drives, RAMDriveTestPath}fileman\Copy\Test\Test1.txt
-issetatt			=false
-setattmask		=KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Attribs_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttHidden
-async				=true
-time				=00000000:
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-setmask			=KEntryAttHidden
-clearmask		=KEntryAttNormal
-async				=true
-time				=00000000:
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Att_command008]
-name					={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-issetatt			=true
-setattmask		=KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Att_command009]
-name					={Drives, RAMDriveTestPath}fileman\Copy\Test\Test1.txt
-issetatt			=true
-setattmask		=KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Attribs_command010]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttHidden
-async				=true
-time				=00000000:
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2030-001-Delete_command011]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2031-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2031-001-Copy_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\Copy\
-newname			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2031-001-Copy_command004]
-oldname			={Drives, RAMDriveTestPath}fileman\Copy\
-newname			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2031-001-Delete_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*.*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2031-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\*.*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2031-001-RmDir_command007]
-dir			={Drives, RAMDriveTestPath}fileman\Copy1\
-
-[PBASE-F32-FileMan-PublicApi-2032-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2032-001-Copy_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\Copy\
-newname			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2032-001-Copy_command004]
-oldname			={Drives, RAMDriveTestPath}fileman\Copy\
-newname			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=true
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2032-001-Delete_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*.*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2032-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\*.*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2032-001-RmDir_command007]
-dir			={Drives, RAMDriveTestPath}fileman\Copy1\
-
-
-[PBASE-F32-FileMan-PublicApi-2033-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2033-001-Move_command003]
-filefrom			={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2033-001-Move_command004]
-filefrom			={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=ERecurse
-
-
-[PBASE-F32-FileMan-PublicApi-2033-001-Delete_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\*.*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2033-001-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}fileman\Copy1\
-
-[PBASE-F32-FileMan-PublicApi-2034-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2034-001-Move_command003]
-filefrom			={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2034-001-Move_command004]
-filefrom			={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=true
-operation		=ERecurse
-
-
-[PBASE-F32-FileMan-PublicApi-2034-001-Delete_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\*.*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2034-001-RmDir_command006]
-dir			={Drives, RAMDriveTestPath}fileman\Copy1\
-
-
-[PBASE-F32-FileMan-PublicApi-2035-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-setmask			=KEntryAttReadOnly|KEntryAttHidden
-clearmask		=KEntryAttNormal
-async				=false
-operation		=0
-time				=00000000:
-
-[PBASE-F32-FileMan-PublicApi-2035-001-Att_command008]
-name				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2035-001-Att_command009]
-name				={Drives, RAMDriveTestPath}fileman\Copy\Test2.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2035-001-Attribs_command010]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly|KEntryAttHidden
-async				=false
-operation		=0
-time				=00000000:
-
-[PBASE-F32-FileMan-PublicApi-2035-001-Delete_command011]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2036-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-setmask			=KEntryAttReadOnly|KEntryAttHidden
-clearmask		=KEntryAttNormal
-async				=true
-operation		=0
-time				=00000000:
-
-[PBASE-F32-FileMan-PublicApi-2036-001-Att_command008]
-name				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2036-001-Att_command009]
-name				={Drives, RAMDriveTestPath}fileman\Copy\Test2.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2036-001-Attribs_command010]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly|KEntryAttHidden
-async				=true
-operation		=0
-time				=00000000:
-
-[PBASE-F32-FileMan-PublicApi-2036-001-Delete_command011]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2037-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\*
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2037-001-Open_command006]
-file				={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2037-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2037-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2038-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\*
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2038-001-Open_command006]
-file				={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2038-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2038-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2039-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\*
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2039-001-Move_command003]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2039-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Copy1\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2039-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Copy1\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2039-001-Move_command006]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy1
-fileto			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2039-001-Open_command007]
-path				={Drives, RAMDriveTestPath}fileman\Copy1\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-[PBASE-F32-FileMan-PublicApi-2039-001-Open_command008]
-path				={Drives, RAMDriveTestPath}fileman\Copy\Copy1\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-[PBASE-F32-FileMan-PublicApi-2039-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Copy1\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2039-001-RmDir_command010]
-dir					={Drives, RAMDriveTestPath}fileman\Copy\Copy1\
-
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Copy_command002]
-oldname		={Drives, RAMDriveTestPath}fileman\*
-newname		={Drives, RAMDriveTestPath}fileman\Copy\
-async			=false
-operation	=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Move_command003]
-filefrom	={Drives, RAMDriveTestPath}fileman\Copy\
-fileto		={Drives, RAMDriveTestPath}fileman\Copy1\
-async			=true
-operation	=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Copy1\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Copy1\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Open_command006]
-path				={Drives, RAMDriveTestPath}fileman\Copy1\Copy\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Move_command007]
-filefrom	={Drives, RAMDriveTestPath}fileman\Copy1
-fileto		={Drives, RAMDriveTestPath}fileman\Copy\
-async			=true
-operation	=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Open_command008]
-path				={Drives, RAMDriveTestPath}fileman\Copy1\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Open_command009]
-path				={Drives, RAMDriveTestPath}fileman\Copy\Copy1\
-rfsObject		=RFs1
-attmask			=KEntryAttNormal
-
-[PBASE-F32-FileMan-PublicApi-2040-001-Delete_command010]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Copy1\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2040-001-RmDir_command011]
-dir					={Drives, RAMDriveTestPath}fileman\Copy\Copy1\
-
-[PBASE-F32-FileMan-PublicApi-2041-001-Attribs_command004]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly|KEntryAttHidden
-clearmask		=KEntryAttNormal
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2041-001-Move_command005]
-filefrom	={Drives, RAMDriveTestPath}fileman\Copy\
-fileto		={Drives, RAMDriveTestPath}fileman\Copy1\
-async			=false
-operation	=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2041-001-Att_command006]
-name		={Drives, RAMDriveTestPath}fileman\Copy1\Test1.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2041-001-Att_command007]
-name		={Drives, RAMDriveTestPath}fileman\Copy1\Test2.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2041-001-Attribs_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly|KEntryAttHidden
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2041-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2041-001-RmDir_command010]
-dir					={Drives, RAMDriveTestPath}fileman\Copy1\
-
-
-[PBASE-F32-FileMan-PublicApi-2042-001-Attribs_command004]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly|KEntryAttHidden
-clearmask		=KEntryAttNormal
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2042-001-Move_command005]
-filefrom	={Drives, RAMDriveTestPath}fileman\Copy\
-fileto		={Drives, RAMDriveTestPath}fileman\Copy1\
-async			=true
-operation	=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2042-001-Att_command006]
-name		={Drives, RAMDriveTestPath}fileman\Copy1\Test1.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2042-001-Att_command007]
-name		={Drives, RAMDriveTestPath}fileman\Copy1\Test2.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2042-001-Attribs_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly|KEntryAttHidden
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2042-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2042-001-RmDir_command010]
-dir					={Drives, RAMDriveTestPath}fileman\Copy1\
-
-
-[PBASE-F32-FileMan-PublicApi-2043-001-Attribs_command004]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly|KEntryAttHidden
-clearmask		=KEntryAttNormal
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2043-001-Rename_command005]
-oldname		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-newname		={Drives, RAMDriveTestPath}fileman\Copy\Renamed.txt
-async			=false
-operation	=0
-
-[PBASE-F32-FileMan-PublicApi-2043-001-Att_command006]
-name		={Drives, RAMDriveTestPath}fileman\Copy\Renamed.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2043-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Renamed.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly|KEntryAttHidden
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2043-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2044-001-Attribs_command004]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly|KEntryAttHidden
-clearmask		=KEntryAttNormal
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2044-001-Rename_command005]
-oldname		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-newname		={Drives, RAMDriveTestPath}fileman\Copy\Renamed.txt
-async			=true
-operation	=0
-
-[PBASE-F32-FileMan-PublicApi-2044-001-Att_command006]
-name		={Drives, RAMDriveTestPath}fileman\Copy\Renamed.txt
-issetatt		=true
-setattmask	=KEntryAttReadOnly|KEntryAttHidden
-
-[PBASE-F32-FileMan-PublicApi-2044-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Renamed.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly|KEntryAttHidden
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2044-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2045-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2045-001-Copy_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\Test2.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test2.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2045-001-Copy_command004]
-oldname			={Drives, RAMDriveTestPath}fileman\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2045-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2045-001-Open_command006]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2045-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2045-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2046-001-Move_command002]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2046-001-Move_command003]
-filefrom			={Drives, RAMDriveTestPath}fileman\Copy\Test2.txt
-fileto				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2046-001-Move_command004]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2046-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2046-001-Open_command006]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2046-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2046-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2046-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2047-001-Rename_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test1_new.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2047-001-Rename_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\Copy\Test2.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test2_new.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2047-001-Rename_command004]
-oldname			={Drives, RAMDriveTestPath}fileman\Copy\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test3_new.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2047-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1_new.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2047-001-Open_command006]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test2_new.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2047-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test3_new.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2047-001-Delete_command008]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2103-001-Attribs_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Test2.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttDir
-clearmask		=KEntryAttNormal
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2103-001-Att_command006]
-name				={Drives, RAMDriveTestPath}fileman\Test2.txt
-issetatt		=true
-setattmask	=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2104-001-Attribs_command005]
-filename		={Drives, RAMDriveTestPath}fileman\\\Test2.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-
-[PBASE-F32-FileMan-PublicApi-2105-001-Attribs_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Test2.txt
-async				=true
-time				=00000000:
-setmask			=KEntryAttDir
-clearmask		=KEntryAttNormal
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2105-001-Att_command006]
-name		={Drives, RAMDriveTestPath}fileman\Test2.txt
-issetatt		=true
-setattmask	=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2106-001-Attribs_command005]
-filename		={Drives, RAMDriveTestPath}fileman\\\Test2.txt
-async				=true
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttNormal
-operation		=ERecurse
-
-
-[PBASE-F32-FileMan-PublicApi-2107-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\Test123.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2108-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\\\\\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2109-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\/\/\Copy\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2110-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\NotExsist\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2111-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\Test123.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2112-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\\\\\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2113-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\/\/\Copy\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2114-001-Copy_command005]
-oldname			={Drives, RAMDriveTestPath}fileman\Test3.txt
-newname			={Drives, RAMDriveTestPath}fileman\NotExist\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2115-001-Delete_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Test123.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2116-001-Delete_command005]
-filename		={Drives, RAMDriveTestPath}fileman\\\\\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2117-001-Delete_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Test123.txt
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2118-001-Delete_command005]
-filename		={Drives, RAMDriveTestPath}fileman\\\\\Test3.txt
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2119-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test123.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2120-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\\\\\Test3.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2121-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test3.txt
-fileto			={Drives, RAMDriveTestPath}fileman\\\Copy\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2122-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test3.txt
-fileto			={Drives, RAMDriveTestPath}fileman\NotExist\
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2123-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test123.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2124-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\\\\\Test3.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2125-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test3.txt
-fileto			={Drives, RAMDriveTestPath}fileman\\\Copy\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2126-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test3.txt
-fileto			={Drives, RAMDriveTestPath}fileman\NotExist\
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2127-001-Rename_command005]
-newname			={Drives, RAMDriveTestPath}fileman\newname.txt
-oldname		={Drives, RAMDriveTestPath}fileman\Test123.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2128-001-Rename_command005]
-newname			={Drives, RAMDriveTestPath}fileman\newname.txt
-oldname		={Drives, RAMDriveTestPath}fileman\\\\\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2129-001-Rename_command005]
-newname			={Drives, RAMDriveTestPath}fileman\\\newname.txt
-oldname		={Drives, RAMDriveTestPath}fileman\Test3.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2130-001-Rename_command005]
-newname			={Drives, RAMDriveTestPath}fileman\newname.txt
-oldname		={Drives, RAMDriveTestPath}fileman\Test123.txt
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2131-001-Rename_command005]
-newname			={Drives, RAMDriveTestPath}fileman\newname.txt
-oldname		={Drives, RAMDriveTestPath}fileman\\\\\Test3.txt
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2132-001-Rename_command005]
-newname			={Drives, RAMDriveTestPath}fileman\\\newname.txt
-oldname		={Drives, RAMDriveTestPath}fileman\Test3.txt
-async				=true
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2133-001-RmDir_command005]
-path			={Drives, RAMDriveTestPath}fileman\Copy123\
-async			=false
-
-
-[PBASE-F32-FileMan-PublicApi-2134-001-RmDir_command005]
-path			={Drives, RAMDriveTestPath}fileman\\\\\Copy\
-async			=false
-
-
-[PBASE-F32-FileMan-PublicApi-2135-001-RmDir_command005]
-path			={Drives, RAMDriveTestPath}fileman\Copy123\
-async			=true
-
-
-[PBASE-F32-FileMan-PublicApi-2136-001-RmDir_command005]
-path			={Drives, RAMDriveTestPath}fileman\\\\\Copy\
-async			=true
-
-
-[PBASE-F32-FileMan-PublicApi-2137-001-Open_command006]
-file				={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2137-001-Copy_command008]
-rfileObject	=RFile1
-newname			={Drives, RAMDriveTestPath}fileman\\\\\test.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2138-001-Open_command006]
-file			={Drives, RAMDriveTestPath}fileman\Test1.txt
-RFs			=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2138-001-Copy_command008]
-rfileObject		=RFile1
-newname				={Drives, RAMDriveTestPath}fileman\\\\\test.txt
-async					=true
-operation			=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2139-001-Attribs_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Test2.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttReadOnly
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2140-001-Attribs_command005]
-filename		={Drives, RAMDriveTestPath}fileman\Test2.txt
-async				=true
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttReadOnly
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2141-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2142-001-Copy_command006]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2142-001-Copy_command007]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2142-001-Copy_command008]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2142-001-Delete_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2143-001-MkDir_command004]
-dir			={Drives, RAMDriveTestPath}fileman\Move\
-
-
-[PBASE-F32-FileMan-PublicApi-2143-001-Move_command006]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Move\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2143-001-Copy_command007]
-oldname			={Drives, RAMDriveTestPath}fileman\Move\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2143-001-Move_command008]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Move\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2143-001-Move_command009]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Move\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2143-001-Copy_command010]
-oldname			={Drives, RAMDriveTestPath}fileman\Move\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2143-001-Delete_command011]
-filename		={Drives, RAMDriveTestPath}fileman\Move\Test1.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2143-001-RmDir_command012]
-dir			={Drives, RAMDriveTestPath}fileman\Move\
-
-
-[PBASE-F32-FileMan-PublicApi-2144-001-MkDir_command004]
-dir			={Drives, RAMDriveTestPath}fileman\Move\
-
-
-[PBASE-F32-FileMan-PublicApi-2144-001-Move_command006]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Move\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2144-001-Copy_command007]
-oldname			={Drives, RAMDriveTestPath}fileman\Move\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2144-001-Move_command008]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Move\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2144-001-Move_command009]
-filefrom		={Drives, RAMDriveTestPath}fileman\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Move\
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2144-001-Copy_command010]
-oldname			={Drives, RAMDriveTestPath}fileman\Move\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2144-001-Delete_command011]
-filename		={Drives, RAMDriveTestPath}fileman\Move\Test1.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2144-001-RmDir_command012]
-dir			={Drives, RAMDriveTestPath}fileman\Move\
-
-
-[PBASE-F32-FileMan-PublicApi-2145-001-MkDir_command004]
-dir			={Drives, RAMDriveTestPath}fileman\Rename\
-
-
-[PBASE-F32-FileMan-PublicApi-2145-001-Rename_command006]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Rename\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2145-001-Copy_command007]
-oldname			={Drives, RAMDriveTestPath}fileman\Rename\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2145-001-Rename_command008]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Rename\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2145-001-Rename_command009]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Rename\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2145-001-Copy_command010]
-oldname			={Drives, RAMDriveTestPath}fileman\Rename\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2145-001-Delete_command011]
-filename		={Drives, RAMDriveTestPath}fileman\Rename\Test1.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2145-001-RmDir_command012]
-dir			={Drives, RAMDriveTestPath}fileman\Rename\
-
-
-[PBASE-F32-FileMan-PublicApi-2146-001-MkDir_command004]
-dir			={Drives, RAMDriveTestPath}fileman\Rename\
-
-
-[PBASE-F32-FileMan-PublicApi-2146-001-Rename_command006]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Rename\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2146-001-Copy_command007]
-oldname			={Drives, RAMDriveTestPath}fileman\Rename\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2146-001-Rename_command008]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Rename\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2146-001-Rename_command009]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Rename\
-async				=true
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2146-001-Copy_command010]
-oldname			={Drives, RAMDriveTestPath}fileman\Rename\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\
-async				=false
-operation		=EOverWrite
-
-[PBASE-F32-FileMan-PublicApi-2146-001-Delete_command011]
-filename		={Drives, RAMDriveTestPath}fileman\Rename\Test1.txt
-async				=false
-operation		=EOverWrite
-
-
-[PBASE-F32-FileMan-PublicApi-2146-001-RmDir_command012]
-dir			={Drives, RAMDriveTestPath}fileman\Rename\
-
-
-[PBASE-F32-FileMan-PublicApi-2147-001-SetSessionPath_command005]
-path		={Drives, RAMDriveTestPath}fileman\Copy\
-
-
-[PBASE-F32-FileMan-PublicApi-2147-001-Copy_command007]
-oldname			={Drives, RAMDriveTestPath}fileman\*.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2147-001-Delete_command008]
-filename		=KNullDesC
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2148-001-SetSessionPath_command005]
-path		={Drives, RAMDriveTestPath}fileman\Copy\
-
-
-[PBASE-F32-FileMan-PublicApi-2148-001-Copy_command007]
-oldname			={Drives, RAMDriveTestPath}fileman\*.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2148-001-Delete_command008]
-filename		=KNullDesC
-async				=true
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2149-001-MkDir_command005]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\Test1\
-
-[PBASE-F32-FileMan-PublicApi-2149-001-MkDir_command006]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\Test2\
-
-
-[PBASE-F32-FileMan-PublicApi-2149-001-RmDir_command008]
-path		={Drives, RAMDriveTestPath}fileman\Copy\
-async		=false
-
-[PBASE-F32-FileMan-PublicApi-2149-001-Open_command009]
-rfsObject		=RFs1
-path				={Drives, RAMDriveTestPath}fileman\Copy\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2150-001-MkDir_command005]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\Test1\
-
-[PBASE-F32-FileMan-PublicApi-2150-001-MkDir_command006]
-dir			={Drives, RAMDriveTestPath}fileman\Copy\Test2\
-
-
-[PBASE-F32-FileMan-PublicApi-2150-001-RmDir_command008]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=true
-
-[PBASE-F32-FileMan-PublicApi-2150-001-Open_command009]
-rfsObject		=RFs1
-path				={Drives, RAMDriveTestPath}fileman\Copy\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-FileMan-PublicApi-2151-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttNormal
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2151-001-RmDir_command008]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=false
-
-[PBASE-F32-FileMan-PublicApi-2151-001-Attribs_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2151-001-RmDir_command010]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=false
-
-
-[PBASE-F32-FileMan-PublicApi-2152-001-Attribs_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttReadOnly
-clearmask		=KEntryAttNormal
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2152-001-RmDir_command008]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=true
-
-[PBASE-F32-FileMan-PublicApi-2152-001-Attribs_command009]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-async				=false
-time				=00000000:
-setmask			=KEntryAttNormal
-clearmask		=KEntryAttReadOnly
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2152-001-RmDir_command010]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=true
-
-
-[PBASE-F32-FileMan-PublicApi-2153-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2153-001-RmDir_command008]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=false
-
-[PBASE-F32-FileMan-PublicApi-2153-001-RmDir_command010]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=false
-
-
-[PBASE-F32-FileMan-PublicApi-2154-001-Open_command007]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-
-[PBASE-F32-FileMan-PublicApi-2154-001-RmDir_command008]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=true
-
-[PBASE-F32-FileMan-PublicApi-2154-001-RmDir_command010]
-path			={Drives, RAMDriveTestPath}fileman\Copy\
-async			=true
-
-
-[PBASE-F32-FileMan-PublicApi-2155-001-Copy_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2155-001-Delete_command004]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=ERecurse
-
-
-[PBASE-F32-FileMan-PublicApi-2156-001-MkDir_command002]
-dir			={Drives, RAMDriveTestPath}fileman\Copy1\
-
-[PBASE-F32-FileMan-PublicApi-2156-001-Copy_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2156-001-Copy_command004]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2156-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2156-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2156-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2156-001-RmDir_command008]
-dir			={Drives, RAMDriveTestPath}fileman\Copy1\
-
-
-[PBASE-F32-FileMan-PublicApi-2157-001-Copy_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2157-001-Delete_command004]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=ERecurse
-
-
-[PBASE-F32-FileMan-PublicApi-2158-001-MkDir_command002]
-dir			={Drives, RAMDriveTestPath}fileman\Copy1\
-
-[PBASE-F32-FileMan-PublicApi-2158-001-Copy_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2158-001-Copy_command004]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2158-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=true
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2158-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2158-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2158-001-RmDir_command008]
-dir			={Drives, RAMDriveTestPath}fileman\Copy1\
-
-
-[PBASE-F32-FileMan-PublicApi-2159-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2159-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=false
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2159-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2160-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2160-001-Move_command005]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\
-fileto			={Drives, RAMDriveTestPath}fileman\Copy1\
-async				=true
-operation		=ERecurse
-
-[PBASE-F32-FileMan-PublicApi-2160-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2161-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2161-001-Delete_command003]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2162-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2162-001-Move_command003]
-filefrom		={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-fileto			={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2162-001-Delete_command004]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2163-001-Copy_command002]
-oldname			={Drives, RAMDriveTestPath}fileman\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2163-001-Rename_command003]
-oldname			={Drives, RAMDriveTestPath}fileman\Copy\Test1.txt
-newname			={Drives, RAMDriveTestPath}fileman\Copy\Test1_new.txt
-async				=true
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2163-001-Delete_command004]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001]
-dir			={Drives, SystemDriveTestPath}fileman\Copy\
-
-[PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002]
-oldname			={Drives, SystemDriveTestPath}1mb
-newname			={Drives, SystemDriveTestPath}fileman\Copy\
-async			=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003]
-read_history		=true
-notify_type		=operation
-total_bytes		=true
-bytes			=1048576
-
-[PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004]
-filename		={Drives, SystemDriveTestPath}fileman\Copy\*
-async			=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005]
-path			={Drives, SystemDriveTestPath}fileman\
-async			=false
-
-
-[PBASE-F32-FileMan-PublicApi-2166-001-Copy_command002]
-oldname				={Drives, RAMDriveTestPath}fileman\Copy\
-newname				={Drives, RAMDriveTestPath}fileman\Test\
-async					=false
-operation			=0
-set_tcontrol	=true
-notify_type		=started
-filename			=Test2.txt
-flag					=ECancel
-
-[PBASE-F32-FileMan-PublicApi-2166-001-Open_command003]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2166-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2166-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2166-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2166-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2167-001-Copy_command002]
-oldname				={Drives, RAMDriveTestPath}fileman\Copy\
-newname				={Drives, RAMDriveTestPath}fileman\Test\
-async					=true
-operation			=0
-set_tcontrol	=true
-notify_type		=started
-filename			=Test2.txt
-flag					=ECancel
-
-[PBASE-F32-FileMan-PublicApi-2167-001-Open_command003]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2167-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2167-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2167-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2167-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2168-001-Copy_command002]
-oldname				={Drives, RAMDriveTestPath}fileman\Copy\
-newname				={Drives, RAMDriveTestPath}fileman\Test\
-async					=false
-operation			=0
-set_tcontrol	=true
-notify_type		=started
-filename			=Test2.txt
-flag					=EAbort
-
-[PBASE-F32-FileMan-PublicApi-2168-001-Open_command003]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2168-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2168-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2168-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2168-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2169-001-Copy_command002]
-oldname				={Drives, RAMDriveTestPath}fileman\Copy\
-newname				={Drives, RAMDriveTestPath}fileman\Test\
-async					=true
-operation			=0
-set_tcontrol	=true
-notify_type		=started
-filename			=Test2.txt
-flag					=EAbort
-
-[PBASE-F32-FileMan-PublicApi-2169-001-Open_command003]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2169-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2169-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2169-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2169-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2170-001-Copy_command002]
-oldname				={Drives, RAMDriveTestPath}fileman\Copy\
-newname				={Drives, RAMDriveTestPath}fileman\Test\
-async					=false
-operation			=0
-set_tcontrol	=true
-notify_type		=operation
-filename			=Test2.txt
-flag					=ECancel
-
-[PBASE-F32-FileMan-PublicApi-2170-001-Open_command003]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2170-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2170-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2170-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2170-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-
-[PBASE-F32-FileMan-PublicApi-2171-001-Copy_command002]
-oldname				={Drives, RAMDriveTestPath}fileman\Copy\
-newname				={Drives, RAMDriveTestPath}fileman\Test\
-async					=true
-operation			=0
-set_tcontrol	=true
-notify_type		=operation
-filename			=Test2.txt
-flag					=ECancel
-
-[PBASE-F32-FileMan-PublicApi-2171-001-Open_command003]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2171-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2171-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2171-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2171-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2172-001-Copy_command002]
-oldname				={Drives, RAMDriveTestPath}fileman\Copy\
-newname				={Drives, RAMDriveTestPath}fileman\Test\
-async					=false
-operation			=0
-set_tcontrol	=true
-notify_type		=ended
-filename			=Test1.txt
-flag					=EAbort
-
-[PBASE-F32-FileMan-PublicApi-2172-001-Open_command003]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2172-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2172-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2172-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2172-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2173-001-Copy_command002]
-oldname				={Drives, RAMDriveTestPath}fileman\Copy\
-newname				={Drives, RAMDriveTestPath}fileman\Test\
-async					=true
-operation			=0
-set_tcontrol	=true
-notify_type		=ended
-filename			=Test1.txt
-flag					=EAbort
-
-[PBASE-F32-FileMan-PublicApi-2173-001-Open_command003]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test1.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2173-001-Open_command004]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test2.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2173-001-Open_command005]
-file				={Drives, RAMDriveTestPath}fileman\Test\Test3.txt
-RFs					=RFs1
-file_mode		=EFileShareAny
-
-[PBASE-F32-FileMan-PublicApi-2173-001-Delete_command006]
-filename		={Drives, RAMDriveTestPath}fileman\Copy\*
-async				=false
-operation		=0
-
-[PBASE-F32-FileMan-PublicApi-2173-001-Delete_command007]
-filename		={Drives, RAMDriveTestPath}fileman\Test\*
-async				=false
-operation		=0
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-FileNamesIdentical-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[RFs1]
-name		=RFs1
-
-
-[FileNamesIdentical1]
-name		=FileNamesIdentical1
-
-
-[PBASE-F32-FileNamesIdentical-PublicApi-3001-001-FileNamesIdentical_command001]
-expected	=ETrue
-file2		={Drives, SystemDriveChar}:\base\t_sfsrv\Test3.txt
-file1		={Drives, SystemDriveChar}:\base\t_sfsrv\Test3.txt
-
-
-[PBASE-F32-FileNamesIdentical-PublicApi-3002-001-FileNamesIdentical_command001]
-expected	=EFalse
-file2		={Drives, SystemDriveChar}:\base\t_sfsrv\Test3.txt
-file1		={Drives, SystemDriveChar}:\base\t_sfsrv\Test2.txt
-
-
-[PBASE-F32-FileNamesIdentical-PublicApi-3003-001-SetSessionPath_command004]
-path		={Drives, SystemDriveChar}:\
-
-
-[PBASE-F32-FileNamesIdentical-PublicApi-3003-001-SessionPath_command005]
-comparepath	={Drives, SystemDriveChar}:\
-
-
-[PBASE-F32-FileNamesIdentical-PublicApi-3003-001-FileNamesIdentical_command006]
-expected	=EFalse
-file2		={Drives, SystemDriveChar}:\base\t_sfsrv\Test3.txt
-file1		=\base\t_sfsrv\Test3.txt
-
-
-[PBASE-F32-FileNamesIdentical-PublicApi-3004-001-FileNamesIdentical_command001]
-expected	=ETrue
-file2		=::
-file1		=::
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-FileText-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,340 +0,0 @@
-[include]
-file1					=\base\base_f32_env.ini
-
-
-[PBASE-F32-FileText-PublicApi-0002command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\filetext_read.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0002command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0004command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\filetext_read.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0004command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0004command9Read]
-expected_str			=Symbian rocks my world!
-
-
-
-[PBASE-F32-FileText-PublicApi-0005command6Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\filetext_eof.txt
-file_mode			=EFileWrite
-
-
-
-[PBASE-F32-FileText-PublicApi-0005command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0005command9Write]
-text				=Symbian is the best!!11ONEONE
-
-
-
-[PBASE-F32-FileText-PublicApi-0005command10Seek]
-seek_mode			=ESeekStart
-
-
-
-[PBASE-F32-FileText-PublicApi-0005command11Read]
-expected_str			=Symbian is the best!!11ONEONE
-
-
-
-[PBASE-F32-FileText-PublicApi-0006command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\filetext_read.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0006command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0006command9Seek]
-seek_mode			=ESeekStart
-
-
-
-[PBASE-F32-FileText-PublicApi-0006command10Read]
-expected_str			=Symbian rocks my world!
-
-
-
-[PBASE-F32-FileText-PublicApi-0007command5Open]
-RFs	=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\filetext_read.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0007command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0007command9Seek]
-seek_mode			=ESeekEnd
-
-
-
-[PBASE-F32-FileText-PublicApi-0008command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\new_file.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0008command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0008command9Write]
-text				=Writing in read-mode
-
-
-
-[PBASE-F32-FileText-PublicApi-0009command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\big_line.txt
-file_mode			=EFileRead
-
-
-[PBASE-F32-FileText-PublicApi-0009command8Set]
-object_name	=RFile1
-
-[big_buffer]
-buffer_length = 512
-
-[PBASE-F32-FileText-PublicApi-0010command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\big_line.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0010command8Set]
-object_name	=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0010command9Read]
-buffer_length			=32
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command5Replace]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\any.txt
-file_mode			=EFileWrite
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command9Write]
-text				=First string
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command10Write]
-text				=Second string
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command11Write]
-text				=Third string
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command15Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\multiline.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command18Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command19Read]
-expected_str			=First string
-buffer_length			=32
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command20Read]
-expected_str			=Second string
-buffer_length			=32
-
-
-
-[PBASE-F32-FileText-PublicApi-0011command21Read]
-expected_str			=Third string
-buffer_length			=32
-
-
-
-[PBASE-F32-FileText-PublicApi-0012command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\oneliner.txt
-file_mode			=EFileWrite
-
-
-
-[PBASE-F32-FileText-PublicApi-0012command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0012command9Write]
-text				=Appended string
-
-
-
-[PBASE-F32-FileText-PublicApi-0012command13Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\oneliner.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0012command16Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0012command18Read]
-expected_str			=First string
-buffer_length			=32
-
-
-
-[PBASE-F32-FileText-PublicApi-0012command19Read]
-expected_str			=Appended string
-buffer_length			=32
-
-
-
-[PBASE-F32-FileText-PublicApi-0013command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\filetext_read.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0013command8Set]
-object_name			=RFile1
-
-
-
-[PBASE-F32-FileText-PublicApi-0013command9Seek]
-seek_mode			=ESeekAddress
-
-
-
-[PBASE-F32-FileText-PublicApi-0014command5Open]
-RFs				=RFs1
-file				={Drives, RAMDriveTestPath}t_filetext\filetext_read.txt
-file_mode			=EFileRead
-
-
-
-[PBASE-F32-FileText-PublicApi-0014command8Set]
-object_name			=RFile1
-
-[test_dir]
-dir				={Drives, RAMDriveTestPath}t_filetext\
-
-[test_file1]
-oldname			={Drives, SystemDriveTestPath}filetext_read.txt
-newname			={Drives, RAMDriveTestPath}t_filetext\
-async			=false
-operation		=0
-
-[test_file2]
-oldname			={Drives, SystemDriveTestPath}oneliner.txt
-newname			={Drives, RAMDriveTestPath}t_filetext\
-async			  = false
-operation		=0
-
-[test_file3]
-oldname			={Drives, SystemDriveTestPath}multiline.txt
-newname			={Drives, RAMDriveTestPath}t_filetext\
-async			  = false
-operation		=0
-
-[test_file4]
-oldname			={Drives, SystemDriveTestPath}any.txt
-newname			={Drives, RAMDriveTestPath}t_filetext\
-async			  = false
-operation		=0
-
-[test_file5]
-oldname			={Drives, SystemDriveTestPath}big_line.txt
-newname			={Drives, RAMDriveTestPath}t_filetext\
-async			  = false
-operation		=0
-
-[test_file6]
-oldname			={Drives, SystemDriveTestPath}new_file.txt
-newname			={Drives, RAMDriveTestPath}t_filetext\
-async			  = false
-operation		=0
-
-[test_file7]
-oldname			={Drives, SystemDriveTestPath}filetext_eof.txt
-newname			={Drives, RAMDriveTestPath}t_filetext\
-async			  = false
-operation		=0
-
-[all_test_files]
-filename			={Drives, RAMDriveTestPath}t_filetext\*.*
-async				=FALSE
-operation 			=EOverWrite
-
-
-[PBASE-F32-FileText-PublicApi-0014command9Seek]
-seek_mode			=ESeekCurrent
-
-
-[RFile1]
-name=RFile1
-
-[CFileMan1]
-name = CFileMan1
-
-[fileman_fs]
-rfsObject = RFs1
-
-[TFileText1]
-name=TFileText1
-
-
-[RFs1]
-name=RFs1
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-FindFile-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,430 +0,0 @@
-[include]
-file1					=\base\base_f32_env.ini
-
-[file]
-name=file
-
-[PBASE-F32-FindFile-PublicApi-0001-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0002-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0002-command5FindByPath]
-filename		=Test1.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0003-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0003-command5FindByPath]
-filename		=Test3.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0004-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0004-command5FindByPath]
-filename		=
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0005-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0005-command5FindByPath]
-filename		=
-pathlist		=
-
-
-
-[PBASE-F32-FindFile-PublicApi-0006-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0006-command5FindByPath]
-filename		=$%&?*
-pathlist		={Drives, SystemDrivePath}
-
-
-
-[PBASE-F32-FindFile-PublicApi-0007-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0007-command5FindByPath]
-filename		=a
-pathlist		=$%&?*
-
-
-[PBASE-F32-FindFile-PublicApi-0008-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0008-command5FindByDir]
-filename		=Test1.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0009-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0009-command5FindByDir]]
-filename		=Test3.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-
-
-[PBASE-F32-FindFile-PublicApi-0010-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0010-command5FindByDir]
-filename		=
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0011-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0011-command5FindWildByPath]
-dir_wrapper		=CDir1
-filename		=Test?.*
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0012-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0012-command5FindWildByPath]
-dir_wrapper		=CDir1
-filename		=?ester.*
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0013-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0013-command5FindWildByPath]
-dir_wrapper		=CDir1
-filename		=
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0014-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0014-command5FindWildByDir]
-dir_wrapper		=CDir1
-filename		=Test?.*
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0015-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0015-command5FindWildByDir]
-dir_wrapper		=CDir1
-filename		=?ester.*
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0016-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0016-command5FindWildByDir]
-dir_wrapper		=CDir1
-filename		=
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0017-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0017-command5FindByPath]
-filename		=Test1.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-[PBASE-F32-FindFile-PublicApi-0018-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0018-command5FindByPath]
-filename		=Test2.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-
-[PBASE-F32-FindFile-PublicApi-0019-command4new]
-FileSession		=RFs1
-
-
-[PBASE-F32-FindFile-PublicApi-0019-command5FindByDir]
-filename		=Test1.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0020-command1Create]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, SystemDriveTestPath}t_findfile\test1\temp.txt
-
-
-[PBASE-F32-FindFile-PublicApi-0020-command4new]
-FileSession		=RFs1
-
-
-[PBASE-F32-FindFile-PublicApi-0020-command5FindByDir]
-filename		=temp.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-[PBASE-F32-FindFile-PublicApi-0020-command6Delete]
-name		={Drives, SystemDriveTestPath}t_findfile\test1\temp.txt
-
-
-[PBASE-F32-FindFile-PublicApi-0021-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0021-command5FindWildByPath]
-dir_wrapper		=CDir1
-filename		=Test1.*
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0022-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0022-command5FindWildByPath]
-dir_wrapper		=CDir1
-filename		=Test2.*
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\;{Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-
-[PBASE-F32-FindFile-PublicApi-0023-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0023-command5FindWildByDir]
-dir_wrapper		=CDir1
-filename		=Test1.*
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-[PBASE-F32-FindFile-PublicApi-0024-command1Create]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, SystemDriveTestPath}t_findfile\test1\temp.txt
-
-
-[PBASE-F32-FindFile-PublicApi-0024-command4new]
-FileSession		=RFs1
-
-
-[PBASE-F32-FindFile-PublicApi-0024-command5FindWildByDir]
-dir_wrapper		=CDir1
-filename		=temp.*
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-[PBASE-F32-FindFile-PublicApi-0024-command6Delete]
-name			={Drives, SystemDriveTestPath}t_findfile\test1\temp.txt
-
-
-[PBASE-F32-FindFile-PublicApi-0025-command4new]
-FileSession		=RFs1
-
-
-[PBASE-F32-FindFile-PublicApi-0025-command5FindByPath]
-filename		=Test1.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-[PBASE-F32-FindFile-PublicApi-0026-command4new]
-FileSession		=RFs1
-
-
-[PBASE-F32-FindFile-PublicApi-0026-command5FindByDir]
-filename		=Test1.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-[PBASE-F32-FindFile-PublicApi-0027-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0027-command5FindWildByDir]
-dir_wrapper		=CDir1
-filename		=Test1.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-
-[PBASE-F32-FindFile-PublicApi-0028-command4new]
-FileSession		=RFs1
-
-
-
-[PBASE-F32-FindFile-PublicApi-0028-command5FindWildByPath]
-dir_wrapper		=CDir1
-filename		=Test1.txt
-pathlist		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-[TFindFile1]
-name=TFindFile1
-
-
-[find_mask_params]
-drive_att =KDriveAttRemovable
-
-[PBASE-F32-FindFile-PublicApi-0026__mask_params]
-drive_att =-1
-
-[rem_correct_file_path]
-expected		={Drives, RemovableDriveTestPath}t_findfile\test1\Test1.txt
-
-[correct_file_path]
-expected		={Drives, SystemDriveTestPath}t_findfile\test1\Test1.txt
-
-[correct_file_path2]
-expected		={Drives, SystemDriveTestPath}t_findfile\test2\Test1.txt
-
-
-[test_dir]
-dir		={Drives, SystemDriveTestPath}t_findfile\
-
-[test_dir1]
-dir		={Drives, SystemDriveTestPath}t_findfile\test1\
-
-[test_dir2]
-dir		={Drives, SystemDriveTestPath}t_findfile\test2\
-
-
-[all_files1]
-filename			={Drives, SystemDriveTestPath}t_findfile\test1\*.*
-async				=FALSE
-operation 			=EOverWrite
-
-[all_files2]
-filename			={Drives, SystemDriveTestPath}t_findfile\test2\*.*
-async				=FALSE
-operation 			=EOverWrite
-
-[test_file1]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, SystemDriveTestPath}t_findfile\test1\
-async			=false
-operation		=0
-
-
-[test_file2]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, SystemDriveTestPath}t_findfile\test2\
-async			  = false
-operation		=0
-
-[test_file3]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, SystemDriveTestPath}t_findfile\test2\
-async			  = false
-operation		=0
-
-
-[test_rem_file1]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RemovableDriveTestPath}t_findfile\test1\
-async			=false
-operation		=0
-
-[all_rem_files1]
-filename			={Drives, RemovableDriveTestPath}t_findfile\test1\*.*
-async				=FALSE
-operation 		=EOverWrite
-
-
-[test_rem_dir]
-dir		={Drives, RemovableDriveTestPath}t_findfile\
-
-[test_rem_dir1]
-dir		={Drives, RemovableDriveTestPath}t_findfile\test1\
-
-[common_dir_wrapper]
-dir_wrapper	=CDir1
-
-
-[RFs1]
-name=RFs1
-
-[RFile1]
-name=RFile1
-
-[RDir1]
-name=RDir1
-
-
-[TEntry1]
-name=TEntry1
-
-[fileman_fs]
-rfsObject = RFs1
-
-[CDir1]
-name=CDir1
-
-[CFileMan1]
-name=CFileMan1
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-Format-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-[include]
-file1					=\base\base_f32_env.ini
-
-
-[file]
-name=file
-
-
-[format1]
-name=format1
-
-
-[rfs1]
-name=rfs1
-
-
-[PBASE-F32-Format-PublicApi-0001-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EQuickFormat
-
-
-[PBASE-F32-Format-PublicApi-0002-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-Format-PublicApi-0003-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=ELowDensity
-
-
-[PBASE-F32-Format-PublicApi-0004-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EFullFormat
-
-
-[PBASE-F32-Format-PublicApi-0005-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=ESpecialFormat
-
-
-[PBASE-F32-Format-PublicApi-0006-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-specialinfo=s
-format=EQuickFormat
-
-
-[PBASE-F32-Format-PublicApi-0007-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-Format-PublicApi-0008-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-Format-PublicApi-0008-001-Next_command06]
-async=TRUE
-
-
-[PBASE-F32-Format-PublicApi-0009-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EForceErase
-
-
-[PBASE-F32-Format-PublicApi-1002-001-Open_command05]
-RFs=rfs1
-drive={Drives, ROMDriveChar}:
-format=EQuickFormat
-
-
-[PBASE-F32-Format-PublicApi-1004-001-Open_command05]
-RFs=rfs1
-drive=InvalidDriveLetter
-format=EQuickFormat
-
-
-[PBASE-F32-Format-PublicApi-1005-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=-1
-
-[PBASE-F32-Format-PublicApi-1005-001-Next_command06]
-async=TRUE
-
-
-[PBASE-F32-Format-PublicApi-1009-001-Create_command05]
-RFs=rfs1
-file_mode=EFileShareAny
-name={Drives, RemovableDrivePath}test03.txt
-
-
-[PBASE-F32-Format-PublicApi-1009-001-Open_command08]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EQuickFormat
-
-
-[PBASE-F32-Format-PublicApi-1010-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-Format-PublicApi-1010-001-Next_command06]
-async=TRUE
-
-
-[PBASE-F32-Format-PublicApi-1010-001-Create_command10]
-RFs=rfs1
-file_mode=EFileShareAny
-name={Drives, RemovableDrivePath}test03.txt
-
-
-[PBASE-F32-Format-PublicApi-1010-001-Open_command14]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-Format-PublicApi-1011-001-Open_command05]
-RFs=rfs1
-drive={Drives, NotMountedDriveChar}:
-format=EQuickFormat
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-OpenFileScan-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-[include]
-file1	=\base\base_f32_env.ini
-
-[PBASE-F32-OpenFileScan-PublicApi-0001command4new]
-FileSession	=RFs1
-
-
-
-[PBASE-F32-OpenFileScan-PublicApi-0002command4new]
-FileSession	=RFs1
-
-
-
-[PBASE-F32-OpenFileScan-PublicApi-0003command4new]
-FileSession	=RFs1
-
-
-
-[PBASE-F32-OpenFileScan-PublicApi-0004command3new]
-FileSession	=RFs1
-
-[OpenFileScanNew]
-FileSession	=RFs2
-
-[CFileMan1]
-name=CFileMan1
-
-[filename1]
-RFs			=RFs1
-file_mode		=EFileShareAny
-file			={Drives, RAMDriveTestPath}openfilescan\Test1.txt
-
-[filename2]
-RFs			=RFs2
-file_mode		=EFileShareAny
-file			={Drives, RAMDriveTestPath}openfilescan\Test2.txt
-
-[filename3]
-RFs			=RFs1
-file_mode		=EFileShareAny
-file			= {Drives, RAMDriveTestPath}openfilescan\Test2.txt
-
-[PathToRamDir]
-dir			={Drives, RAMDriveTestPath}openfilescan\
-
-[RFs1Used]
-rfsObject		=RFs1
-
-[CopyTest1]
-oldname			={Drives, SystemDriveTestPath}Test1.txt
-newname			={Drives, RAMDriveTestPath}openfilescan\
-async			=false
-operation		=0
-
-[CopyTest2]
-oldname			={Drives, SystemDriveTestPath}Test2.txt
-newname			={Drives, RAMDriveTestPath}openfilescan\
-async			=false
-operation		=0
-				
-[DeleteRamFiles]				
-filename		={Drives, RAMDriveTestPath}openfilescan\*.*
-async			=false
-operation		=EOverWrite
-				
-[COMMENTS]
-comment = WARNING. Incomplete paths below because the storage method of RFs. It's not an mistake.
-
-[look_for_many_files]
-expected_filename1 	={Drives, RAMDriveTestPathRelative}openfilescan\Test1.txt
-expected_filename2 	={Drives, RAMDriveTestPathRelative}openfilescan\Test2.txt
-
-
-[look_for_file1]
-expected_filename1 = {Drives, RAMDriveTestPathRelative}openfilescan\Test1.txt
-
-[look_for_file2]
-expected_filename1 = {Drives, RAMDriveTestPathRelative}openfilescan\Test2.txt
-
-
-[filesession_for_thread1]
-FileSession =RFs1
-
-[filesession_for_thread2]
-FileSession =RFs2
-
-
-[RFile1]
-name=RFile1
-
-[RFile2]
-name=RFile2
-
-
-[RFs1]
-name=RFs1
-
-[RFs2]
-name=RFs2
-
-
-[TOpenFileScan1]
-name=TOpenFileScan1
-
-
-[TOpenFileScan2]
-name=TOpenFileScan2
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-Parse-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-[TParse1]
-name=TParse1
-
-
-
-[PBASE-F32-Parse-PublicApi-0002command2Set]
-FileName	=test.txt
-
-
-[PBASE-F32-Parse-PublicApi-0003command2Set]
-FileName	=test.*
-
-
-[PBASE-F32-Parse-PublicApi-0004command2Set]
-FileName	=test.???
-
-
-[PBASE-F32-Parse-PublicApi-0005command2SetNoWild]
-FileName	=test.ext
-RelatedSpec	=b:\rel
-DefaultSpec	=c:\def\test.ext
-
-
-[PBASE-F32-Parse-PublicApi-0006command2SetNoWild]
-FileName	=c:\base\file.*
-
-
-[PBASE-F32-Parse-PublicApi-0007command2SetNoWild]
-FileName	=c:\base\file.tx?
-
-
-[PBASE-F32-Parse-PublicApi-0008command2SetNoWild]
-FileName	=c:file
-RelatedSpec	=c:\base\file.*
-
-
-[PBASE-F32-Parse-PublicApi-0009command2SetNoWild]
-FileName	=c:file
-RelatedSpec	=c:\base\file.ex?
-
-
-[PBASE-F32-Parse-PublicApi-0010command2SetNoWild]
-FileName	=c:file
-DefaultSpec	=c:\base\file.*
-
-
-[PBASE-F32-Parse-PublicApi-0011command2SetNoWild]
-FileName	=c:file
-DefaultSpec	=c:\base\file.ex?
-
-
-[PBASE-F32-Parse-PublicApi-0012command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-Parse-PublicApi-0012command4FullName]
-expected	=c:\dir1\filename.ext
-
-
-[PBASE-F32-Parse-PublicApi-0013command2Set]
-FileName	=c:\dir1\filename.ext
-
-
-[PBASE-F32-Parse-PublicApi-0013command3AddDir]
-DirName		=dir2
-
-
-[PBASE-F32-Parse-PublicApi-0013command4FullName]
-expected	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-Parse-PublicApi-0014command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-Parse-PublicApi-0014command3AddDir]
-DirName		=\dir3
-
-
-[PBASE-F32-Parse-PublicApi-0015command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-Parse-PublicApi-0015command3AddDir]
-DirName		=dir*
-
-
-[PBASE-F32-Parse-PublicApi-0016command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-Parse-PublicApi-0016command3AddDir]
-DirName		=dir\
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-ParseBase-Inherited-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,365 +0,0 @@
-[TParsePtr1]
-name=TParsePtr1
-
-[TParse1]
-name=TParse1
-
-[TParsePtrC1]
-name=TParsePtrC1
-
-
-
-[PBASE-F32-ParseBase-PublicApi-0001command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0001command3FullName]
-expected	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0002command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0002command3Drive]
-expected	=c:
-
-
-[PBASE-F32-ParseBase-PublicApi-0003command2Set]
-FileName	=filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0003command3Drive]
-expected	=
-
-
-[PBASE-F32-ParseBase-PublicApi-0005command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0005command3Path]
-expected	=\dir1\dir2\
-
-
-[PBASE-F32-ParseBase-PublicApi-0006command2Set]
-FileName	=filename.txt
-
-
-[PBASE-F32-ParseBase-PublicApi-0006command3Path]
-expected	=
-
-
-[PBASE-F32-ParseBase-PublicApi-0007command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0007command3DriveAndPath]
-expected	=c:\dir1\dir2\
-
-
-[PBASE-F32-ParseBase-PublicApi-0008command2Set]
-FileName	=filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0008command3DriveAndPath]
-expected	=
-
-
-[PBASE-F32-ParseBase-PublicApi-0009command2Set]
-FileName	=\dir1\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0009command3DriveAndPath]
-expected	=\dir1\
-
-
-[PBASE-F32-ParseBase-PublicApi-0010command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0010command3Name]
-expected	=filename
-
-[PBASE-F32-ParseBase-PublicApi-0011command2Set]
-FileName	=c:\dir1\dir2\
-
-
-[PBASE-F32-ParseBase-PublicApi-0011command3Name]
-expected	=
-
-
-[PBASE-F32-ParseBase-PublicApi-0012command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0012command3Ext]
-expected	=.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0013command2Set]
-FileName	=c:\dir1\dir2\filename
-
-
-[PBASE-F32-ParseBase-PublicApi-0013command3Ext]
-expected	=
-
-
-[PBASE-F32-ParseBase-PublicApi-0014command2Set]
-FileName	=c:\dir1\dir2\
-
-
-[PBASE-F32-ParseBase-PublicApi-0014command3Ext]
-expected	=
-
-
-[PBASE-F32-ParseBase-PublicApi-0015command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0015command3NameAndExt]
-expected	=filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0016command2Set]
-FileName	=c:\dir1\dir2\
-
-[PBASE-F32-ParseBase-PublicApi-0016command3NameAndExt]
-expected	=
-
-
-[PBASE-F32-ParseBase-PublicApi-0017command2Set]
-FileName	=c:\dir1\dir2\filename
-
-
-[PBASE-F32-ParseBase-PublicApi-0017command3NameAndExt]
-expected	=filename
-
-
-[PBASE-F32-ParseBase-PublicApi-0018command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0018command3DrivePresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0019command2Set]
-FileName	=\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0019command3DrivePresent]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0020command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0020command3PathPresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0021command2Set]
-FileName	= filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0021command2PathPresent]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0022command2Set]
-FileName	= *\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0023command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0023command3NamePresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0024command2Set]
-FileName	=c:\dir1\dir2\
-
-
-[PBASE-F32-ParseBase-PublicApi-0024command2NamePresent]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0025command2Set]
-FileName	=c:\dir1\dir2\*.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0025command3NamePresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0026command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0026command3ExtPresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0027command2Set]
-FileName	=c:\dir1\dir2\filename
-
-
-[PBASE-F32-ParseBase-PublicApi-0027command2ExtPresent]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0028command2Set]
-FileName	=c:\dir1\dir2\*.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0028command3ExtPresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0029command2Set]
-FileName	=c:\dir1\dir2\filename.*
-
-
-[PBASE-F32-ParseBase-PublicApi-0029command3ExtPresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0030command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0030command3NameOrExtPresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0031command2Set]
-FileName	=c:\dir1\dir2\
-
-
-[PBASE-F32-ParseBase-PublicApi-0031command2NameOrExtPresent]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0032command2Set]
-FileName	=c:\dir1\dir2\*.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0032command3NameOrExtPresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0033command2Set]
-FileName	=c:\dir1\dir2\filename.*
-
-
-[PBASE-F32-ParseBase-PublicApi-0033command3NameOrExtPresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0034command2Set]
-FileName	=c:\dir1\dir2\*
-
-
-[PBASE-F32-ParseBase-PublicApi-0034command3NameOrExtPresent]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0035command2Set]
-FileName	=c:\
-
-
-[PBASE-F32-ParseBase-PublicApi-0035command3IsRoot]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0036command2Set]
-FileName	=c:\dir1\
-
-
-[PBASE-F32-ParseBase-PublicApi-0036command3IsRoot]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0037command2Set]
-FileName	=c:\dir1\dir2\*.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0037command3IsWild]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0038command2Set]
-FileName	=c:\dir1\dir2\nowildcards.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0038command3IsWild]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0039command2Set]
-FileName	=c:\dir1\dir2\?.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0039command3IsKMatchOne]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0040command2Set]
-FileName	=c:\dir1\dir2\*.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0040command3IsKMatchOne]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0041command2Set]
-FileName	=c:\dir1\dir2\*.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0041command3IsKMatchAny]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0042command2Set]
-FileName	=c:\dir1\dir2\?.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0042command3IsKMatchAny]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0043command2Set]
-FileName	=c:\dir1\dir2\*.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0043command3IsNameWild]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0044command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0044command3IsNameWild]
-expected	=FALSE
-
-
-[PBASE-F32-ParseBase-PublicApi-0045command2Set]
-FileName	=c:\dir1\dir2\filename.*
-
-
-[PBASE-F32-ParseBase-PublicApi-0045command3IsExtWild]
-expected	=TRUE
-
-
-[PBASE-F32-ParseBase-PublicApi-0046command2Set]
-FileName	=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParseBase-PublicApi-0046command3IsExtWild]
-expected	=FALSE
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-ParsePtr-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-[TParsePtr1]
-name=TParsePtr1
-
-
-
-[PBASE-F32-ParsePtr-PublicApi-0001command1new]
-FileName	=c:\path1\path2\file.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0002command1new]
-FileName	=0
-
-
-[PBASE-F32-ParsePtr-PublicApi-0003command1new]
-FileName	=c::\file.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0004command1new]
-FileName	=c:\file?.*
-
-
-[PBASE-F32-ParsePtr-PublicApi-0005command2Set]
-FileName			=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0005command4FullName]
-expected			=c:\dir1\filename.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0006command2Set]
-FileName			=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0006command3AddDir]
-DirName			=dir3
-
-
-[PBASE-F32-ParsePtr-PublicApi-0006command4FullName]
-expected			=c:\dir1\dir2\dir3\filename.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0007command2Set]
-FileName			=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0007command3AddDir]
-DirName			=\dir3
-
-
-[PBASE-F32-ParsePtr-PublicApi-0008command2Set]
-FileName			=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0008command3AddDir]
-DirName			=dir*
-
-
-[PBASE-F32-ParsePtr-PublicApi-0009command2Set]
-FileName			=c:\dir1\dir2\filename.ext
-
-
-[PBASE-F32-ParsePtr-PublicApi-0009command3AddDir]
-DirName			=dir\
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-ParsePtrC-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-[TParsePtrC1]
-name=TParsePtrC1
-
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0001command1new]
-FileName	=c:\path1\path2\file.ext
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0002command1new]
-FileName	=0
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0003command1new]
-FileName	=c::\file.ext
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0004command1new]
-FileName	=c:\file?.*
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0005command1new]
-FileName	=c:\file.txt
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0005command2AddDir]
-DirName		=dir
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0006command1new]
-FileName	=c:\file.txt
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0006command2AddDir]
-DirName		=
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0007command1new]
-FileName	=c:\file.txt
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0007command2AddDir]
-DirName		=$%#
-
-
-[PBASE-F32-ParsePtrC-PublicApi-0008command1new]
-FileName	=c:\file.txt
-
-[PBASE-F32-ParsePtrC-PublicApi-0009command1new]
-FileName	=c:\base\file.txt
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RDir-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,447 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[RDir1]
-name=RDir1
-
-
-[RFs1]
-name=RFs1
-
-
-[TEntryArray1]
-name=TEntryArray1
-
-
-[CFileMan1]
-name=CFileMan1
-
-
-[TEntry1]
-name =TEntry1
-
-[TEntryTmp]
-name =TEntryTmp
-
-
-[PBASE-F32-RDir-PublicApi-001-Delete]
-filename		={Drives, RAMDriveTestPath}rdir\
-async			=FALSE
-operation		=EOverWrite
-
-
-
-[PBASE-F32-RDir-PublicApi-001-RamDiskPath]
-dir			={Drives, RAMDriveTestPath}rdir\
-
-
-[PBASE-F32-RDir-PublicApi-001-RmDir]
-dir			={Drives, RAMDriveTestPath}rdir\
-
-
-
-[PBASE-F32-RDir-PublicApi-NewL]
-rfsObject		=RFs1
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_Files]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\
-newname			={Drives, RAMDriveTestPath}rdir\
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_Any]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\any.txt
-newname			={Drives, RAMDriveTestPath}rdir\any.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_Bigline]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\big_line.txt
-newname			={Drives, RAMDriveTestPath}rdir\big_line.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_FtEof]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\filetext_eof.txt
-newname			={Drives, RAMDriveTestPath}rdir\filetext_eof.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_FtRead]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\filetext_read.txt
-newname			={Drives, RAMDriveTestPath}rdir\filetext_read.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_MLine]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\multiline.txt
-newname			={Drives, RAMDriveTestPath}rdir\multiline.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_NewFile]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\new_file.txt
-newname			={Drives, RAMDriveTestPath}rdir\new_file.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_Oneliner]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\oneliner.txt
-newname			={Drives, RAMDriveTestPath}rdir\oneliner.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_Test1]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\Test1.txt
-newname			={Drives, RAMDriveTestPath}rdir\Test1.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_Test2]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\Test2.txt
-newname			={Drives, RAMDriveTestPath}rdir\Test2.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_Test3]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\Test3.txt
-newname			={Drives, RAMDriveTestPath}rdir\Test3.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-001-Copy_Test]
-oldname			={Drives, SystemDriveChar}:\base\t_sfsrv\test.txt
-newname			={Drives, RAMDriveTestPath}rdir\test.txt
-async			=false
-operation		=EOverWrite
-
-
-[PBASE-F32-RDir-PublicApi-global-001-Read_compare_sync]
-entryObject		=TEntry1
-compare			=TRUE
-
-
-[PBASE-F32-RDir-PublicApi-global-001-Read_compare_async]
-async			=TRUE
-entryObject		=TEntry1
-compare			=TRUE
-
-
-[PBASE-F32-RDir-PublicApi-global-001-assign_Test1]
-object			=TEntry1
-expectedName		=Test1.txt
-
-
-[PBASE-F32-RDir-PublicApi-global-001-assign_Test2]
-object			=TEntry1
-expectedName		=Test2.txt
-
-
-[PBASE-F32-RDir-PublicApi-global-001-assign_Test3]
-object			=TEntry1
-expectedName		=Test3.txt
-
-
-[PBASE-F32-RDir-PublicApi-global-001-assign_USBLOAD]
-object			=TEntry1
-expectedName		=USBLOAD.ZIP
-
-
-[PBASE-F32-RDir-PublicApi-global-001-assign_EOF]
-object			=TEntry1
-expectedName		=
-
-
-[PBASE-F32-RDir-PublicApi-5001-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\
-uidtype			=0
-
-
-[PBASE-F32-RDir-PublicApi-5002-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5003-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5003-001-Read_command006]
-arrayObject		=TEntryArray1
-readarray		=TRUE
-compare			=TRUE
-filename1		=any.txt
-filename2		=big_line.txt
-filename3		=filetext_eof.txt
-filename4		=filetext_read.txt
-filename5		=multiline.txt
-filename6		=new_file.txt
-filename7		=oneliner.txt
-filename8		=test.txt
-filename9		=Test1.txt
-filename10		=Test2.txt
-filename11		=Test3.txt
-
-
-[PBASE-F32-RDir-PublicApi-5004-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5004-001-Read_command006]
-async			=TRUE
-arrayObject		=TEntryArray1
-readarray		=TRUE
-compare			=TRUE
-filename1		=any.txt
-filename2		=big_line.txt
-filename3		=filetext_eof.txt
-filename4		=filetext_read.txt
-filename5		=multiline.txt
-filename6		=new_file.txt
-filename7		=oneliner.txt
-filename8		=test.txt
-filename9		=Test1.txt
-filename10		=Test2.txt
-filename11		=Test3.txt
-
-
-[PBASE-F32-RDir-PublicApi-5007-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5007-001-Read_command006]
-entryObject		=TEntry1
-readarray		=TRUE
-compare			=TRUE
-filename1		=any.txt
-filename2		=big_line.txt
-filename3		=filetext_eof.txt
-filename4		=filetext_read.txt
-filename5		=multiline.txt
-filename6		=new_file.txt
-filename7		=oneliner.txt
-filename8		=test.txt
-filename9		=Test1.txt
-filename10		=Test2.txt
-filename11		=Test3.txt
-filename12		=
-
-
-[PBASE-F32-RDir-PublicApi-5008-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\
-attmask			=KEntryAttNormal
-
-
-
-[PBASE-F32-RDir-PublicApi-5008-001-Read_command006]
-async			=TRUE
-entryObject		=TEntry1
-readarray		=TRUE
-compare			=TRUE
-filename1		=any.txt
-filename2		=big_line.txt
-filename3		=filetext_eof.txt
-filename4		=filetext_read.txt
-filename5		=multiline.txt
-filename6		=new_file.txt
-filename7		=oneliner.txt
-filename8		=test.txt
-filename9		=Test1.txt
-filename10		=Test2.txt
-filename11		=Test3.txt
-filename12		=
-
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command005]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\any.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command006]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\big_line.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command008]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\filetext_eof.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command009]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\filetext_read.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command010]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\multiline.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command011]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\new_file.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command012]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\oneliner.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command013]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\test.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command014]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\Test1.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command015]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\Test2.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command016]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\Test3.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command020]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}rdir\Test1.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command021]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}rdir\Test3.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-Open_command013]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\
-attmask			=KEntryAttReadOnly|KEntryAttMatchExclusive
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-Read_command014]
-entryObject		=TEntry1
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-Read_command015]
-entryObject		=TEntry1
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-Read_command016]
-entryObject		=TEntry1
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command017]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\Test1.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5009-001-SetAtt_command019]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}rdir\Test3.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5010-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\*.txt
-uidtype			=0
-
-
-[PBASE-F32-RDir-PublicApi-5010-001-Read_command007]
-entryObject		=TEntry1
-readarray		=TRUE
-compare			=TRUE
-filename1		=any.txt
-filename2		=big_line.txt
-filename3		=filetext_eof.txt
-filename4		=filetext_read.txt
-filename5		=multiline.txt
-filename6		=new_file.txt
-filename7		=oneliner.txt
-filename8		=test.txt
-filename9		=Test1.txt
-filename10		=Test2.txt
-filename11		=Test3.txt
-filename12		=
-
-
-[PBASE-F32-RDir-PublicApi-5011-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, RAMDriveTestPath}rdir\Test?.txt
-attmask			=KEntryAttNormal
-
-
-[PBASE-F32-RDir-PublicApi-5011-001-Read_command006]
-entryObject		=TEntry1
-
-
-[PBASE-F32-RDir-PublicApi-5011-001-Read_command007]
-entryObject		=TEntry1
-
-
-[PBASE-F32-RDir-PublicApi-5011-001-Read_command008]
-entryObject		=TEntry1
-
-
-[PBASE-F32-RDir-PublicApi-5011-001-Read_command009]
-entryObject		=TEntry1
-
-
-[PBASE-F32-RDir-PublicApi-5101-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, SystemDriveChar}:\base\t_sfsrv\NotExist\
-uidtype			=0
-
-
-[PBASE-F32-RDir-PublicApi-5102-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, SystemDriveChar}:\base\t_sfsrv\\\\
-uidtype			=0
-
-
-[PBASE-F32-RDir-PublicApi-5103-001-Open_command005]
-rfsObject		=RFs1
-path			={Drives, SystemDriveChar}:\base\t_sfsrv\\\\
-attmask			=KEntryAttNormal
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Drives-PublicApi-ANY.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[RFs1]
-name			=RFs1
-
-
-[PBASE-F32-RFS-PublicApi-1001-001-DriveList_command03]
-array_index_2		={Drives, ROMDriveIndex}
-array_index_1		={Drives, SystemDriveIndex}
-array_size		=2
-
-
-[PBASE-F32-RFS-PublicApi-1007-001-CharToDrive_command01]
-drive_index		=EDriveX
-drive_char		=X
-
-
-[PBASE-F32-RFS-PublicApi-1007-001-DriveToChar_command02]
-drive_index		=EDriveX
-drive_char		=X
-
-
-[PBASE-F32-RFS-PublicApi-1014-001-GetSystemDrive_command01]
-drive			={Drives, SystemDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1015-001-Drive_command03]
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1017-001-Volume_command03]
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1019-001-SetVolumeLabel_command03]
-drive			={Drives, BadDriveIndex}
-volume_label		=Test
-
-
-[PBASE-F32-RFS-PublicApi-1025-001-Subst_command03]
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1026-001-GetMediaSerialNumber_command03]
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1028-001-CharToDrive_command01]
-drive_char		=#
-
-
-[PBASE-F32-RFS-PublicApi-1029-001-DriveToChar_command01]
-drive_index		={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1030-001-SetSessionPath_command02]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1030-001-CheckDisk_command03]
-drive_path		=ThisIsNotADrivePath
-
-
-[PBASE-F32-RFS-PublicApi-1032-001-ScanDrive_command03]
-drive_path		=ThisIsNotADrivePath
-
-
-[PBASE-F32-RFS-PublicApi-1034-001-SetDriveName_command03]
-drive_name=Test
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1035-001-GetDriveName_command03]
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1038-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, BadDriveIndex}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1046-001-GetReserveAccess_command03]
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1047-001-ReleaseReserveAccess_command03]
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1059-001-IsValidDrive_command02]
-drive			={Drives, BadDriveIndex}
-drive_is_valid		=false
-
-
-[PBASE-F32-RFS-PublicApi-1064-001-ErasePassword_command03]
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1069-001-ClearPassword_command03]
-drive_old_password	=test
-drive			={Drives, BadDriveIndex}
-
-
-[PBASE-F32-RFS-PublicApi-1074-001-UnlockDrive_command03]
-drive_old_password	=test
-drive			={Drives, BadDriveIndex}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1081-001-GetSystemDriveChar_command03]
-drive_char		={Drives, SystemDriveChar}
-
-
-[PBASE-F32-RFS-PublicApi-1082-001-VolumeIOParam_command03]
-drive			={Drives, SystemDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1084-001-DriveToChar_command01]
-drive_index		=2147483647
-
-
-[PBASE-F32-RFS-PublicApi-1085-001-VolumeIOParam_command03]
-drive			=-1
-
-
-[PBASE-F32-RFS-PublicApi-1087-001-SetSystemDrive_command03]
-drive			=-1
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Drives-PublicApi-RAM.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,446 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[RFs1]
-name			=RFs1
-
-
-[PBASE-F32-RFS-PublicApi-1002-001-Drive_command03]
-drive			={Drives, RAMDrive}
-media_type		={Drives, RAMDriveMediaType}
-
-
-[PBASE-F32-RFS-PublicApi-1003-001-Volume_command03]
-drive			={Drives, RAMDrive}
-save_in_instance	=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-1003-001-SetVolumeLabel_command04]
-drive			={Drives, RAMDrive}
-volume_label		=Test
-
-
-[PBASE-F32-RFS-PublicApi-1003-001-Volume_command05]
-drive			={Drives, RAMDrive}
-volume_label		=Test
-
-
-[PBASE-F32-RFS-PublicApi-1003-001-SetVolumeLabel_command06]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1004-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1004-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1004-001-SetSubst_command05]
-drive			={Drives, RAMDrive}
-subst_path		={Drives, SystemDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1004-001-Subst_command06]
-drive			={Drives, RAMDrive}
-subst_path		={Drives, SystemDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1004-001-SetSubst_command07]
-drive			={Drives, RAMDrive}
-subst_path		=
-
-
-[PBASE-F32-RFS-PublicApi-1004-001-MountFileSystem_command08]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1008-001-CheckDisk_command03]
-drive_path		={Drives, RemovableDrivePath}
-
-
-[PBASE-F32-RFS-PublicApi-1009-001-ScanDrive_command03]
-drive_path		={Drives, RemovableDrivePath}
-
-
-[PBASE-F32-RFS-PublicApi-1010-001-GetDriveName_command03]
-drive			={Drives, RAMDrive}
-save_in_instance	=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-1010-001-SetDriveName_command04]
-drive_name		=TEST
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1010-001-GetDriveName_command05]
-drive_name		=TEST
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1010-001-SetDriveName_command06]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1013-001-ReserveDriveSpace_command03]
-drive			={Drives, RAMDrive}
-bytes_to_reserve	=100
-
-
-[PBASE-F32-RFS-PublicApi-1013-001-GetReserveAccess_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1013-001-ReleaseReserveAccess_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1018-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1018-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1018-001-Volume_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1018-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1020-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1020-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1020-001-SetVolumeLabel_command05]
-drive			={Drives, RAMDrive}
-volume_label		=Test
-
-
-[PBASE-F32-RFS-PublicApi-1020-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1022-001-SetSubst_command03]
-drive			={Drives, RAMDrive}
-subst_path		={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1023-001-SetSubst_command03]
-drive			={Drives, BadDriveIndex}
-subst_path		={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1024-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1024-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1024-001-SetSubst_command05]
-drive			={Drives, RAMDrive}
-subst_path		=WRONG_PATH
-
-
-[PBASE-F32-RFS-PublicApi-1024-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1027-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1027-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1027-001-SetSubst_command05]
-drive			={Drives, RAMDrive}
-subst_path		={Drives, SystemDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1027-001-GetMediaSerialNumber_command06]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1027-001-SetSubst_command07]
-drive			={Drives, RAMDrive}
-subst_path		=
-
-
-[PBASE-F32-RFS-PublicApi-1027-001-MountFileSystem_command08]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1031-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1031-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1031-001-CheckDisk_command05]
-drive_path		={Drives, RAMDrivePath}
-
-
-[PBASE-F32-RFS-PublicApi-1031-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1033-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1033-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1033-001-ScanDrive_command05]
-drive_path		={Drives, RAMDrivePath}
-
-
-[PBASE-F32-RFS-PublicApi-1033-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1037-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1037-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1037-001-LockDrive_command05]
-drive_old_password	=
-drive			={Drives, RAMDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1037-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1043-001-ReserveDriveSpace_command03]
-drive			={Drives, RAMDrive}
-bytes_to_reserve	=100
-
-
-[PBASE-F32-RFS-PublicApi-1043-001-GetReserveAccess_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1043-001-ReserveDriveSpace_command05]
-drive			={Drives, RAMDrive}
-bytes_to_reserve	=100
-
-
-[PBASE-F32-RFS-PublicApi-1044-001-ReserveDriveSpace_command03]
-drive			={Drives, RAMDrive}
-bytes_to_reserve	=10000000
-
-
-[PBASE-F32-RFS-PublicApi-1045-001-GetReserveAccess_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1053-001-SetSubst_command03]
-subst_path		={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1053-001-SetSubst_command04]
-subst_path		=
-
-
-[PBASE-F32-RFS-PublicApi-1058-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1058-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1058-001-IsValidDrive_command05]
-drive			={Drives, RAMDrive}
-drive_is_valid=true
-
-
-[PBASE-F32-RFS-PublicApi-1058-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1062-001-ReleaseReserveAccess_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1063-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1063-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1063-001-SetSubst_command05]
-drive			={Drives, RAMDrive}
-subst_path		={Drives, SystemDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1063-001-Drive_command06]
-drive			={Drives, RAMDrive}
-drive_att		=KDriveAttSubsted
-
-
-[PBASE-F32-RFS-PublicApi-1063-001-SetSubst_command07]
-drive			={Drives, RAMDrive}
-subst_path		=
-
-
-[PBASE-F32-RFS-PublicApi-1063-001-MountFileSystem_command08]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1065-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1065-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1065-001-ErasePassword_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1065-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1070-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1070-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1070-001-ClearPassword_command05]
-drive_old_password	=test
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1070-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1075-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1075-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1075-001-UnlockDrive_command05]
-drive_old_password	=test
-drive			={Drives, RAMDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1075-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1078-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1078-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1078-001-ReserveDriveSpace_command05]
-drive			={Drives, RAMDrive}
-bytes_to_reserve	=100
-
-
-[PBASE-F32-RFS-PublicApi-1078-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1079-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1079-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1079-001-GetReserveAccess_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1079-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1080-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1080-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1080-001-ReleaseReserveAccess_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1080-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-1086-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1086-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1086-001-VolumeIOParam_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1086-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Drives-PublicApi-REM-manual.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,308 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[file]
-name			=file
-
-
-[fileMan]
-name			=fileMan
-
-
-[rfs]
-name			=rfs
-
-
-[format]
-name			=format
-
-
-[RFs1]
-name			=RFs1
-
-
-[PBASE-F32-RFS-PublicApi-1011-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1011-001-NotifyChange_command05]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-[PBASE-F32-RFS-PublicApi-1011-001-Drive_command07]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1011-001-NotifyChange_command08]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1011-001-Drive_command10]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1011-001-UnlockDrive_command11]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1011-001-ClearPassword_command12]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1039-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1039-001-NotifyChange_command05]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1039-001-NotifyChange_command07]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1039-001-LockDrive_command09]
-drive_old_password	=bost
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1039-001-UnlockDrive_command10]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1039-001-ClearPassword_command11]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1041-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1041-001-NotifyChange_command05]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1041-001-Drive_command07]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1041-001-NotifyChange_command08]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1041-001-Drive_command10]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1041-001-UnlockDrive_command11]
-drive_old_password	=tst
-drive			={Drives, RemovableDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1041-001-UnlockDrive_command12]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1041-001-ClearPassword_command13]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1054-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1054-001-NotifyChange_command05]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1054-001-NotifyChange_command07]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1054-001-Volume_command09]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1054-001-UnlockDrive_command10]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1054-001-ClearPassword_command11]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1055-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1055-001-NotifyChange_command05]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1055-001-NotifyChange_command07]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1055-001-ReserveDriveSpace_command09]
-drive			={Drives, RemovableDrive}
-bytes_to_reserve	=3000
-
-
-[PBASE-F32-RFS-PublicApi-1055-001-UnlockDrive_command10]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1055-001-ClearPassword_command11]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1056-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1056-001-NotifyChange_command05]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1056-001-NotifyChange_command07]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1056-001-UnlockDrive_command09]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1056-001-ClearPassword_command10]
-drive_old_password	=WRONG
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1056-001-ClearPassword_command11]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1057-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1057-001-NotifyChange_command05]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1057-001-NotifyChange_command07]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1057-001-UnlockDrive_command09]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-store			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-1057-001-ErasePassword_command10]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1057-001-ClearPassword_command11]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1067-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, RemovableDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1067-001-NotifyChange_command05]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1067-001-NotifyChange_command07]
-type			=ENotifyAll
-path			={Drives, RemovableDriveChar}:
-
-
-[PBASE-F32-RFS-PublicApi-1067-001-ErasePassword_command09]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1067-002-Open_command05]
-RFs			=rfs
-drive			={Drives, RemovableDrivePath}
-format			=EHighDensity|EFullFormat
-
-
-[PBASE-F32-RFS-PublicApi-1067-003-Open_command05]
-RFs			=rfs
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}USBLOAD.ZIP
-
-
-[PBASE-F32-RFS-PublicApi-1067-003-NewL_command07]
-rfsObject			=rfs
-
-
-[PBASE-F32-RFS-PublicApi-1067-003-Copy_command08]
-rfileObject	=file
-newname			={Drives, RemovableDriveChar}:\USBLOAD.ZIP
-async				=false
-operation		=0
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Drives-PublicApi-REM.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[file]
-name			=file
-
-
-[fileMan]
-name			=fileMan
-
-
-[format]
-name			=format
-
-
-[rfs]
-name			=rfs
-
-
-[RFs1]
-name			=RFs1
-
-
-[PBASE-F32-RFS-PublicApi-1005-001-GetMediaSerialNumber_command03]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1068-001-ErasePassword_command03]
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1068-002-Open_command05]
-RFs			=rfs
-drive			={Drives, RemovableDrivePath}
-format			=EHighDensity|EFullFormat
-
-
-[PBASE-F32-RFS-PublicApi-1068-003-Open_command05]
-RFs			=rfs
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}USBLOAD.ZIP
-
-
-[PBASE-F32-RFS-PublicApi-1068-003-NewL_command07]
-rfsObject			=rfs
-
-
-[PBASE-F32-RFS-PublicApi-1068-003-Copy_command08]
-newname					={Drives, RemovableDriveChar}:\USBLOAD.ZIP
-rfileObject			=file
-operation				=0
-async						=false
-
-
-[PBASE-F32-RFS-PublicApi-1073-001-ClearPassword_command03]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-
-
-[PBASE-F32-RFS-PublicApi-1076-001-UnlockDrive_command03]
-drive_old_password	=test
-drive			={Drives, RemovableDrive}
-store			=FALSE
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Files-PublicApi-ANY.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[RFs1]
-name			=RFs1
-
-
-[PBASE-F32-RFS-PublicApi-2030-001-Parse_command03]
-name			=NULL
-
-
-[PBASE-F32-RFS-PublicApi-2032-001-Parse_command03]
-name			=test2032.txt
-related			=\{}:"/|t
-
-
-[PBASE-F32-RFS-PublicApi-2033-001-Parse_command03]
-name			=NULL
-related			=txt
-
-
-[PBASE-F32-RFS-PublicApi-2100-001-IsValidName_command03]
-isbadchar		=TRUE
-name			=test{}:"/|.txt
-badchar			=|
-isvalid			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-2101-001-SetSessionToPrivate_command03]
-drive			=-12345
-
-
-[PBASE-F32-RFS-PublicApi-2101-001-NotifyChange_command04]
-type			=ENotifyAll
-path			=?:
-
-
-[PBASE-F32-RFS-PublicApi-2103-001-CreatePrivatePath_command03]
-drive			=-12345
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Files-PublicApi-RAM.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2174 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[rfs]
-name			=rfs
-
-
-[file]
-name			=file
-
-
-[RFs1]
-name			=RFs1
-
-
-[RFile1]
-name			=RFile1
-
-
-[PBASE-F32-RFS-PublicApi-2001-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2001-001-SessionPath_command04]
-comparepath		={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2002-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2002-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2002.txt
-
-
-[PBASE-F32-RFS-PublicApi-2002-001-RealName_command10]
-name			=test2002.txt
-comparename		={Drives, RAMDriveTestPath}test2002.txt
-
-
-[PBASE-F32-RFS-PublicApi-2002-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test2002.txt
-
-
-[PBASE-F32-RFS-PublicApi-2003-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test03.txt
-
-
-[PBASE-F32-RFS-PublicApi-2003-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2003-001-Parse_command10]
-parsepath		={Drives, RAMDriveTestPathRelative}
-name			=test03.txt
-parsedrive		={Drives, RAMDriveChar}:
-parseext		=.txt
-parsename		=test03
-
-
-[PBASE-F32-RFS-PublicApi-2003-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test03.txt
-
-
-[PBASE-F32-RFS-PublicApi-2004-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test04.txt
-
-
-[PBASE-F32-RFS-PublicApi-2004-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2004-001-Parse_command10]
-name			=test04.txt
-related			=txt
-
-
-[PBASE-F32-RFS-PublicApi-2004-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test04.txt
-
-
-[PBASE-F32-RFS-PublicApi-2005-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2005-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2005-001-GetDir_command05]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=TestDir
-
-
-[PBASE-F32-RFS-PublicApi-2005-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2006-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2006-001-MkDirAll_command04]
-dir			={Drives, RAMDriveTestPath}TestDirAll\
-
-
-[PBASE-F32-RFS-PublicApi-2006-001-GetDir_command05]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=TestDirAll
-
-
-[PBASE-F32-RFS-PublicApi-2006-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}TestDirAll\
-
-
-[PBASE-F32-RFS-PublicApi-2007-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2007-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2007-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2007-001-GetDir_command06]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=FALSE
-comparename		=TestDir
-
-
-[PBASE-F32-RFS-PublicApi-2008-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2008-001-GetDir_command04]
-name			={Drives, RAMDriveTestPath}
-sortkey			=ESortByName
-uidtype			=0
-
-
-[PBASE-F32-RFS-PublicApi-2009-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2009-001-GetDir_command04]
-attmask			=KEntryAttNormal
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2010-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2010-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test10_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2010-001-Replace_command10]
-newname			=test10_new.txt
-oldname			=test10_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2010-001-GetDir_command11]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=test10_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2010-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test10_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2011-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2011-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test11_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2011-001-Rename_command10]
-newname			=test11_new.txt
-oldname			=test11_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2011-001-GetDir_command11]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=test11_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2011-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test11_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2012-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2012-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test12.txt
-
-
-[PBASE-F32-RFS-PublicApi-2012-001-Delete_command10]
-name			=test12.txt
-
-
-[PBASE-F32-RFS-PublicApi-2012-001-GetDir_command11]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=FALSE
-comparename		=test12.txt
-
-
-[PBASE-F32-RFS-PublicApi-2013-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2013-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2013.txt
-
-
-[PBASE-F32-RFS-PublicApi-2013-001-SetAtt_command10]
-clearattmask		=KEntryAttNormal
-name			=test2013.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2013-001-Att_command11]
-issetatt		=TRUE
-name			=test2013.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2013-001-SetAtt_command12]
-clearattmask		=KEntryAttReadOnly
-name			=test2013.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2013-001-Delete_command13]
-name			={Drives, RAMDriveTestPath}test2013.txt
-
-
-[PBASE-F32-RFS-PublicApi-2014-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2014-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2014.txt
-
-
-[PBASE-F32-RFS-PublicApi-2014-001-SetModified_command10]
-name			=test2014.txt
-time			=20060101:
-
-
-[PBASE-F32-RFS-PublicApi-2014-001-Modified_command11]
-name			=test2014.txt
-time			=20060101:
-
-
-[PBASE-F32-RFS-PublicApi-2014-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test2014.txt
-
-
-[PBASE-F32-RFS-PublicApi-2015-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2015-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2015.txt
-
-
-[PBASE-F32-RFS-PublicApi-2015-001-SetEntry_command10]
-clearattmask		=KEntryAttNormal
-time			=20060101:
-name			=test2015.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2015-001-Entry_command11]
-isatthidden		=FALSE
-isattuid		=FALSE
-isattdir		=FALSE
-isattsystem		=FALSE
-isattreadonly		=TRUE
-isattarchive		=TRUE
-name			=test2015.txt
-
-
-[PBASE-F32-RFS-PublicApi-2015-001-SetEntry_command12]
-clearattmask		=KEntryAttReadOnly
-time			=20060101:
-name			=test2015.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2015-001-Delete_command13]
-name			={Drives, RAMDriveTestPath}test2015.txt
-
-
-[PBASE-F32-RFS-PublicApi-2016-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2016-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=test2016.txt
-
-
-[PBASE-F32-RFS-PublicApi-2016-001-Write_command07]
-datawrite		=Some_data_that_will_be_written_to_the_file.
-
-
-[PBASE-F32-RFS-PublicApi-2016-001-ReadFileSection_command11]
-length_buffer		=10
-length_read		=10
-name			=test2016.txt
-offset			=0
-
-
-[PBASE-F32-RFS-PublicApi-2016-001-Delete_command12]
-name			=test2016.txt
-
-
-[PBASE-F32-RFS-PublicApi-2017-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2017.txt
-
-
-[PBASE-F32-RFS-PublicApi-2017-001-IsFileOpen_command09]
-isopen=FALSE
-file			={Drives, RAMDriveTestPath}test2017.txt
-
-
-[PBASE-F32-RFS-PublicApi-2017-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}test2017.txt
-
-
-[PBASE-F32-RFS-PublicApi-2018-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2018.txt
-
-
-[PBASE-F32-RFS-PublicApi-2018-001-GetShortName_command09]
-shortname		=test2018.txt
-longname		={Drives, RAMDriveTestPath}test2018.txt
-
-
-[PBASE-F32-RFS-PublicApi-2018-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}test2018.txt
-
-
-[PBASE-F32-RFS-PublicApi-2019-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2019.txt
-
-
-[PBASE-F32-RFS-PublicApi-2019-001-GetLongName_command09]
-shortname		={Drives, RAMDriveTestPath}test2019.txt
-longname		=test2019.txt
-
-
-[PBASE-F32-RFS-PublicApi-2019-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}test2019.txt
-
-
-[PBASE-F32-RFS-PublicApi-2020-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2020.txt
-
-
-[PBASE-F32-RFS-PublicApi-2020-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2020-001-IsFileInRom_command10]
-isinrom			=FALSE
-file			=test2020.txt
-
-
-[PBASE-F32-RFS-PublicApi-2020-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test2020.txt
-
-
-[PBASE-F32-RFS-PublicApi-2021-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2021-001-IsValidName_command04]
-name			=test2021.txt
-isvalid			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-2022-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2022-001-IsValidName_command04]
-isbadchar		=TRUE
-name			=*^&test.txt
-badchar			=*
-isvalid			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-2023-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2023-001-SetSessionToPrivate_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2023-001-SessionPath_command05]
-comparepath		={Drives, RAMDriveChar}:\Private\200041C1\
-
-
-[PBASE-F32-RFS-PublicApi-2024-001-CreatePrivatePath_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2024-001-PrivatePath_command04]
-comparepath		=\Private\200041C1\
-
-
-[PBASE-F32-RFS-PublicApi-2024-001-RmDir_command05]
-dir			={Drives, RAMDrivePath}Private\200041C1\
-
-
-[PBASE-F32-RFS-PublicApi-2026-001-RealName_command03]
-name			={Drives, RAMDriveTestPath}none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2027-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}NoneDir\
-
-
-[PBASE-F32-RFS-PublicApi-2028-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}{}:"/|\
-
-
-[PBASE-F32-RFS-PublicApi-2029-001-Parse_command03]
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2031-001-Parse_command03]
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2034-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2034-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}MkDir{}:"/|\
-
-
-[PBASE-F32-RFS-PublicApi-2035-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2035-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}MkDirTwice\
-
-
-[PBASE-F32-RFS-PublicApi-2035-001-MkDir_command05]
-dir			={Drives, RAMDriveTestPath}MkDirTwice\
-
-
-[PBASE-F32-RFS-PublicApi-2035-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}MkDirTwice\
-
-
-[PBASE-F32-RFS-PublicApi-2036-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2036-001-MkDirAll_command04]
-dir			={Drives, RAMDriveTestPath}MkDirAll{}:"/|\
-
-
-[PBASE-F32-RFS-PublicApi-2037-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2037-001-MkDirAll_command04]
-dir			={Drives, RAMDriveTestPath}MkDirAllTwice\
-
-
-[PBASE-F32-RFS-PublicApi-2037-001-MkDirAll_command05]
-dir			={Drives, RAMDriveTestPath}MkDirAllTwice\
-
-
-[PBASE-F32-RFS-PublicApi-2037-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}MkDirAllTwice\
-
-
-[PBASE-F32-RFS-PublicApi-2038-001-RmDir_command03]
-dir			={Drives, RAMDriveTestPath}RmDir{}:"/|\
-
-
-[PBASE-F32-RFS-PublicApi-2039-001-RmDir_command03]
-dir			={Drives, RAMDriveTestPath}NoneDir\
-
-
-[PBASE-F32-RFS-PublicApi-2040-001-GetDir_command03]
-attmask			=KEntryAttMaskSupported
-name			={Drives, RAMDriveTestPath}ErrDir{}:"/|\
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2041-001-GetDir_command03]
-attmask			=KEntryAttMaskSupported
-name			={Drives, RAMDriveTestPath}NoneDir\
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test42a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test42b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-SetAtt_command11]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}test42a.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-Att_command12]
-issetatt		=TRUE
-name			={Drives, RAMDriveTestPath}test42a.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-GetDir_command13]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMatchExclusive|KEntryAttReadOnly
-isexist			=TRUE
-comparename		=test42a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-GetDir_command14]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMatchExclusive|KEntryAttReadOnly
-isexist			=FALSE
-comparename		=test42b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-Delete_command15]
-name			={Drives, RAMDriveTestPath}test42b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-SetAtt_command16]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}test42a.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2042-001-Delete_command17]
-name			={Drives, RAMDriveTestPath}test42a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2043-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test43a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2043-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test43b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2043-001-GetDir_command11]
-attmask			=KEntryAttMaskSupported
-name			={Drives, RAMDriveTestPath}
-sortkey			=EDescending|EAscending
-
-
-[PBASE-F32-RFS-PublicApi-2043-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test43a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2043-001-Delete_command13]
-name			={Drives, RAMDriveTestPath}test43b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2044-001-GetDir_command03]
-attmask			=KEntryAttMaskSupported
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}ErrDir{}:"/|\
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2045-001-GetDir_command03]
-attmask			=KEntryAttMaskSupported
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}NoneDir\
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2046-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test46a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2046-001-MkDir_command09]
-dir			={Drives, RAMDriveTestPath}Test46a\
-
-
-[PBASE-F32-RFS-PublicApi-2046-001-GetDir_command10]
-isexist			=TRUE
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMatchExclusive|KEntryAttDir
-sortkey			=ESortByName
-comparename		=Test46a
-
-
-[PBASE-F32-RFS-PublicApi-2046-001-GetDir_command11]
-isexist			=FALSE
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMatchExclusive|KEntryAttDir
-sortkey			=ESortByName
-comparename		=Test46a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2046-001-RmDir_command12]
-dir			={Drives, RAMDriveTestPath}Test46a\
-
-
-[PBASE-F32-RFS-PublicApi-2046-001-Delete_command13]
-name			={Drives, RAMDriveTestPath}test46a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2047-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test47a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2047-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test47b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2047-001-GetDir_command11]
-attmask			=KEntryAttNormal
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}
-sortkey			=EDescending|EAscending
-
-
-[PBASE-F32-RFS-PublicApi-2047-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test47a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2047-001-Delete_command13]
-name			={Drives, RAMDriveTestPath}test47b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2048-001-GetDir_command03]
-name			={Drives, RAMDriveTestPath}ErrDir{}:"/|\
-sortkey			=ESortByName
-uidtype			=0
-
-
-[PBASE-F32-RFS-PublicApi-2049-001-GetDir_command03]
-name			={Drives, RAMDriveTestPath}NoneDir\
-sortkey			=ESortByUid
-uidtype			=0
-
-
-[PBASE-F32-RFS-PublicApi-2050-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test50a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2050-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test50b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2050-001-GetDir_command11]
-name			={Drives, RAMDriveTestPath}
-sortkey			=ESortByUid
-uidtype			=-12345
-
-
-[PBASE-F32-RFS-PublicApi-2050-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test50a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2050-001-Delete_command13]
-name			={Drives, RAMDriveTestPath}test50b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2051-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test51a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2051-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test51b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2051-001-GetDir_command11]
-name			={Drives, RAMDriveTestPath}
-sortkey			=EDescending|EAscending
-uidtype			=0
-
-
-[PBASE-F32-RFS-PublicApi-2051-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test51a.txt
-
-
-[PBASE-F32-RFS-PublicApi-2051-001-Delete_command13]
-name			={Drives, RAMDriveTestPath}test51b.txt
-
-
-[PBASE-F32-RFS-PublicApi-2052-001-Delete_command03]
-name			={Drives, RAMDriveTestPath}nonefile.txt
-
-
-[PBASE-F32-RFS-PublicApi-2053-001-Delete_command03]
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2054-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test54.txt
-
-
-[PBASE-F32-RFS-PublicApi-2054-001-SetAtt_command09]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}test54.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2054-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}test54.txt
-
-
-[PBASE-F32-RFS-PublicApi-2054-001-SetAtt_command11]
-clearattmask		=5
-name			={Drives, RAMDriveTestPath}test54.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2054-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test54.txt
-
-
-[PBASE-F32-RFS-PublicApi-2055-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test55.txt
-
-
-[PBASE-F32-RFS-PublicApi-2055-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2055-001-SetAtt_command10]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}test55.txt
-setattmask		=KEntryAttSystem
-
-
-[PBASE-F32-RFS-PublicApi-2055-001-Delete_command11]
-name			=test55.txt
-
-
-[PBASE-F32-RFS-PublicApi-2056-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2056-001-Replace_command04]
-newname			=replaceA.txt
-oldname			=none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2057-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test57.txt
-
-
-[PBASE-F32-RFS-PublicApi-2057-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2057-001-Replace_command10]
-newname			=test57.txt
-oldname			={}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2057-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test57.txt
-
-
-[PBASE-F32-RFS-PublicApi-2058-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test58.txt
-
-
-[PBASE-F32-RFS-PublicApi-2058-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2058-001-Replace_command10]
-newname			={}:"/|.txt
-oldname			=test58.txt
-
-
-[PBASE-F32-RFS-PublicApi-2058-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test58.txt
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}t_fs59_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}t_fs59_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-SetAtt_command11]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}t_fs59_new.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-Att_command12]
-name			={Drives, RAMDriveTestPath}t_fs59_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-SetSessionPath_command13]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-Replace_command14]
-newname			=t_fs59_new.txt
-oldname			=t_fs59_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-SetAtt_command15]
-name			={Drives, RAMDriveTestPath}t_fs59_new.txt
-setattmask		=KEntryAttNormal
-clearattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-Delete_command16]
-name			={Drives, RAMDriveTestPath}t_fs59_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2059-001-Delete_command17]
-name			={Drives, RAMDriveTestPath}t_fs59_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2060-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}t_fs60_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2060-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2060-001-Replace_command10]
-newname			={Drives, SystemDriveChar}:\will_not_be_created.txt
-oldname			=t_fs60_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2060-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}t_fs60_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2061-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}t_fs61_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2061-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2061-001-Rename_command10]
-newname			={Drives, SystemDriveChar}:\will_not_be_created.txt
-oldname			=t_fs61_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2061-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}t_fs61_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2062-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test62_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2062-001-SetSessionPath_command09]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2062-001-Rename_command10]
-newname			={}:"/|.txt
-oldname			=test62_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2062-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test62_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2063-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2063-001-Rename_command04]
-newname			=rename.txt
-oldname			={}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2064-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test64_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2064-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test64_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2064-001-SetAtt_command11]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}test64_new.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2064-001-SetSessionPath_command12]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2064-001-Rename_command13]
-newname			=test64_new.txt
-oldname			=test64_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2064-001-SetAtt_command14]
-clearattmask		=5
-name			={Drives, RAMDriveTestPath}test64_new.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2064-001-Delete_command15]
-name			={Drives, RAMDriveTestPath}test64_new.txt
-
-
-[PBASE-F32-RFS-PublicApi-2064-001-Delete_command16]
-name			={Drives, RAMDriveTestPath}test64_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2065-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2065-001-Rename_command04]
-newname			=rename.txt
-oldname			=none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2066-001-Att_command03]
-name			={Drives, RAMDriveTestPath}none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2067-001-Att_command03]
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2068-001-SetAtt_command03]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}none.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2069-001-SetAtt_command03]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2070-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test70.txt
-
-
-[PBASE-F32-RFS-PublicApi-2070-001-SetAtt_command09]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}test70.txt
-setattmask		=99999999
-
-
-[PBASE-F32-RFS-PublicApi-2070-001-SetAtt_command10]
-clearattmask		=5
-name			={Drives, RAMDriveTestPath}test70.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2070-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test70.txt
-
-
-[PBASE-F32-RFS-PublicApi-2071-001-SetAtt_command04]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDrivePath}
-setattmask		=KEntryAttVolume
-
-
-[PBASE-F32-RFS-PublicApi-2071-001-Att_command05]
-issetatt		=FALSE
-name			={Drives, RAMDrivePath}
-setattmask		=KEntryAttVolume
-
-
-[PBASE-F32-RFS-PublicApi-2072-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test72.txt
-
-
-[PBASE-F32-RFS-PublicApi-2072-001-SetAtt_command09]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}test72.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2072-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}test72.txt
-
-
-[PBASE-F32-RFS-PublicApi-2072-002-Delete_command03]
-name			={Drives, RAMDriveTestPath}test72.txt
-
-
-[PBASE-F32-RFS-PublicApi-2073-001-Modified_command03]
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2074-001-Modified_command03]
-name			={Drives, RAMDriveTestPath}none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2075-001-SetModified_command03]
-name			={Drives, RAMDriveTestPath}none.txt
-time			=20060101:
-
-
-[PBASE-F32-RFS-PublicApi-2076-001-SetModified_command03]
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-time			=20060101:
-
-
-[PBASE-F32-RFS-PublicApi-2077-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}t_fs77.txt
-
-
-[PBASE-F32-RFS-PublicApi-2077-001-SetModified_command09]
-name			={Drives, RAMDriveTestPath}t_fs77.txt
-
-
-[PBASE-F32-RFS-PublicApi-2077-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}t_fs77.txt
-
-
-[PBASE-F32-RFS-PublicApi-2078-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test78.txt
-
-
-[PBASE-F32-RFS-PublicApi-2078-001-SetAtt_command08]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}test78.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2078-001-Open_command10]
-RFs			=RFs1
-file_mode		=EFileRead
-file			={Drives, RAMDriveTestPath}test78.txt
-
-
-[PBASE-F32-RFS-PublicApi-2078-001-SetModified_command12]
-name			={Drives, RAMDriveTestPath}test78.txt
-time			=20060101:
-
-
-[PBASE-F32-RFS-PublicApi-2078-001-SetAtt_command17]
-clearattmask		=KEntryAttReadOnly|KEntryAttSystem
-name			={Drives, RAMDriveTestPath}test78.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2078-001-Delete_command18]
-name			={Drives, RAMDriveTestPath}test78.txt
-
-
-[PBASE-F32-RFS-PublicApi-2079-001-Entry_command03]
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2080-001-Entry_command03]
-name			={Drives, RAMDriveTestPath}none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2081-001-SetEntry_command03]
-clearattmask			=KEntryAttNormal
-time			=20060101:
-name			={Drives, RAMDriveTestPath}none.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2082-001-SetEntry_command03]
-clearattmask			=KEntryAttNormal
-time			=20060101:
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2083-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2083.txt
-
-
-[PBASE-F32-RFS-PublicApi-2083-001-SetEntry_command09]
-clearattmask		=KEntryAttNormal
-time			=20060101:
-name			={Drives, RAMDriveTestPath}test2083.txt
-setattmask		=2147483647
-
-
-[PBASE-F32-RFS-PublicApi-2083-001-SetEntry_command10]
-clearattmask		=KEntryAttReadOnly
-time			=20060101:
-name			={Drives, RAMDriveTestPath}test2083.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2083-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test2083.txt
-
-
-[PBASE-F32-RFS-PublicApi-2084-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2084.txt
-
-
-[PBASE-F32-RFS-PublicApi-2084-001-SetEntry_command09]
-clearattmask		=KEntryAttReadOnly
-time			=20060101:
-name			={Drives, RAMDriveTestPath}test2084.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2084-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}test2084.txt
-
-
-[PBASE-F32-RFS-PublicApi-2084-002-Delete_command03]
-name			={Drives, RAMDriveTestPath}test2084.txt
-
-
-[PBASE-F32-RFS-PublicApi-2085-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}t_fs85.txt
-
-
-[PBASE-F32-RFS-PublicApi-2085-001-SetEntry_command09]
-clearattmask		=KEntryAttNormal
-time			=-1000000:
-name			={Drives, RAMDriveTestPath}t_fs85.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2085-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}t_fs85.txt
-
-
-[PBASE-F32-RFS-PublicApi-2085-001-SetEntry_command11]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}t_fs85.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2085-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}t_fs85.txt
-
-
-[PBASE-F32-RFS-PublicApi-2086-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2086.txt
-
-
-[PBASE-F32-RFS-PublicApi-2086-001-SetEntry_command09]
-clearattmask		=KEntryAttReadOnly
-time			=20060101:
-name			={Drives, RAMDriveTestPath}test2086.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-2086-001-Delete_command10]
-name			={Drives, RAMDriveTestPath}test2086.txt
-
-
-[PBASE-F32-RFS-PublicApi-2086-002-Delete_command03]
-name			={Drives, RAMDriveTestPath}test2086.txt
-
-
-[PBASE-F32-RFS-PublicApi-2087-001-ReadFileSection_command03]
-length_buffer		=50
-length_read		=50
-name			={Drives, RAMDriveTestPath}{}:"/|.txt
-offset			=0
-
-
-[PBASE-F32-RFS-PublicApi-2088-001-ReadFileSection_command03]
-length_buffer		=50
-length_read		=50
-name			={Drives, RAMDriveTestPath}none.txt
-offset			=0
-
-
-[PBASE-F32-RFS-PublicApi-2089-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2089-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=test2089.txt
-
-
-[PBASE-F32-RFS-PublicApi-2089-001-Write_command07]
-datawrite		=Some_data_that_will_be_written_to_the_file.
-
-
-[PBASE-F32-RFS-PublicApi-2089-001-ReadFileSection_command11]
-length_buffer		=10
-length_read		=10
-name			={Drives, RAMDriveTestPath}test2089.txt
-offset			=-12345
-
-
-[PBASE-F32-RFS-PublicApi-2089-001-Delete_command12]
-name			=test2089.txt
-
-
-[PBASE-F32-RFS-PublicApi-2089-002-Delete_command03]
-name			={Drives, RAMDriveTestPath}test2089.txt
-
-
-[PBASE-F32-RFS-PublicApi-2090-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2090-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=test2090.txt
-
-
-[PBASE-F32-RFS-PublicApi-2090-001-Write_command07]
-datawrite		=Some_data_that_will_be_written_to_the_file.
-
-
-[PBASE-F32-RFS-PublicApi-2090-001-ReadFileSection_command11]
-length_buffer		=10
-length_read		=20
-name			={Drives, RAMDriveTestPath}test2090.txt
-offset			=0
-
-
-[PBASE-F32-RFS-PublicApi-2090-001-Delete_command12]
-name			=test2090.txt
-
-
-[PBASE-F32-RFS-PublicApi-2090-002-Delete_command03]
-name			={Drives, RAMDriveTestPath}test2090.txt
-
-
-[PBASE-F32-RFS-PublicApi-2091-001-IsFileOpen_command03]
-file			={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2092-001-IsFileOpen_command03]
-file			={Drives, RAMDriveTestPath}none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2093-001-GetShortName_command03]
-longname		={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2094-001-GetShortName_command03]
-longname		={Drives, RAMDriveTestPath}none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2095-001-GetLongName_command03]
-shortname		={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2096-001-GetLongName_command03]
-shortname		={Drives, RAMDriveTestPath}none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2097-001-IsFileInRom_command03]
-isinrom			=FALSE
-file			={Drives, RAMDriveTestPath}{}:"/|.txt
-
-
-[PBASE-F32-RFS-PublicApi-2098-001-IsFileInRom_command03]
-isinrom			=FALSE
-file			={Drives, RAMDriveTestPath}none.txt
-
-
-[PBASE-F32-RFS-PublicApi-2099-001-IsValidName_command03]
-name			={Drives, RAMDriveTestPath}\\\\test.txt
-isvalid			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-2102-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2102-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2102-001-SetSessionToPrivate_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2102-001-Create_command08]
-RFs			=rfs
-file_mode		=EFileShareAny
-name			=test2002.txt
-
-
-[PBASE-F32-RFS-PublicApi-2102-001-MountFileSystem_command12]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-2104-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2104-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2104-001-CreatePrivatePath_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2104-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-2105-001-Create_command05]
-RFs			=rfs
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test2105.txt
-
-
-[PBASE-F32-RFS-PublicApi-2105-001-SetAtt_command09]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}test2105.txt
-setattmask		=KEntryAttVolume
-
-
-[PBASE-F32-RFS-PublicApi-2105-001-Att_command10]
-issetatt		=FALSE
-name			={Drives, RAMDriveTestPath}test2105.txt
-setattmask			=KEntryAttVolume
-
-
-[PBASE-F32-RFS-PublicApi-2105-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test2105.txt
-
-
-[PBASE-F32-RFS-PublicApi-2201-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}testdir\
-
-
-[PBASE-F32-RFS-PublicApi-2201-001-GetDir_command04]
-attmask			=KEntryAttMaskSupported
-name			={Drives, RAMDriveTestPath}te*\
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2201-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}testdir\
-
-
-[PBASE-F32-RFS-PublicApi-2202-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2202-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2202-001-Create_command08]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2202-001-GetDir_command12]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}*.txt
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2202-001-GetDir_command13]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}*.txt
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2202-001-Delete_command14]
-name			=file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2202-001-Delete_command15]
-name			=file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2203-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2203-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2203-001-GetDir_command05]
-attmask			=KEntryAttMaskSupported
-name			={Drives, RAMDrivePath}
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2203-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-2204-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}testdir\
-
-
-[PBASE-F32-RFS-PublicApi-2204-001-GetDir_command04]
-attmask			=KEntryAttMaskSupported
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}t*\
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2204-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}testdir\
-
-
-[PBASE-F32-RFS-PublicApi-2205-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2205-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2205-001-Create_command08]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2205-001-GetDir_command12]
-isexist			=TRUE
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}*.txt
-attmask			=KEntryAttMaskSupported
-sortkey			=ESortByName
-comparename		=file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2205-001-GetDir_command13]
-isexist			=TRUE
-isdirlist		=TRUE
-name			={Drives, RAMDriveTestPath}*.txt
-attmask			=KEntryAttMaskSupported
-sortkey			=ESortByName
-comparename		=file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2205-001-Delete_command14]
-name			=file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2205-001-Delete_command15]
-name			=file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2206-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2206-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2206-001-GetDir_command05]
-attmask			=KEntryAttMaskSupported
-isdirlist		=TRUE
-name			={Drives, RAMDrivePath}
-sortkey			=ESortByName
-
-
-[PBASE-F32-RFS-PublicApi-2206-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-2207-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}testdir\
-
-
-[PBASE-F32-RFS-PublicApi-2207-001-GetDir_command04]
-name			={Drives, RAMDriveTestPath}t*\
-sortkey			=ESortByName
-uidtype			=0
-
-
-[PBASE-F32-RFS-PublicApi-2207-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}testdir\
-
-
-[PBASE-F32-RFS-PublicApi-2208-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2208-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2208-001-Create_command08]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2208-001-GetDir_command12]
-uidtype			=0
-isexist			=TRUE
-name			={Drives, RAMDriveTestPath}*.txt
-sortkey			=ESortByName
-comparename		=file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2208-001-GetDir_command13]
-uidtype			=0
-isexist			=TRUE
-name			={Drives, RAMDriveTestPath}*.txt
-sortkey			=ESortByName
-comparename		=file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2208-001-Delete_command14]
-name			=file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2208-001-Delete_command15]
-name			=file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2209-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2209-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-2209-001-GetDir_command05]
-name			={Drives, RAMDrivePath}
-sortkey			=ESortByName
-uidtype			=0
-
-
-[PBASE-F32-RFS-PublicApi-2209-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-2210-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2210-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2210-001-Rename_command10]
-newname			=test_*.txt
-oldname			=test_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2210-001-Delete_command11]
-name			=test_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2211-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2211-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}DirOld\
-
-
-[PBASE-F32-RFS-PublicApi-2211-001-Rename_command05]
-newname			=DirNew
-oldname			=DirOld
-
-
-[PBASE-F32-RFS-PublicApi-2211-001-GetDir_command06]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=DirNew
-
-
-[PBASE-F32-RFS-PublicApi-2211-001-RmDir_command07]
-dir			={Drives, RAMDriveTestPath}DirNew\
-
-
-[PBASE-F32-RFS-PublicApi-2212-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2212-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=test_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2212-001-Replace_command10]
-newname			=test10_*.txt
-oldname			=test10_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2212-001-Delete_command11]
-name			={Drives, RAMDriveTestPath}test_old.txt
-
-
-[PBASE-F32-RFS-PublicApi-2213-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}DoesntExist2213\NewDir2213\
-
-
-[PBASE-F32-RFS-PublicApi-2213-001-GetDir_command04]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=FALSE
-comparename		=DoesntExist2213
-
-
-[PBASE-F32-RFS-PublicApi-2214-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}DoesntExist2214\NewDir2214
-
-
-[PBASE-F32-RFS-PublicApi-2214-001-GetDir_command04]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=DoesntExist2214
-
-
-[PBASE-F32-RFS-PublicApi-2214-001-GetDir_command05]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=FALSE
-comparename		=NewDir2214
-
-
-[PBASE-F32-RFS-PublicApi-2214-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}DoesntExist2214\
-
-
-[PBASE-F32-RFS-PublicApi-2215-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}DoesntExist2215\NewDir2215_1\NewDir2215_2
-
-
-[PBASE-F32-RFS-PublicApi-2216-001-MkDirAll_command03]
-dir			={Drives, RAMDriveTestPath}DoesntExist2216\NewDir2216\
-
-
-[PBASE-F32-RFS-PublicApi-2216-001-GetDir_command04]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=DoesntExist2216
-
-
-[PBASE-F32-RFS-PublicApi-2216-001-GetDir_command05]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}DoesntExist2216\
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=NewDir2216
-
-
-[PBASE-F32-RFS-PublicApi-2216-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}DoesntExist2216\NewDir2216\
-
-
-[PBASE-F32-RFS-PublicApi-2216-001-RmDir_command07]
-dir			={Drives, RAMDriveTestPath}DoesntExist2216\
-
-
-[PBASE-F32-RFS-PublicApi-2217-001-MkDirAll_command03]
-dir			={Drives, RAMDriveTestPath}DoesntExist2217\NewDir2217
-
-
-[PBASE-F32-RFS-PublicApi-2217-001-GetDir_command04]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=DoesntExist2217
-
-
-[PBASE-F32-RFS-PublicApi-2217-001-GetDir_command05]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}DoesntExist2217\
-attmask			=KEntryAttMaskSupported
-isexist			=FALSE
-comparename		=NewDir2217
-
-
-[PBASE-F32-RFS-PublicApi-2217-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}DoesntExist2217\
-
-
-[PBASE-F32-RFS-PublicApi-2218-001-Delete_command03]
-name			={Drives, RAMDriveTestPath}delete?.txt
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}RmDir\
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}RmDir\file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-Create_command09]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}RmDir\file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-RmDir_command13]
-dir			={Drives, RAMDriveTestPath}RmDir\
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-GetDir_command14]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=TRUE
-comparename		=RmDir
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-Delete_command15]
-name			={Drives, RAMDriveTestPath}RmDir\file1.txt
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-Delete_command16]
-name			={Drives, RAMDriveTestPath}RmDir\file2.txt
-
-
-[PBASE-F32-RFS-PublicApi-2219-001-RmDir_command17]
-dir			={Drives, RAMDriveTestPath}RmDir\
-
-
-[PBASE-F32-RFS-PublicApi-2220-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}RmDir\
-
-
-[PBASE-F32-RFS-PublicApi-2220-001-RmDir_command04]
-dir			={Drives, RAMDriveTestPath}RmDir\None
-
-
-[PBASE-F32-RFS-PublicApi-2220-001-GetDir_command05]
-sortkey			=ESortByName
-name			={Drives, RAMDriveTestPath}
-attmask			=KEntryAttMaskSupported
-isexist			=FALSE
-comparename		=RmDir
-
-
-[PBASE-F32-RFS-PublicApi-2221-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2221-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=TestLongNameFile.txt
-
-
-[PBASE-F32-RFS-PublicApi-2221-001-GetShortName_command10]
-shortname		=TESTLO~1.TXT
-longname		=TestLongNameFile.txt
-
-
-[PBASE-F32-RFS-PublicApi-2221-001-Delete_command11]
-name			=TestLongNameFile.txt
-
-
-[PBASE-F32-RFS-PublicApi-2222-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2222-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=TestLongNameFile.txt
-
-
-[PBASE-F32-RFS-PublicApi-2222-001-GetLongName_command10]
-shortname		=TESTLO~1.TXT
-longname		=TestLongNameFile.txt
-
-
-[PBASE-F32-RFS-PublicApi-2222-001-Delete_command11]
-name			=TestLongNameFile.txt
-
-
-[PBASE-F32-RFS-PublicApi-2223-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2223-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileRead
-name			=test2223.txt
-
-
-[PBASE-F32-RFS-PublicApi-2223-001-IsFileOpen_command08]
-isopen			=TRUE
-file			=test2223.txt
-
-
-[PBASE-F32-RFS-PublicApi-2223-001-Delete_command13]
-name			=test2223.txt
-
-
-[PBASE-F32-RFS-PublicApi-2224-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2224-001-SetSessionPath_command04]
-path			=
-
-
-[PBASE-F32-RFS-PublicApi-2224-001-SessionPath_command05]
-comparepath		={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2225-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2225-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2225-001-SetAtt_command05]
-clearattmask		=KEntryAttReadOnly
-name			=TestDir
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2225-001-Att_command06]
-issetatt		=TRUE
-name			=TestDir
-setattmask		=KEntryAttDir
-
-
-[PBASE-F32-RFS-PublicApi-2225-001-RmDir_command07]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2226-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2226-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2226-001-SetEntry_command05]
-clearattmask		=KEntryAttReadOnly
-time			=20090101:
-name			=TestDir
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-2226-001-Entry_command06]
-isatthidden		=FALSE
-isattuid		=FALSE
-isattdir		=TRUE
-isattsystem		=FALSE
-isattreadonly		=FALSE
-isattarchive		=FALSE
-name			=TestDir
-
-
-[PBASE-F32-RFS-PublicApi-2226-001-Modified_command07]
-name			=TestDir
-time			=20090101:
-
-
-[PBASE-F32-RFS-PublicApi-2226-001-RmDir_command08]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2227-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2227-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2227-001-SetModified_command05]
-name			=TestDir
-time			=20990101:
-
-
-[PBASE-F32-RFS-PublicApi-2227-001-Modified_command06]
-name			=TestDir
-time			=20990101:
-
-
-[PBASE-F32-RFS-PublicApi-2227-001-RmDir_command07]
-dir			={Drives, RAMDriveTestPath}TestDir\
-
-
-[PBASE-F32-RFS-PublicApi-2228-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2228-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=test2228.txt
-
-
-[PBASE-F32-RFS-PublicApi-2228-001-Write_command07]
-datawrite		=Some_data_that_will_be_written_to_the_file.
-
-
-[PBASE-F32-RFS-PublicApi-2228-001-ReadFileSection_command11]
-length_buffer		=50
-length_read		=-1
-name			=test2228.txt
-offset			=0
-
-
-[PBASE-F32-RFS-PublicApi-2228-001-Delete_command12]
-name			=test2228.txt
-
-
-[PBASE-F32-RFS-PublicApi-2229-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2229-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=test2229.txt
-
-
-[PBASE-F32-RFS-PublicApi-2229-001-Write_command07]
-datawrite		=Some_data_that_will_be_written_to_the_file.
-
-
-[PBASE-F32-RFS-PublicApi-2229-001-ReadFileSection_command11]
-length_buffer		=10
-length_read		=10
-name			=test2229.txt
-offset			=10
-
-
-[PBASE-F32-RFS-PublicApi-2229-001-Delete_command12]
-name			=test2229.txt
-
-
-[PBASE-F32-RFS-PublicApi-2230-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2230-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=test2230.txt
-
-
-[PBASE-F32-RFS-PublicApi-2230-001-Write_command07]
-datawrite		=Some_data_that_will_be_written_to_the_file.
-
-
-[PBASE-F32-RFS-PublicApi-2230-001-ReadFileSection_command11]
-length_buffer		=5555
-length_read		=5555
-name			=test2230.txt
-offset			=0
-
-
-[PBASE-F32-RFS-PublicApi-2230-001-Delete_command12]
-name			=test2230.txt
-
-
-[PBASE-F32-RFS-PublicApi-2231-001-ReadFileSection_command03]
-length_buffer		=10
-length_read		=10
-name			={Drives, RAMDriveTestPath}
-offset			=0
-
-
-[PBASE-F32-RFS-PublicApi-2232-001-SetSessionPath_command03]
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-2232-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			=test2232.txt
-
-
-[PBASE-F32-RFS-PublicApi-2232-001-Write_command07]
-datawrite		=Some_data_that_will_be_written_to_the_file.
-
-
-[PBASE-F32-RFS-PublicApi-2232-001-ReadFileSection_command11]
-length_buffer		=10
-length_read		=0
-name			=test2232.txt
-offset			=0
-
-
-[PBASE-F32-RFS-PublicApi-2232-001-Delete_command12]
-name			=test2232.txt
-
-
-[PBASE-F32-RFS-PublicApi-2233-001-Delete_command03]
-name			={Drives, RAMDriveTestPath}delete*.txt
-
-
-[PBASE-F32-RFS-PublicApi-2234-001-Delete_command03]
-name			={Drives, RAMDriveTestPath}delete*?.txt
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Misc-PublicApi-ANY.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[RFs1]
-name			=RFs1
-
-
-[PBASE-F32-RFS-PublicApi-3011-001-SetNotifyUser_command03]
-notify			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3011-001-GetNotifyUser_command04]
-notify			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3011-001-SetNotifyUser_command05]
-notify			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-3011-001-GetNotifyUser_command06]
-notify			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-3014-001-LoaderHeapFunction_command03]
-functionId		=1
-
-
-[PBASE-F32-RFS-PublicApi-3101-001-Connect_command02]
-messageSlots		=0
-
-
-[PBASE-F32-RFS-PublicApi-3101-001-NotifyChange_command03]
-type			=ENotifyAll
-
-
-[PBASE-F32-RFS-PublicApi-3102-001-Connect_command02]
-messageSlots		=-12345
-
-
-[PBASE-F32-RFS-PublicApi-3111-001-NotifyChangeCancel_command03]
-all			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-3114-001-NotifyDiskSpace_command03]
-threshold		=1000
-drive			=-12345
-
-
-[PBASE-F32-RFS-PublicApi-3115-001-NotifyDiskSpaceCancel_command03]
-all			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-3121-001-IsRomAddress_command03]
-inRom			=false
-address			=0
-
-
-[PBASE-F32-RFS-PublicApi-3127-001-NotifyChange_command03]
-type			=ENotifyDir
-
-
-[PBASE-F32-RFS-PublicApi-3127-001-NotifyChangeCancel_command04]
-all			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3127-001-NotifyChangeCancel_command05]
-all			=FALSE
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Misc-PublicApi-RAM.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-[RFs1]
-name			=RFs1
-
-[RFile1]
-name			=RFile1
-
-
-[PBASE-F32-RFS-PublicApi-3003-001-NotifyChange_command03]
-type			=ENotifyDir
-
-
-[PBASE-F32-RFS-PublicApi-3003-001-MkDir_command04]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3003-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3004-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3004-001-NotifyChange_command04]
-type			=ENotifyDir
-path			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3004-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3005-001-NotifyChange_command03]
-type			=ENotifyDir
-
-
-[PBASE-F32-RFS-PublicApi-3005-001-NotifyChangeCancel_command04]
-all			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-3005-001-MkDir_command05]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3005-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3006-001-NotifyChange_command03]
-type			=ENotifyDir
-
-
-[PBASE-F32-RFS-PublicApi-3006-001-NotifyChangeCancel_command04]
-all			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3006-001-MkDir_command05]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3006-001-RmDir_command06]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3007-001-Volume_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-3007-001-NotifyDiskSpace_command04]
-use_free_space		=TRUE
-sub			=1000
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-3007-001-ReserveDriveSpace_command05]
-drive			={Drives, RAMDrive}
-bytes_to_reserve	=2000
-
-
-[PBASE-F32-RFS-PublicApi-3008-001-NotifyDiskSpace_command03]
-threshold		=3000
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-3008-001-NotifyDiskSpaceCancel_command04]
-all			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-3009-001-NotifyDiskSpace_command03]
-threshold		=99999
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-3009-001-NotifyDiskSpaceCancel_command04]
-all			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3013-001-SetNotifyChange_command03]
-notify			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3013-001-NotifyChange_command04]
-type			=ENotifyDir
-
-
-[PBASE-F32-RFS-PublicApi-3013-001-MkDir_command05]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3013-001-SetNotifyChange_command06]
-notify			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-3013-001-RmDir_command07]
-dir			={Drives, RAMDriveTestPath}fgfd\
-
-
-[PBASE-F32-RFS-PublicApi-3015-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}temp_dir\
-
-
-[PBASE-F32-RFS-PublicApi-3015-001-NotifyChange_command04]
-type			=ENotifyDir
-path			={Drives, RAMDrivePath}
-
-
-[PBASE-F32-RFS-PublicApi-3015-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}temp_dir\
-
-
-[PBASE-F32-RFS-PublicApi-3106-001-Create_command05]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test3106.txt
-
-
-[PBASE-F32-RFS-PublicApi-3106-001-NotifyChange_command09]
-type			=ENotifyAttributes
-
-
-[PBASE-F32-RFS-PublicApi-3106-001-SetEntry_command10]
-clearattmask		=KEntryAttNormal
-name			={Drives, RAMDriveTestPath}test3106.txt
-setattmask		=KEntryAttReadOnly
-
-
-[PBASE-F32-RFS-PublicApi-3106-001-SetEntry_command12]
-clearattmask		=KEntryAttReadOnly
-name			={Drives, RAMDriveTestPath}test3106.txt
-setattmask		=KEntryAttNormal
-
-
-[PBASE-F32-RFS-PublicApi-3106-001-Delete_command13]
-name			={Drives, RAMDriveTestPath}test3106.txt
-
-
-[PBASE-F32-RFS-PublicApi-3108-001-NotifyChange_command03]
-type			=ENotifyAll
-path			={Drives, RAMDriveTestPath}*
-
-
-[PBASE-F32-RFS-PublicApi-3110-001-NotifyChange_command03]
-type			=ENotifyEntry
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-3110-001-Create_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test.ttt
-
-
-[PBASE-F32-RFS-PublicApi-3110-001-NotifyChange_command09]
-type			=ENotifyWrite
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-3110-001-Write_command11]
-datawrite		=Some_data_that_will_be_written_to_the_file.
-
-
-[PBASE-F32-RFS-PublicApi-3110-001-NotifyChange_command16]
-type			=ENotifyFile
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-3110-001-Delete_command17]
-name			={Drives, RAMDriveTestPath}test.ttt
-
-
-[PBASE-F32-RFS-PublicApi-3112-001-NotifyDiskSpace_command03]
-threshold		=-12345
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-3113-001-NotifyDiskSpace_command03]
-threshold		=99999999999
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-3118-001-SetNotifyUser_command03]
-notify			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3118-001-GetNotifyUser_command04]
-notify			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3118-001-Create_command07]
-RFs			=RFs1
-file_mode		=EFileShareAny
-name			={Drives, RAMDriveTestPath}test18.txt
-
-
-[PBASE-F32-RFS-PublicApi-3118-001-Write_command08]
-datawrite		=Test MISC Phase2-3115-001
-
-
-[PBASE-F32-RFS-PublicApi-3118-001-Delete_command12]
-name			={Drives, RAMDriveTestPath}test18.txt
-
-
-[PBASE-F32-RFS-PublicApi-3123-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}temp_dir3123\
-
-
-[PBASE-F32-RFS-PublicApi-3123-001-NotifyChange_command04]
-type			=0
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-3123-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}temp_dir3123\
-
-
-[PBASE-F32-RFS-PublicApi-3124-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}temp_dir3124\
-
-
-[PBASE-F32-RFS-PublicApi-3124-001-NotifyChange_command04]
-type			=-1
-path			={Drives, RAMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-3124-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}temp_dir3124\
-
-
-[PBASE-F32-RFS-PublicApi-3125-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}temp_dir3125\
-
-
-[PBASE-F32-RFS-PublicApi-3125-001-NotifyChange_command04]
-type			=0
-
-
-[PBASE-F32-RFS-PublicApi-3125-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}temp_dir3125\
-
-
-[PBASE-F32-RFS-PublicApi-3126-001-MkDir_command03]
-dir			={Drives, RAMDriveTestPath}temp_dir3126\
-
-
-[PBASE-F32-RFS-PublicApi-3126-001-NotifyChange_command04]
-type			=-1
-
-
-[PBASE-F32-RFS-PublicApi-3126-001-RmDir_command05]
-dir			={Drives, RAMDriveTestPath}temp_dir3126\
-
-
-[PBASE-F32-RFS-PublicApi-3128-001-NotifyDiskSpace_command03]
-threshold		=99999
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-3128-001-NotifyDiskSpaceCancel_command04]
-all			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-3128-001-NotifyDiskSpaceCancel_command05]
-all			=FALSE
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Mounts-PublicApi-ANY.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-[RFs1]
-name			=RFs1
-
-
-[PBASE-F32-RFS-PublicApi-0001-001-AddFileSystem_command03]
-file_name		=T_TESTFSY1
-
-
-[PBASE-F32-RFS-PublicApi-0001-001-RemoveFileSystem_command04]
-file_system_name	=TestFileSystem1
-
-
-[PBASE-F32-RFS-PublicApi-0003-001-AddExtension_command03]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0003-001-RemoveExtension_command04]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0012-001-SetStartupConfiguration_command03]
-command_num		=ELoaderPriority
-
-
-[PBASE-F32-RFS-PublicApi-0013-001-SetStartupConfiguration_command03]
-command_num		=EMaxStartupConfigurationCmd
-
-
-[PBASE-F32-RFS-PublicApi-0016-001-SetLocalDriveMapping_command03]
-drive_mapping_element_0	=EDriveA
-drive_mapping_element_1	=EDriveB
-drive_mapping_operation	=EWriteMappingsNoSet
-drive_mapping_size	=2
-
-
-[PBASE-F32-RFS-PublicApi-0020-001-AddFileSystem_command03]
-file_name		=BadFileSystem
-
-
-[PBASE-F32-RFS-PublicApi-0021-001-AddFileSystem_command03]
-file_name		={Drives, MountFileSystemFile}
-
-
-[PBASE-F32-RFS-PublicApi-0022-001-RemoveFileSystem_command03]
-file_system_name	=BadTestFileSystemName
-
-
-[PBASE-F32-RFS-PublicApi-0024-001-MountFileSystem_command03]
-file_system_name	={Drives, MountFileSystemName}
-drive			=-11
-
-
-[PBASE-F32-RFS-PublicApi-0027-001-MountFileSystem_command03]
-file_system_name	={Drives, MountFileSystemName}
-drive			=-11
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0030-001-MountFileSystem_command03]
-file_system_name	={Drives, MountFileSystemName}
-drive			=-11
-is_sync			=false
-
-
-[PBASE-F32-RFS-PublicApi-0033-001-MountFileSystemAndScan_command03]
-file_system_name	=Fat
-drive			=-11
-is_mount_success	=false
-
-
-[PBASE-F32-RFS-PublicApi-0039-001-DismountFileSystem_command03]
-file_system_name	={Drives, MountFileSystemName}
-drive			=-11
-
-
-[PBASE-F32-RFS-PublicApi-0042-001-FileSystemName_command03]
-drive			=-11
-
-
-[PBASE-F32-RFS-PublicApi-0044-001-AddExtension_command03]
-file_name		=BadExtension
-
-
-[PBASE-F32-RFS-PublicApi-0045-001-AddExtension_command03]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0045-001-AddExtension_command04]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0045-001-RemoveExtension_command05]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0047-001-AddExtension_command03]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0047-001-MountExtension_command04]
-drive			=-11
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0047-001-RemoveExtension_command05]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0051-001-AddExtension_command03]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0051-001-DismountExtension_command04]
-drive			=-11
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0051-001-RemoveExtension_command05]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0053-001-RemoveExtension_command03]
-extension_name		=BadFileSystemExtension
-
-
-[PBASE-F32-RFS-PublicApi-0055-001-ExtensionName_command03]
-drive			=-1
-position		=0
-
-
-[PBASE-F32-RFS-PublicApi-0056-001-RemountDrive_command03]
-flags			=1
-drive			=-1
-
-
-[PBASE-F32-RFS-PublicApi-0058-001-NotifyDismount_command03]
-drive			=-66
-mode			=EFsDismountForceDismount
-
-
-[PBASE-F32-RFS-PublicApi-0062-001-AllowDismount_command03]
-drive			=-11
-
-
-[PBASE-F32-RFS-PublicApi-0073-001-FileSystemSubType_command03]
-drive			=-1
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-Mounts-PublicApi-RAM.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,707 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-
-[RFs1]
-name			=RFs1
-
-
-[RFs2]
-name			=RFs2
-
-
-[PBASE-F32-RFS-PublicApi-0002-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0002-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0002-001-MountFileSystem_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0002-001-DismountFileSystem_command06]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0002-001-MountFileSystem_command07]
-drive			={Drives, RAMDrive}
-is_sync			=false
-
-
-[PBASE-F32-RFS-PublicApi-0002-001-DismountFileSystem_command08]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0002-001-MountFileSystem_command09]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-AddExtension_command05]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-DismountFileSystem_command07]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-MountFileSystem_command08]
-extension_name		={Drives, MountExtensionName}
-drive			={Drives, RAMDrive}
-is_sync			=false
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-DismountFileSystem_command09]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-MountFileSystem_command10]
-extension_name		={Drives, MountExtensionName}
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-DismountFileSystem_command11]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-RemoveExtension_command12]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0004-001-MountFileSystem_command13]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0005-001-AddExtension_command03]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0005-001-MountExtension_command04]
-drive			={Drives, RAMDrive}
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0005-001-DismountExtension_command05]
-drive			={Drives, RAMDrive}
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0005-001-RemoveExtension_command06]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-AddExtension_command05]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-MountFileSystemAndScan_command06]
-drive			={Drives, RAMDrive}
-is_mount_success	=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-DismountFileSystem_command07]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-MountFileSystemAndScan_command08]
-drive			={Drives, RAMDrive}
-is_mount_success	=TRUE
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-DismountFileSystem_command09]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-RemoveExtension_command10]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0006-001-MountFileSystem_command11]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0008-001-AddExtension_command03]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0008-001-MountExtension_command04]
-drive			={Drives, RAMDrive}
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0008-001-ExtensionName_command05]
-extension_name		={Drives, MountExtensionName}
-drive			={Drives, RAMDrive}
-position		=0
-
-
-[PBASE-F32-RFS-PublicApi-0008-001-DismountExtension_command06]
-drive			={Drives, RAMDrive}
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0008-001-RemoveExtension_command07]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0009-001-RemountDrive_command03]
-flags			=0
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0010-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0010-001-NotifyDismount_command07]
-drive			={Drives, RAMDrive}
-mode			=EFsDismountRegisterClient
-
-
-[PBASE-F32-RFS-PublicApi-0010-001-NotifyDismount_command09]
-drive			={Drives, RAMDrive}
-mode			=EFsDismountNotifyClients
-
-
-[PBASE-F32-RFS-PublicApi-0010-001-AllowDismount_command12]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0010-001-MountFileSystem_command17]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0011-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0011-001-NotifyDismount_command04]
-drive			={Drives, RAMDrive}
-mode			=EFsDismountRegisterClient
-
-
-[PBASE-F32-RFS-PublicApi-0011-001-NotifyDismountCancel_command05]
-all			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-0011-001-NotifyDismount_command07]
-drive			={Drives, RAMDrive}
-mode			=EFsDismountNotifyClients
-
-
-[PBASE-F32-RFS-PublicApi-0011-001-MountFileSystem_command09]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0014-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0014-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0014-001-AddCompositeMount_command05]
-is_sync			=FALSE
-composite_drive		={Drives, RAMDrive}
-file_system_name	={Drives, MountFileSystemName}
-local_drive		={Drives, SystemDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0014-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0017-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0017-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0017-001-MountFileSystem_command05]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0017-001-SwapFileSystem_command06]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0018-001-NotifyDismount_command03]
-drive			={Drives, RAMDrive}
-mode			=EFsDismountRegisterClient
-
-
-[PBASE-F32-RFS-PublicApi-0018-001-NotifyDismount_command04]
-drive			={Drives, RAMDrive}
-mode			=EFsDismountNotifyClients
-
-
-[PBASE-F32-RFS-PublicApi-0018-001-NotifyDismountCancel_command05]
-all			=TRUE
-
-
-[PBASE-F32-RFS-PublicApi-0025-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0025-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0025-001-MountFileSystem_command05]
-file_system_name	=BadFileSystem
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0025-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0026-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0026-001-MountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0028-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0028-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0028-001-MountFileSystem_command05]
-file_system_name	=BadFileSystem
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0028-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0029-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0029-001-MountFileSystem_command04]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0031-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0031-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0031-001-MountFileSystem_command05]
-file_system_name	=BadFileSystem
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0031-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0032-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0032-001-MountFileSystem_command04]
-drive			={Drives, RAMDrive}
-is_sync			=false
-
-
-[PBASE-F32-RFS-PublicApi-0034-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0034-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0034-001-MountFileSystemAndScan_command05]
-file_system_name	=BadFileSystemName
-drive			={Drives, RAMDrive}
-is_mount_success	=false
-
-
-[PBASE-F32-RFS-PublicApi-0034-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0035-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0035-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0035-001-MountFileSystemAndScan_command05]
-drive			={Drives, RAMDrive}
-is_mount_success	=true
-
-
-[PBASE-F32-RFS-PublicApi-0036-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0036-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0036-001-MountFileSystemAndScan_command05]
-file_system_name	=Fat
-drive			={Drives, RAMDrive}
-is_mount_success	=false
-extension_name		=BadExtension
-
-
-[PBASE-F32-RFS-PublicApi-0036-001-DismountFileSystem_command06]
-file_system_name	=Fat
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0036-001-MountFileSystem_command07]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0037-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0037-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0037-001-MountFileSystem_command05]
-extension_name		=BadExtension
-file_system_name	={Drives, MountFileSystemName}
-drive			={Drives, RAMDrive}
-is_sync			=false
-
-
-[PBASE-F32-RFS-PublicApi-0037-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0038-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0038-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0038-001-MountFileSystem_command05]
-extension_name		=BadExtension
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0038-001-DismountFileSystem_command06]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0038-001-MountFileSystem_command07]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0040-001-DismountFileSystem_command03]
-file_system_name	=BadFileSystemName
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0041-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0041-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0041-001-DismountFileSystem_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0041-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0043-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0043-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0043-001-FileSystemName_command05]
-drive			={Drives, RAMDrive}
-save_in_instance	=false
-
-
-[PBASE-F32-RFS-PublicApi-0043-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0046-001-AddExtension_command03]
-file_name		={Drives, MountExtensionFileName}
-
-
-[PBASE-F32-RFS-PublicApi-0046-001-MountExtension_command04]
-drive			={Drives, RAMDrive}
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0046-001-DismountExtension_command05]
-drive			={Drives, RAMDrive}
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0046-001-RemoveExtension_command06]
-extension_name		={Drives, MountExtensionName}
-
-
-[PBASE-F32-RFS-PublicApi-0048-001-MountExtension_command03]
-drive			={Drives, RAMDrive}
-extension_name		=BadFileSystemExtension
-
-
-[PBASE-F32-RFS-PublicApi-0050-001-DismountExtension_command03]
-drive			={Drives, RAMDrive}
-extension_name		=BadExtensionName
-
-
-[PBASE-F32-RFS-PublicApi-0054-001-ExtensionName_command03]
-drive			={Drives, RAMDrive}
-position		=9999
-
-
-[PBASE-F32-RFS-PublicApi-0059-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0059-001-NotifyDismount_command04]
-drive			={Drives, RAMDrive}
-mode			=EFsDismountForceDismount
-
-
-[PBASE-F32-RFS-PublicApi-0059-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0060-001-AllowDismount_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0063-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0063-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0063-001-AddCompositeMount_command05]
-is_sync			=false
-composite_drive		={Drives, RAMDrive}
-file_system_name	=SomeBadFileSystemName
-local_drive		={Drives, SystemDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0063-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0064-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0064-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0064-001-AddCompositeMount_command05]
-is_sync			=true
-composite_drive		={Drives, RAMDrive}
-file_system_name	=SomeBadFileSystemName
-local_drive		={Drives, SystemDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0064-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0065-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0065-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0065-001-AddCompositeMount_command05]
-is_sync			=false
-composite_drive		={Drives, RAMDrive}
-file_system_name	=FAT
-local_drive		=-33
-
-
-[PBASE-F32-RFS-PublicApi-0065-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0066-001-AddCompositeMount_command03]
-is_sync			=false
-composite_drive		=-33
-file_system_name	=FAT
-local_drive		={Drives, SystemDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0067-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0067-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0067-001-AddCompositeMount_command05]
-is_sync			=true
-composite_drive		={Drives, RAMDrive}
-file_system_name	=FAT
-local_drive		=-33
-
-
-[PBASE-F32-RFS-PublicApi-0067-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0068-001-AddCompositeMount_command03]
-is_sync			=true
-composite_drive		=-33
-file_system_name	=FAT
-local_drive		={Drives, SystemDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0069-001-SwapFileSystem_command03]
-file_system_name	=BadFileSystem
-drive			={Drives, RAMDrive}
-new_file_system_name	=FAT
-
-
-[PBASE-F32-RFS-PublicApi-0070-001-SwapFileSystem_command03]
-file_system_name	=FAT
-drive			={Drives, RAMDrive}
-new_file_system_name	=BadFileSystem
-
-
-[PBASE-F32-RFS-PublicApi-0072-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0072-001-NotifyDismount_command04]
-drive			={Drives, RAMDrive}
-mode			=EFsDismountRegisterClient
-
-
-[PBASE-F32-RFS-PublicApi-0072-001-NotifyDismountCancel_command05]
-all			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-0072-001-NotifyDismountCancel_command06]
-all			=FALSE
-
-
-[PBASE-F32-RFS-PublicApi-0074-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0074-001-DismountFileSystem_command04]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0074-001-FileSystemSubType_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0074-001-MountFileSystem_command06]
-drive			={Drives, RAMDrive}
-is_sync			=true
-
-
-[PBASE-F32-RFS-PublicApi-0075-001-FileSystemName_command03]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0075-001-NotifyChange_command04]
-type			=ENotifyAll
-
-
-[PBASE-F32-RFS-PublicApi-0075-001-DismountFileSystem_command05]
-drive			={Drives, RAMDrive}
-
-
-[PBASE-F32-RFS-PublicApi-0075-001-NotifyChange_command07]
-type			=ENotifyAll
-
-
-[PBASE-F32-RFS-PublicApi-0075-001-MountFileSystem_command08]
-drive			={Drives, RAMDrive}
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-PublicApi-OS.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-[RFile1]
-name			=RFile1
-
-[RFs1]
-name			=RFs1
-
-[PBASE-F32-RFS-PublicApi-1036-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, SystemDrive}
-store			=FALSE
-drive_new_password	=test
-
-
-[PBASE-F32-RFS-PublicApi-1061-001-ScanDrive_command03]
-drive_path		={Drives, SystemDrivePath}
-
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_command03]
-drive			={Drives, SystemDrive}
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_0]
-drive			=EDriveA
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_1]
-drive			=EDriveB
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_2]
-drive			=EDriveC
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_3]
-drive			=EDriveD
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_4]
-drive			=EDriveE
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_5]
-drive			=EDriveF
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_6]
-drive			=EDriveG
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_7]
-drive			=EDriveH
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_8]
-drive			=EDriveI
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_9]
-drive			=EDriveJ
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_10]
-drive			=EDriveK
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_11]
-drive			=EDriveL
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_12]
-drive			=EDriveM
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_13]
-drive			=EDriveN
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_14]
-drive			=EDriveO
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_15]
-drive			=EDriveP
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_16]
-drive			=EDriveQ
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_17]
-drive			=EDriveR
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_18]
-drive			=EDriveS
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_19]
-drive			=EDriveT
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_20]
-drive			=EDriveU
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_21]
-drive			=EDriveV
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_22]
-drive			=EDriveW
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_23]
-drive			=EDriveX
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_24]
-drive			=EDriveY
-
-[PBASE-F32-RFS-PublicApi-1088-001-SetSystemDrive_25]
-drive			=EDriveZ
-
-[PBASE-F32-RFS-PublicApi-3010-001-Open_command06]
-RFs			=RFs1
-file_mode		=EFileShareAny
-file			={Drives, SystemDriveTestPath}test.txt
-
-
-[PBASE-F32-RFS-PublicApi-3010-001-ResourceCount_command08]
-resources=1
-
-
-[PBASE-F32-RFS-PublicApi-3122-001-Open_command06]
-RFs			=RFs1
-file_mode		=EFileRead
-file			={Drives, SystemDriveTestPath}test.txt
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RFS-PublicApi-ROM.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-[include]
-file1			=\base\base_f32_env.ini
-
-[RFs1]
-name			=RFs1
-
-[PBASE-F32-RFS-PublicApi-0019-001-FileSystemSubType_command03]
-sub_type_name		={Drives, ROMDriveFileSystemName}
-drive			={Drives, ROMDrive}
-
-[PBASE-F32-RFS-PublicApi-0007-001-FileSystemName_command03]
-file_system_name	={Drives, ROMDriveFileSystemName}
-drive			={Drives, ROMDrive}
-
-[PBASE-F32-RFS-PublicApi-3012-001-IsFileInRom_command03]
-file			={Drives, ROMDriveChar}:\base\t_sfsrv\test_rom.txt
-
-[PBASE-F32-RFS-PublicApi-3016-001-InitialisePropertiesFile_command03]
-file			={Drives, ROMDriveChar}:\base\t_sfsrv\test_rom.txt
-
-[PBASE-F32-RFS-PublicApi-3012-001-IsRomAddress_command04]
-inRom			=TRUE
-
-[PBASE-F32-RFS-PublicApi-1040-001-LockDrive_command03]
-drive_old_password	=
-drive			={Drives, ROMDrive}
-store			=FALSE
-drive_new_password	=test
-
-[PBASE-F32-RFS-PublicApi-1077-001-UnlockDrive_command03]
-drive_old_password	=test
-drive			={Drives, ROMDrive}
-store			=FALSE
-
-[PBASE-F32-RFS-PublicApi-1006-001-IsValidDrive_command02]
-drive			={Drives, ROMDrive}
-drive_is_valid		=TRUE
-
-[PBASE-F32-RFS-PublicApi-1060-001-Subst_command03]
-drive			={Drives, ROMDrive}
-subst_path		=
-
-[PBASE-F32-RFS-PublicApi-1090-001-SetSubst_command03]
-drive			={Drives, DriveForSubst}
-subst_path		={Drives, ROMDriveTestPath}
-
-
-[PBASE-F32-RFS-PublicApi-1090-001-SetSubst_command04]
-drive			={Drives, DriveForSubst}
-subst_path		=
-
-[PBASE-F32-RFS-PublicApi-1071-001-ClearPassword_command03]
-drive_old_password	=test
-drive			={Drives, ROMDrive}
-
-[PBASE-F32-RFS-PublicApi-1042-001-ReserveDriveSpace_command03]
-drive			={Drives, ROMDrive}
-bytes_to_reserve	=100
-
-[PBASE-F32-RFS-PublicApi-1066-001-ErasePassword_command03]
-drive			={Drives, ROMDrive}
-
-[PBASE-F32-RFS-PublicApi-1016-001-Drive_command03]
-media_type		=EMediaRom
-drive			={Drives, ROMDrive}
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-RawDisk-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-[include]
-file1					=\base\base_f32_env.ini
-
-[rawdisk1]
-name=rawdisk1
-
-
-[rfs1]
-name=rfs1
-
-
-[format1]
-name=format1
-
-
-[file]
-name=file
-
-
-[PBASE-F32-RawDisk-PublicApi-0001-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-0002-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-0002-001-Write_command06]
-position=1024
-data=Hello big world!
-
-
-[PBASE-F32-RawDisk-PublicApi-0002-001-Read_command07]
-position=1024
-data=Hello big world!
-
-
-[PBASE-F32-RawDisk-PublicApi-0003-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-0003-001-Write_command06]
-position=1024
-data=
-
-
-[PBASE-F32-RawDisk-PublicApi-0003-001-Read_command07]
-position=1024
-data=
-
-
-[PBASE-F32-RawDisk-PublicApi-1003-001-Open_command05]
-object_name=rfs1
-drive=-1
-
-
-[PBASE-F32-RawDisk-PublicApi-1007-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-1007-001-Create_command07]
-RFs=rfs1
-file_mode=EFileShareAny
-name={Drives, RemovableDrivePath}test03.txt
-
-
-[PBASE-F32-RawDisk-PublicApi-1008-001-Open_command05]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-RawDisk-PublicApi-1008-001-Open_command07]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-1009-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-1009-001-Open_command09]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-RawDisk-PublicApi-1010-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-1010-001-Write_command06]
-position=-1
-data=Hello World!
-
-
-[PBASE-F32-RawDisk-PublicApi-1010-001-Open_command10]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-RawDisk-PublicApi-1011-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-1011-001-Write_command06]
-position=10000000000000
-data=Hello World!
-
-
-[PBASE-F32-RawDisk-PublicApi-1011-001-Open_command10]
-RFs=rfs1
-drive={Drives, RemovableDriveChar}:
-format=EHighDensity
-
-
-[PBASE-F32-RawDisk-PublicApi-1012-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-1012-001-Read_command06]
-position=-1
-data=Hello World!
-
-
-[PBASE-F32-RawDisk-PublicApi-1013-001-Open_command05]
-object_name=rfs1
-drive={Drives, RemovableDrive}
-
-
-[PBASE-F32-RawDisk-PublicApi-1013-001-Read_command06]
-position=10000000000000
-data=Hello World!
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/PBASE-F32-VolumeInfo-PublicApi.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-
-
-[TVolumeInfo1]
-name=TVolumeInfo1
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/Test1.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/Test2.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/Test3.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
\ No newline at end of file
Binary file baseapitest/basesvs/validation/f32/sfsrv/testdata/USBLOAD.ZIP has changed
Binary file baseapitest/basesvs/validation/f32/sfsrv/testdata/any.txt has changed
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/big.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5964 +0,0 @@
-333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-v
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-v
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-v
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-v
-//! @file
-//! @SYMTestSuiteName		pbase-f32-sfsrv-publicapi-os
-//! @SYMScriptTestEnvironment	This test script requires a basic ROM.
-//! @SYMScriptAuthor 		Jaanus Randveer
-//! @SYMScriptCreationDate		18/19/2007
-//! @SYMScriptDescription		The test script contains API tests for the following functions of CFileMan class:
-//!	TInt BytesTransferredByCopyStep()
-
-
-LOAD_SUITE	T_SfSrv
-
-START_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-//! @SYMTestCaseID		PBASE-F32-FileMan-PublicApi-2165
-//! @SYMAPI			CFileBase
-//! @SYMTestCaseDesc		Function  BytesTransferredByCopyStep() test.
-//!											Check that function BytesTransferredByCopyStep() was called more that one time during Copy processs.
-//! 				Uses API elements: NewL(), Copy(), Delete();
-//! @SYMTestActions		1.Create a RFs session and call it's Connect() function.
-//!				2.Call CFileMan::NewL(RFs &aFs) and connected file server session as parameter.
-//!				3.Call CFileMan::Copy(const TDesC &anOld, const TDesC &aNew, TUint aSwitch=EOverWrite),
-//!				  and {TestPath}fileman\1mb as first parameter, 
-//!				  and {TestPath}fileman\Copy\ as second parameter,
-//!					and aSwitch = 0.
-//!				4.Check that in history for NotifyFileManOperation no record with total size of file.
-//!				5.Check that in history for NotifyFileManOperation total size of transfered bytes equals to to size of transfered file.
-//!				6.Call CFileMan::Delete(const TDesC &aName, TUint aSwitch=0), 
-//!				  and {TestPath}fileman\Copy\* as parameter.
-//! @SYMTestStatus		Implemented
-//! @SYMTestPriority		Critical
-//! @SYMTestExpectedResults Second and third copy calls return KErrAlreadyExists.
-//! @SYMTestType		CIT
-	START_TEST_BLOCK	50	T_SfSrv	\base\PBASE-F32-FileMan-PublicApi.ini 
-		CREATE_OBJECT	RFs				RFs1
-		CREATE_OBJECT	CFileMan	CFileMan1
-		COMMAND		RFs1			new
-		COMMAND		RFs1			Connect
-		COMMAND		RFs1			MkDirAll		PBASE-F32-FileMan-PublicApi-2165-001-MkDirAll_command001
-		COMMAND		CFileMan1	NewL				PBASE-F32-FileMan-PublicApi-NewL
-		COMMAND		CFileMan1	SetObserver
-		COMMAND		CFileMan1	Copy				PBASE-F32-FileMan-PublicApi-2165-001-Copy_command002
-		COMMAND		CFileMan1	BytesTransferredByCopyStep				PBASE-F32-FileMan-PublicApi-2165-001-BytesTransferredByCopyStep_command003
-		COMMAND		CFileMan1	Delete			PBASE-F32-FileMan-PublicApi-2165-001-Delete_command004
-		COMMAND		CFileMan1	RmDir				PBASE-F32-FileMan-PublicApi-2165-001-RmDir_command005
-		COMMAND		CFileMan1	~
-		COMMAND		RFs1			~		
-	END_TEST_BLOCK	
-END_TESTCASE			PBASE-F32-FileMan-PublicApi-2165
-
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/big_line.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-This is reaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaly big striiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiing.
\ No newline at end of file
Binary file baseapitest/basesvs/validation/f32/sfsrv/testdata/filetext_eof.txt has changed
Binary file baseapitest/basesvs/validation/f32/sfsrv/testdata/filetext_read.txt has changed
Binary file baseapitest/basesvs/validation/f32/sfsrv/testdata/multiline.txt has changed
Binary file baseapitest/basesvs/validation/f32/sfsrv/testdata/new_file.txt has changed
Binary file baseapitest/basesvs/validation/f32/sfsrv/testdata/oneliner.txt has changed
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/test.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-Class RFs
-class RFs : public RSessionBase;
-Description
-A handle to a file server session.
-
-A program or thread may have arbitrarily many sessions open simultaneously.
-
-Use this class for all file system manipulation, including:
-
-1. adding, removing, moving and renaming files and directories
-
-2. inspecting and changing file attributes and directory entry details. These include the time and date when the file or directory was last written to, its size and various attribute flags such as read-only, hidden, archive or system.
-
-3. finding a file?s real name; if the file system on which it is stored has to "mangle" the name into a shorter format
-
-4. getting directory listings
-
-5. maintaining a default path; unlike some other systems, there is a single system default path, rather than one for each drive: the default path consists of a drive and a path specification.
-
-6. performing context-sensitive parses using TParse objects, and the session path
-
-7. obtaining information on drives and volumes
-
-8. formatting and labelling volumes
-
-9. obtaining a list of valid drives
-
-10. emulating the DOS subst command, which allows any directory to appear as if it were a separate drive
-
-11. requesting notification of when significant change occurs. This can be used for programs which maintain file lists, but must update those lists when change occurs.
-
-12. finding the version number of the file server
-
-13. resource counting to ensure that all resources are closed when the session terminates.
-
-This class is not intended for user derivation.
-
-The following restrictions apply when a path is specified:
-
-1. its total length must not exceed 256 characters
-
-2. wildcards cannot be used in the drive or in any directory name, although they may be allowed in the filename and extension.
-
-3. double backslashes are not allowed in the path.
-
-4. the following characters must not be included anywhere in the path: < > " / |
-
-5. a colon may only be included between the drive and path
-
-6. no directory name or filename plus extension may consist solely of space characters, or of a single or double dot.
-
-7. spaces between the drive, if specified, and the first directory in the path are illegal, although there may be spaces between other path components, for instance between directories. 
-
--- a/baseapitest/basesvs/validation/f32/sfsrv/testdata/test_rom.txt	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-Class RFs
-class RFs : public RSessionBase;
-Description
-A handle to a file server session.
-
-A program or thread may have arbitrarily many sessions open simultaneously.
-
-Use this class for all file system manipulation, including:
-
-1. adding, removing, moving and renaming files and directories
-
-2. inspecting and changing file attributes and directory entry details. These include the time and date when the file or directory was last written to, its size and various attribute flags such as read-only, hidden, archive or system.
-
-3. finding a file?s real name; if the file system on which it is stored has to "mangle" the name into a shorter format
-
-4. getting directory listings
-
-5. maintaining a default path; unlike some other systems, there is a single system default path, rather than one for each drive: the default path consists of a drive and a path specification.
-
-6. performing context-sensitive parses using TParse objects, and the session path
-
-7. obtaining information on drives and volumes
-
-8. formatting and labelling volumes
-
-9. obtaining a list of valid drives
-
-10. emulating the DOS subst command, which allows any directory to appear as if it were a separate drive
-
-11. requesting notification of when significant change occurs. This can be used for programs which maintain file lists, but must update those lists when change occurs.
-
-12. finding the version number of the file server
-
-13. resource counting to ensure that all resources are closed when the session terminates.
-
-This class is not intended for user derivation.
-
-The following restrictions apply when a path is specified:
-
-1. its total length must not exceed 256 characters
-
-2. wildcards cannot be used in the drive or in any directory name, although they may be allowed in the filename and extension.
-
-3. double backslashes are not allowed in the path.
-
-4. the following characters must not be included anywhere in the path: < > " / |
-
-5. a colon may only be included between the drive and path
-
-6. no directory name or filename plus extension may consist solely of space characters, or of a single or double dot.
-
-7. spaces between the drive, if specified, and the first directory in the path are illegal, although there may be spaces between other path components, for instance between directories. 
-
--- a/baseapitest/basesvs/validation/f32/testdata/armv5/base_f32_env.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-[Drives]
-
-
-
-# Defines the character of the not mounted drive, the default value is 'n'.
-NotMountedDriveChar = N
-
-
-# Default writable drive. This drive is used for creating temporary test files on it.
-# This must be a numeric index of the drive. The default value is 2.
-SystemDriveIndex = 2
-
-# Defines the character of the drive, the default value is 'C'.
-SystemDriveChar = C
-
-# Defines the drive's index.
-SystemDrive = EDrive{Drives, SystemDriveChar}
-
-# Defines path to default drive.
-SystemDrivePath = {Drives, SystemDriveChar}:\
-
-# Defines path to a directory on a default drive that can be used for keeping test files.
-SystemDriveTestPath = {Drives, SystemDriveChar}:\base\t_sfsrv\
-
-
-# A RAM drive in the environment. 
-# Defines the character of the drive, the default value is 'E'.
-RAMDriveChar = E
-
-# Defines the drive's index.
-RAMDrive = EDrive{Drives, RAMDriveChar}
-
-# Defines path to RAM drive.
-RAMDrivePath = {Drives, RAMDriveChar}:\
-
-# Defines path to a directory on a RAM drive that can be used for keeping test files.
-RAMDriveTestPath = {Drives, RAMDriveChar}:\base\t_sfsrv\
-
-# Defines the relative path to a directory on a RAM drive that can be used for keeping test files, default value is '\'. The directory must exist! The path must correspond to the path defined in the previous variable
-RAMDriveTestPathRelative = \base\t_sfsrv\
-
-# Defines RAM drive's media type (a value of TMediaType). Default value is 'EMediaFlash'. 
-RAMDriveMediaType = EMediaHardDisk
-
-
-# A ROM drive in the environment. 
-# Defines the character of the drive, the default value is 'Z'.
-ROMDriveChar = Z
-
-# Defines the drive's index.
-ROMDrive = EDrive{Drives, ROMDriveChar}
-
-
-ROMDriveTestPath = {Drives, ROMDriveChar}:\base\t_sfsrv\
-
-# This must be a numeric index of the drive. The default value is 25.
-ROMDriveIndex = 25
-
-# Defines the a file system name that resides on a ROM drive. The default value is 'Rom'. 
-ROMDriveFileSystemName = Rom
-
-# Defines the a file system sub type that resides on a ROM drive. The default value is 'FAT16'. 
-ROMDriveFileSystemSubType = Rom
-
-
-# A MultiMediaCard drive in the environment. A file system must be already mounted onto the drive prior to running the test suite.
-# Defines the character of the drive, the default value is 'E'.
-RemovableDriveChar = E
-
-# Defines the drive's index.
-RemovableDrive = EDrive{Drives, RemovableDriveChar}
-
-# Defines the path of the MMC drive.
-RemovableDrivePath = {Drives, RemovableDriveChar}:\
-
-RemovableDriveTestPath = {Drives, RemovableDriveChar}:\base\t_sfsrv\
-
-# A drive that could serve as a drive for substitution (using subst operation).
-# Defines the drive's index, the default value is 'EDriveG'.
-DriveForSubst = EDriveG
-
-
-# Mount file system file name, the default value is 'ELffs'.
-MountFileSystemFile = ELffs
-
-
-# Mount file system name, the default value is 'Lffs'.
-MountFileSystemName = Lffs
-
-
-# Mount system extension file name
-MountExtensionFileName = T_TestFXT
-
-
-# Mount system extension file name
-MountExtensionName = TestFileExtension
-
-
-# Bad drive index (out of range). Default value is 28.
-BadDriveIndex = 28
--- a/baseapitest/basesvs/validation/f32/testdata/armv5/dual_drive_env.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-[Drives]
-
-# Dual Drives configured out of same interface
-# Example, on H4 multimedia card drive F:/ is one of the drive for the interface
-DriveChar1 = F
-
-# Defines the drive's index.
-Drive1 = EDrive{Drives, DriveChar1}
-
-# Defines the path of the MMC drive.
-DrivePath1 = {Drives, DriveChar1}:\
-
-DriveTestPath1 = {Drives, DriveChar1}:\base\t_sfsrv\
-
-# Dual Drives configured out of same interface
-# Example, on H4 multimedia card drive E:/ is one of the drive for the interface
-DriveChar2 = E
-
-# Defines the drive's index.
-Drive2 = EDrive{Drives, DriveChar2}
-
-# Defines the path of the MMC drive.
-DrivePath2 = {Drives, DriveChar2}:\
-
-DriveTestPath2 = {Drives, DriveChar2}:\base\t_sfsrv\
-
-
-# A ROM drive in the environment. 
-# Defines the character of the drive, the default value is 'Z'.
-ROMDriveChar = Z
-
-# Defines the drive's index.
-ROMDrive = EDrive{Drives, ROMDriveChar}
-
-
-ROMDriveTestPath = {Drives, ROMDriveChar}:\base\t_sfsrv\
-
-# This must be a numeric index of the drive. The default value is 25.
-ROMDriveIndex = 25
-
-# Default writable drive. This drive is used for creating temporary test files on it.
-# This must be a numeric index of the drive. The default value is 2.
-SystemDriveIndex = 2
-
-# Defines the character of the drive, the default value is 'C'.
-SystemDriveChar = C
-
-# Defines the drive's index.
-SystemDrive = EDrive{Drives, SystemDriveChar}
-
-# Defines path to default drive.
-SystemDrivePath = {Drives, SystemDriveChar}:\
-
-# Defines path to a directory on a default drive that can be used for keeping test files.
-SystemDriveTestPath = {Drives, SystemDriveChar}:\base\t_sfsrv\
-
--- a/baseapitest/basesvs/validation/f32/testdata/gcce/base_f32_env.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-[Drives]
-
-
-# Defines the character of the not mounted drive, the default value is 'n'.
-NotMountedDriveChar = N
-
-
-# Default writable drive. This drive is used for creating temporary test files on it.
-# This must be a numeric index of the drive. The default value is 2.
-SystemDriveIndex = 2
-
-# Defines the character of the drive, the default value is 'C'.
-SystemDriveChar = C
-
-# Defines the drive's index.
-SystemDrive = EDrive{Drives, SystemDriveChar}
-
-# Defines path to default drive.
-SystemDrivePath = {Drives, SystemDriveChar}:\
-
-# Defines path to a directory on a default drive that can be used for keeping test files.
-SystemDriveTestPath = {Drives, SystemDriveChar}:\base\t_sfsrv\
-
-
-# A RAM drive in the environment. 
-# Defines the character of the drive, the default value is 'E'.
-RAMDriveChar = E
-
-# Defines the drive's index.
-RAMDrive = EDrive{Drives, RAMDriveChar}
-
-# Defines path to RAM drive.
-RAMDrivePath = {Drives, RAMDriveChar}:\
-
-# Defines path to a directory on a RAM drive that can be used for keeping test files.
-RAMDriveTestPath = {Drives, RAMDriveChar}:\base\t_sfsrv\
-
-# Defines the relative path to a directory on a RAM drive that can be used for keeping test files, default value is '\'. The directory must exist! The path must correspond to the path defined in the previous variable
-RAMDriveTestPathRelative = \base\t_sfsrv\
-
-# Defines RAM drive's media type (a value of TMediaType). Default value is 'EMediaFlash'. 
-RAMDriveMediaType = EMediaHardDisk
-
-
-# A ROM drive in the environment. 
-# Defines the character of the drive, the default value is 'Z'.
-ROMDriveChar = Z
-
-# Defines the drive's index.
-ROMDrive = EDrive{Drives, ROMDriveChar}
-
-
-ROMDriveTestPath = {Drives, ROMDriveChar}:\base\t_sfsrv\
-
-# This must be a numeric index of the drive. The default value is 25.
-ROMDriveIndex = 25
-
-# Defines the a file system name that resides on a ROM drive. The default value is 'Rom'. 
-ROMDriveFileSystemName = Rom
-
-# Defines the a file system sub type that resides on a ROM drive. The default value is 'FAT16'. 
-ROMDriveFileSystemSubType = Rom
-
-
-# A MultiMediaCard drive in the environment. A file system must be already mounted onto the drive prior to running the test suite.
-# Defines the character of the drive, the default value is 'E'.
-RemovableDriveChar = E
-
-# Defines the drive's index.
-RemovableDrive = EDrive{Drives, RemovableDriveChar}
-
-# Defines the path of the MMC drive.
-RemovableDrivePath = {Drives, RemovableDriveChar}:\
-
-RemovableDriveTestPath = {Drives, RemovableDriveChar}:\base\t_sfsrv\
-
-# A drive that could serve as a drive for substitution (using subst operation).
-# Defines the drive's index, the default value is 'EDriveG'.
-DriveForSubst = EDriveG
-
-
-# Mount file system file name, the default value is 'ELffs'.
-MountFileSystemFile = ELffs
-
-
-# Mount file system name, the default value is 'Lffs'.
-MountFileSystemName = Lffs
-
-
-# Mount system extension file name
-MountExtensionFileName = T_TestFXT
-
-
-# Mount system extension file name
-MountExtensionName = TestFileExtension
-
-
-# Bad drive index (out of range). Default value is 28.
-BadDriveIndex = 28
--- a/baseapitest/basesvs/validation/f32/testdata/gcce/dual_drive_env.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-[Drives]
-# Dual Drives configured out of same interface
-# Example, on H4 multimedia card drive F:/ is one of the drive for the interface
-DriveChar1 = F
-
-# Defines the drive's index.
-Drive1 = EDrive{Drives, DriveChar1}
-
-# Defines the path of the MMC drive.
-DrivePath1 = {Drives, DriveChar1}:\
-
-DriveTestPath1 = {Drives, DriveChar1}:\base\t_sfsrv\
-
-
-# Dual Drives configured out of same interface
-# Example, on H4 multimedia card drive E:/ is one of the drive for the interface
-DriveChar2 = E
-
-# Defines the drive's index.
-Drive2 = EDrive{Drives, DriveChar2}
-
-# Defines the path of the MMC drive.
-DrivePath2 = {Drives, DriveChar2}:\
-
-DriveTestPath2 = {Drives, DriveChar2}:\base\t_sfsrv\
-
-
-# A ROM drive in the environment. 
-# Defines the character of the drive, the default value is 'Z'.
-ROMDriveChar = Z
-
-# Defines the drive's index.
-ROMDrive = EDrive{Drives, ROMDriveChar}
-
-
-ROMDriveTestPath = {Drives, ROMDriveChar}:\base\t_sfsrv\
-
-# This must be a numeric index of the drive. The default value is 25.
-ROMDriveIndex = 25
--- a/baseapitest/basesvs/validation/f32/testdata/winscw/base_f32_env.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-[Drives]
-
-
-# Defines the character of the not mounted drive, the default value is 'n'.
-NotMountedDriveChar = N
-
-
-# Default writable drive. This drive is used for creating temporary test files on it.
-# This must be a numeric index of the drive. The default value is 2.
-SystemDriveIndex = 2
-
-# Defines the character of the drive, the default value is 'c'.
-SystemDriveChar = C
-
-# Defines the drive's index.
-SystemDrive = EDrive{Drives, SystemDriveChar}
-
-# Defines path to default drive.
-SystemDrivePath = {Drives, SystemDriveChar}:\
-
-# Defines path to a directory on a default drive that can be used for keeping test files.
-SystemDriveTestPath = {Drives, SystemDriveChar}:\base\t_sfsrv\
-
-
-# A RAM drive in the environment. 
-# Defines the character of the drive, the default value is 'X'.
-RAMDriveChar = X
-
-# Defines the drive's index.
-RAMDrive = EDrive{Drives, RAMDriveChar}
-
-# Defines path to RAM drive.
-RAMDrivePath = {Drives, RAMDriveChar}:\
-
-# Defines path to a directory on a RAM drive that can be used for keeping test files.
-RAMDriveTestPath = {Drives, RAMDriveChar}:\base\t_sfsrv\
-
-# Defines the relative path to a directory on a RAM drive that can be used for keeping test files, default value is '\'. The directory must exist! The path must correspond to the path defined in the previous variable
-RAMDriveTestPathRelative = \base\t_sfsrv\
-
-# Defines RAM drive's media type (a value of TMediaType). Default value is 'EMediaFlash'. 
-RAMDriveMediaType = EMediaHardDisk
-
-
-# A ROM drive in the environment. 
-# Defines the character of the drive, the default value is 'Z'.
-ROMDriveChar = Z
-
-# Defines the drive's index, the default value is 'EDriveZ'.
-ROMDrive = EDrive{Drives, ROMDriveChar}
-
-
-ROMDriveTestPath = {Drives, ROMDriveChar}:\base\t_sfsrv\
-
-# This must be a numeric index of the drive. The default value is 25.
-ROMDriveIndex = 25
-
-# Defines the a file system name that resides on a ROM drive. The default value is 'Win32'.
-ROMDriveFileSystemName = Win32
-
-# Defines the a file system sub type that resides on a ROM drive. The default value is 'Win32'. 
-ROMDriveFileSystemSubType = Win32
-
-
-# A MultiMediaCard drive in the environment. A file system must be already mounted onto the drive prior to running the test suite.
-# Defines the character of the drive, the default value is 'X'.
-RemovableDriveChar = X
-
-# Defines the drive's index, the default value is 'EDriveX'.
-RemovableDrive = EDrive{Drives, RemovableDriveChar}
-
-# Defines the path of the MMC drive.
-RemovableDrivePath = {Drives, RemovableDriveChar}:\
-
-RemovableDriveTestPath = {Drives, RemovableDriveChar}:\base\t_sfsrv\
-
-# A drive that could serve as a drive for substitution (using subst operation).
-# Defines the drive's index, the default value is 'EDriveG'.
-DriveForSubst = EDriveG
-
-
-# Mount file system file name, the default value is 'EROFS'.
-MountFileSystemFile = EROFS
-
-
-# Mount file system name, the default value is 'ROFS'.
-MountFileSystemName = rofs
-
-
-# Mount system extension file name
-MountExtensionFileName = T_TestFXT
-
-
-# Mount system extension file name
-MountExtensionName = TestFileExtension
-
-
-# Bad drive index (out of range). Default value is 28.
-BadDriveIndex = 28
\ No newline at end of file
--- a/baseapitest/basesvs/validation/f32/testdata/winscw/dual_drive_env.ini	Mon Oct 18 15:31:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-[Drives]
-
-# Dual Drives configured out of same interface
-# Example, on H4 multimedia card drive F:/ is one of the drive for the interface
-DriveChar1 = F
-
-# Defines the drive's index.
-Drive1 = EDrive{Drives, DriveChar1}
-
-# Defines the path of the MMC drive.
-DrivePath1 = {Drives, DriveChar1}:\
-
-DriveTestPath1 = {Drives, DriveChar1}:\base\t_sfsrv\
-
-# Dual Drives configured out of same interface
-# Example, on H4 multimedia card drive E:/ is one of the drive for the interface
-DriveChar2 = E
-
-# Defines the drive's index.
-Drive2 = EDrive{Drives, DriveChar2}
-
-# Defines the path of the MMC drive.
-DrivePath2 = {Drives, DriveChar2}:\
-
-DriveTestPath2 = {Drives, DriveChar2}:\base\t_sfsrv\
-
-
-# A ROM drive in the environment. 
-# Defines the character of the drive, the default value is 'Z'.
-ROMDriveChar = Z
-
-# Defines the drive's index.
-ROMDrive = EDrive{Drives, ROMDriveChar}
-
-
-ROMDriveTestPath = {Drives, ROMDriveChar}:\base\t_sfsrv\
-
-# This must be a numeric index of the drive. The default value is 25.
-ROMDriveIndex = 25
-
-# Default writable drive. This drive is used for creating temporary test files on it.
-# This must be a numeric index of the drive. The default value is 2.
-SystemDriveIndex = 2
-
-# Defines the character of the drive, the default value is 'C'.
-SystemDriveChar = C
-
-# Defines the drive's index.
-SystemDrive = EDrive{Drives, SystemDriveChar}
-
-# Defines path to default drive.
-SystemDrivePath = {Drives, SystemDriveChar}:\
-
-# Defines path to a directory on a default drive that can be used for keeping test files.
-SystemDriveTestPath = {Drives, SystemDriveChar}:\base\t_sfsrv\
-
--- a/kernel/eka/bmarm/euseru.def	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/bmarm/euseru.def	Wed Oct 20 13:58:28 2010 +0100
@@ -2234,31 +2234,31 @@
 	RandomL__4MathR5TDes8 @ 2233 NONAME R3UNUSED ; Math::RandomL(TDes8 &)
 	RandomL__4Math @ 2234 NONAME R3UNUSED ; Math::RandomL(void)
 	Random__4MathR5TDes8 @ 2235 NONAME R3UNUSED ; Math::Random(TDes8 &)
-	Append2__6TDes16G5TChar @ 2236  NONAME R3UNUSED ; TDes16::Append2(TChar)
-	AppendFill2__6TDes16G5TChari @ 2237  NONAME R3UNUSED ; TDes16::AppendFill2(TChar, int)
-	AppendJustify2__6TDes16PCUsi6TAlignG5TChar @ 2238  NONAME ; TDes16::AppendJustify2(unsigned short const *, int, TAlign, TChar)
-	AppendJustify2__6TDes16PCUsii6TAlignG5TChar @ 2239  NONAME ; TDes16::AppendJustify2(unsigned short const *, int, int, TAlign, TChar)
-	AppendJustify2__6TDes16RC7TDesC16i6TAlignG5TChar @ 2240  NONAME ; TDes16::AppendJustify2(TDesC16 const &, int, TAlign, TChar)
-	AppendJustify2__6TDes16RC7TDesC16ii6TAlignG5TChar @ 2241  NONAME ; TDes16::AppendJustify2(TDesC16 const &, int, int, TAlign, TChar)
-	Capitalize2__6TDes16 @ 2242  NONAME R3UNUSED ; TDes16::Capitalize2(void)
-	Collate2__6TDes16 @ 2243  NONAME R3UNUSED ; TDes16::Collate2(void)
-	CopyC2__6TDes16RC7TDesC16 @ 2244  NONAME R3UNUSED ; TDes16::CopyC2(TDesC16 const &)
-	CopyCP2__6TDes16RC7TDesC16 @ 2245  NONAME R3UNUSED ; TDes16::CopyCP2(TDesC16 const &)
-	CopyF2__6TDes16RC7TDesC16 @ 2246  NONAME R3UNUSED ; TDes16::CopyF2(TDesC16 const &)
-	CopyLC2__6TDes16RC7TDesC16 @ 2247  NONAME R3UNUSED ; TDes16::CopyLC2(TDesC16 const &)
-	CopyUC2__6TDes16RC7TDesC16 @ 2248  NONAME R3UNUSED ; TDes16::CopyUC2(TDesC16 const &)
-	Fill2__6TDes16G5TChar @ 2249  NONAME R3UNUSED ; TDes16::Fill2(TChar)
-	Fill2__6TDes16G5TChari @ 2250  NONAME R3UNUSED ; TDes16::Fill2(TChar, int)
-	FindCorruptSurrogate__C7TDesC16 @ 2251  NONAME R3UNUSED ; TDesC16::FindCorruptSurrogate(void) const
-	Fold2__6TDes16 @ 2252  NONAME R3UNUSED ; TDes16::Fold2(void)
-	Justify2__6TDes16RC7TDesC16i6TAlignG5TChar @ 2253  NONAME ; TDes16::Justify2(TDesC16 const &, int, TAlign, TChar)
-	Locate2__C7TDesC16G5TChar @ 2254  NONAME R3UNUSED ; TDesC16::Locate2(TChar) const
-	LocateF2__C7TDesC16G5TChar @ 2255  NONAME R3UNUSED ; TDesC16::LocateF2(TChar) const
-	LocateReverse2__C7TDesC16G5TChar @ 2256  NONAME R3UNUSED ; TDesC16::LocateReverse2(TChar) const
-	LocateReverseF2__C7TDesC16G5TChar @ 2257  NONAME R3UNUSED ; TDesC16::LocateReverseF2(TChar) const
-	LowerCase2__6TDes16 @ 2258  NONAME R3UNUSED ; TDes16::LowerCase2(void)
-	Match2__C7TDesC16RC7TDesC16 @ 2259  NONAME R3UNUSED ; TDesC16::Match2(TDesC16 const &) const
-	UpperCase2__6TDes16 @ 2260  NONAME R3UNUSED ; TDes16::UpperCase2(void)
+	Append2__6TDes16G5TChar @ 2236 NONAME R3UNUSED ; TDes16::Append2(TChar)
+	AppendFill2__6TDes16G5TChari @ 2237 NONAME R3UNUSED ; TDes16::AppendFill2(TChar, int)
+	AppendJustify2__6TDes16PCUsi6TAlignG5TChar @ 2238 NONAME ; TDes16::AppendJustify2(unsigned short const *, int, TAlign, TChar)
+	AppendJustify2__6TDes16PCUsii6TAlignG5TChar @ 2239 NONAME ; TDes16::AppendJustify2(unsigned short const *, int, int, TAlign, TChar)
+	AppendJustify2__6TDes16RC7TDesC16i6TAlignG5TChar @ 2240 NONAME ; TDes16::AppendJustify2(TDesC16 const &, int, TAlign, TChar)
+	AppendJustify2__6TDes16RC7TDesC16ii6TAlignG5TChar @ 2241 NONAME ; TDes16::AppendJustify2(TDesC16 const &, int, int, TAlign, TChar)
+	Capitalize2__6TDes16 @ 2242 NONAME R3UNUSED ; TDes16::Capitalize2(void)
+	Collate2__6TDes16 @ 2243 NONAME R3UNUSED ; TDes16::Collate2(void)
+	CopyC2__6TDes16RC7TDesC16 @ 2244 NONAME R3UNUSED ; TDes16::CopyC2(TDesC16 const &)
+	CopyCP2__6TDes16RC7TDesC16 @ 2245 NONAME R3UNUSED ; TDes16::CopyCP2(TDesC16 const &)
+	CopyF2__6TDes16RC7TDesC16 @ 2246 NONAME R3UNUSED ; TDes16::CopyF2(TDesC16 const &)
+	CopyLC2__6TDes16RC7TDesC16 @ 2247 NONAME R3UNUSED ; TDes16::CopyLC2(TDesC16 const &)
+	CopyUC2__6TDes16RC7TDesC16 @ 2248 NONAME R3UNUSED ; TDes16::CopyUC2(TDesC16 const &)
+	Fill2__6TDes16G5TChar @ 2249 NONAME R3UNUSED ; TDes16::Fill2(TChar)
+	Fill2__6TDes16G5TChari @ 2250 NONAME R3UNUSED ; TDes16::Fill2(TChar, int)
+	FindCorruptSurrogate__C7TDesC16 @ 2251 NONAME R3UNUSED ; TDesC16::FindCorruptSurrogate(void) const
+	Fold2__6TDes16 @ 2252 NONAME R3UNUSED ; TDes16::Fold2(void)
+	Justify2__6TDes16RC7TDesC16i6TAlignG5TChar @ 2253 NONAME ; TDes16::Justify2(TDesC16 const &, int, TAlign, TChar)
+	Locate2__C7TDesC16G5TChar @ 2254 NONAME R3UNUSED ; TDesC16::Locate2(TChar) const
+	LocateF2__C7TDesC16G5TChar @ 2255 NONAME R3UNUSED ; TDesC16::LocateF2(TChar) const
+	LocateReverse2__C7TDesC16G5TChar @ 2256 NONAME R3UNUSED ; TDesC16::LocateReverse2(TChar) const
+	LocateReverseF2__C7TDesC16G5TChar @ 2257 NONAME R3UNUSED ; TDesC16::LocateReverseF2(TChar) const
+	LowerCase2__6TDes16 @ 2258 NONAME R3UNUSED ; TDes16::LowerCase2(void)
+	Match2__C7TDesC16RC7TDesC16 @ 2259 NONAME R3UNUSED ; TDesC16::Match2(TDesC16 const &) const
+	UpperCase2__6TDes16 @ 2260 NONAME R3UNUSED ; TDes16::UpperCase2(void)
 	AgainHighRes__6RTimerR14TRequestStatusG27TTimeIntervalMicroSeconds32 @ 2261 NONAME R3UNUSED ; RTimer::AgainHighRes(TRequestStatus &, TTimeIntervalMicroSeconds32)
 	Align__C10RAllocatorPv @ 2262 NONAME R3UNUSED ; RAllocator::Align(void *) const
 	Align__C10RAllocatori @ 2263 NONAME R3UNUSED ; RAllocator::Align(int) const
@@ -2267,10 +2267,12 @@
 	Size__C10RAllocator @ 2266 NONAME R3UNUSED ; RAllocator::Size(void) const
 	__DbgGetAllocFail__10RAllocator @ 2267 NONAME R3UNUSED ; RAllocator::__DbgGetAllocFail(void)
 	__DbgGetAllocFail__4Useri @ 2268 NONAME R3UNUSED ; User::__DbgGetAllocFail(int)
-	SetKeyOffset__10RArrayBasei @ 2269  NONAME R3UNUSED ; RArrayBase::SetKeyOffset(int)
+	SetKeyOffset__10RArrayBasei @ 2269 NONAME R3UNUSED ; RArrayBase::SetKeyOffset(int)
 	Poll__10RSemaphore @ 2270 NONAME R3UNUSED ; RSemaphore::Poll(void)
 	Wait__6RMutexi @ 2271 NONAME R3UNUSED ; RMutex::Wait(int)
 	Poll__6RMutex @ 2272 NONAME R3UNUSED ; RMutex::Poll(void)
 	Poll__9RFastLock @ 2273 NONAME R3UNUSED ; RFastLock::Poll(void)
 	Wait__9RFastLocki @ 2274 NONAME R3UNUSED ; RFastLock::Wait(int)
-	
+	CompletePostBootSystemTasks__5RTest @ 2275 NONAME R3UNUSED ; RTest::CompletePostBootSystemTasks(void)
+	RunReaper__7RLoader @ 2276 NONAME R3UNUSED ; RLoader::RunReaper(void)
+
--- a/kernel/eka/bwins/euseru.def	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/bwins/euseru.def	Wed Oct 20 13:58:28 2010 +0100
@@ -2215,9 +2215,12 @@
 	?MaxLength@RAllocator@@QBEHXZ @ 2214 NONAME ; int RAllocator::MaxLength(void) const
 	?__DbgGetAllocFail@RAllocator@@QAE?AW4TAllocFail@1@XZ @ 2215 NONAME ; enum RAllocator::TAllocFail RAllocator::__DbgGetAllocFail(void)
 	?__DbgGetAllocFail@User@@SA?AW4TAllocFail@RAllocator@@H@Z @ 2216 NONAME ; enum RAllocator::TAllocFail User::__DbgGetAllocFail(int)
-	?SetKeyOffset@RArrayBase@@IAEXH@Z @ 2217  NONAME ; void RArrayBase::SetKeyOffset(int)
+	?SetKeyOffset@RArrayBase@@IAEXH@Z @ 2217 NONAME ; void RArrayBase::SetKeyOffset(int)
 	?Poll@RFastLock@@QAEHXZ @ 2218 NONAME ; public: int __thiscall RFastLock::Poll(void)
 	?Poll@RMutex@@QAEHXZ @ 2219 NONAME ; public: int __thiscall RMutex::Poll(void)
 	?Poll@RSemaphore@@QAEHXZ @ 2220 NONAME ; public: int __thiscall RSemaphore::Poll(void)
 	?Wait@RMutex@@QAEHH@Z @ 2221 NONAME ; public: int __thiscall RMutex::Wait(int)
 	?Wait@RFastLock@@QAEHH@Z @ 2222 NONAME ; public: int __thiscall RFastLock::Wait(int)
+	?CompletePostBootSystemTasks@RTest@@QAEHXZ @ 2223 NONAME ; int RTest::CompletePostBootSystemTasks(void)
+	?RunReaper@RLoader@@QAEHXZ @ 2224 NONAME ; int RLoader::RunReaper(void)
+
--- a/kernel/eka/bx86/euseru.def	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/bx86/euseru.def	Wed Oct 20 13:58:28 2010 +0100
@@ -2181,7 +2181,7 @@
 	?SetReadOnly@TChunkCreateInfo@@QAEXXZ @ 2180 NONAME ; public: void __thiscall TChunkCreateInfo::SetReadOnly(void)
 	?RandomL@Math@@SAXAAVTDes8@@@Z @ 2181 NONAME ; void Math::RandomL(class TDes8 &)
 	?Random@Math@@SAXAAVTDes8@@@Z @ 2182 NONAME ; void Math::Random(class TDes8 &)
- 	?RandomL@Math@@SAKXZ @ 2183 NONAME ; unsigned long Math::RandomL(void)
+	?RandomL@Math@@SAKXZ @ 2183 NONAME ; unsigned long Math::RandomL(void)
 	?Append2@TDes16@@QAEXVTChar@@@Z @ 2184 NONAME ; void TDes16::Append2(class TChar)
 	?CopyC2@TDes16@@QAEXABVTDesC16@@@Z @ 2185 NONAME ; void TDes16::CopyC2(class TDesC16 const &)
 	?Collate2@TDes16@@QAEXXZ @ 2186 NONAME ; void TDes16::Collate2(void)
@@ -2215,9 +2215,12 @@
 	?Size@RAllocator@@QBEHXZ @ 2214 NONAME ; public: int __thiscall RAllocator::Size(void)const 
 	?__DbgGetAllocFail@RAllocator@@QAE?AW4TAllocFail@1@XZ @ 2215 NONAME ; enum RAllocator::TAllocFail RAllocator::__DbgGetAllocFail(void)
 	?__DbgGetAllocFail@User@@SA?AW4TAllocFail@RAllocator@@H@Z @ 2216 NONAME ; enum RAllocator::TAllocFail User::__DbgGetAllocFail(int)
-	?SetKeyOffset@RArrayBase@@IAEXH@Z @ 2217  NONAME ; void RArrayBase::SetKeyOffset(int)
+	?SetKeyOffset@RArrayBase@@IAEXH@Z @ 2217 NONAME ; void RArrayBase::SetKeyOffset(int)
 	?Poll@RFastLock@@QAEHXZ @ 2218 NONAME ; public: int __thiscall RFastLock::Poll(void)
 	?Poll@RMutex@@QAEHXZ @ 2219 NONAME ; public: int __thiscall RMutex::Poll(void)
 	?Poll@RSemaphore@@QAEHXZ @ 2220 NONAME ; public: int __thiscall RSemaphore::Poll(void)
 	?Wait@RMutex@@QAEHH@Z @ 2221 NONAME ; public: int __thiscall RMutex::Wait(int)
 	?Wait@RFastLock@@QAEHH@Z @ 2222 NONAME ; public: int __thiscall RFastLock::Wait(int)
+	?CompletePostBootSystemTasks@RTest@@QAEHXZ @ 2223 NONAME ; public: int __thiscall RTest::CompletePostBootSystemTasks(void)
+	?RunReaper@RLoader@@QAEHXZ @ 2224 NONAME ; public: int __thiscall RLoader::RunReaper(void)
+
--- a/kernel/eka/bx86gcc/euseru.def	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/bx86gcc/euseru.def	Wed Oct 20 13:58:28 2010 +0100
@@ -2500,3 +2500,5 @@
 	_ZN6RMutex4PollEv @ 2499 NONAME ; RMutex::Poll()
 	_ZN9RFastLock4PollEv @ 2500 NONAME ; RFastLock::Poll()
 	_ZN9RFastLock4WaitEi @ 2501 NONAME ; RFastLock::Wait(int)
+	_ZN5RTest27CompletePostBootSystemTasksEv @ 2502 NONAME
+	_ZN7RLoader9RunReaperEv @ 2503 NONAME
--- a/kernel/eka/drivers/medmmc/medmmc.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/drivers/medmmc/medmmc.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -41,6 +41,9 @@
 	#define BTraceContext8(aCategory,aSubCategory,a1,a2) 
 #endif	// BTRACE_PAGING_MEDIA
 
+// Enables reliable writes for system drives
+#define _ENABLE_EMMC_RELIABLE_WRITE_
+
 // Enable this macro to debug cache: 
 // NB The greater the number of blocks, the slower this is...
 //#define _DEBUG_CACHE
@@ -1273,10 +1276,14 @@
 				// One request, i.e. not end of previous DB request 
 				// 512 Bytes long when sector aligned
 				if ( ( I64LOW(iPhysEnd - iPhysStart) == iBlkLen) && ((iReqStart & ~iBlkMsk) == iPhysStart) )
-					{
-					__KTRACE_OPT(KPBUSDRV, Kern::Printf("mmd:lw:AtomicWrite"));
-					iSession->Command().iFlags|= KMMCCmdFlagReliableWrite;
-					}
+                    {
+				    // Reliable write will only be issued on non-removable drives (i.e. System drives)
+                    if (!isRemovableDrive( *( iCurrentReq->Drive() ) ) )
+                        {                                            
+                        __KTRACE_OPT(KPBUSDRV, Kern::Printf("mmd:lw:AtomicWrite"));
+                        iSession->Command().iFlags|= KMMCCmdFlagReliableWrite;
+                        }
+			        }
 				}
 #endif //_ENABLE_EMMC_RELIABLE_WRITE_			
 		
@@ -2679,6 +2686,30 @@
 	return KErrCompletion;
 	}
 
+// 
+// returns True if the specified drive is removable either physically or logically
+//
+TBool DMmcMediaDriverFlash::isRemovableDrive(TLocDrv& aDrive)
+    {    
+    if (iInternalSlot && iMmcPartitionInfo)
+        {        
+        TBuf8<sizeof(TLocalDriveCapsV6)> capsBuf;
+        capsBuf.SetMax();
+        capsBuf.FillZ();
+        iMmcPartitionInfo->PartitionCaps(aDrive,capsBuf);
+        TLocalDriveCapsV6& CapsInfo = *(TLocalDriveCapsV6*)capsBuf.Ptr(); 
+        
+        if (CapsInfo.iDriveAtt & (KDriveAttRemovable|KDriveAttLogicallyRemovable) )
+            {            
+            return ETrue;
+            }
+        else
+            {
+            return EFalse;
+            }
+        }
+    return ETrue;
+    }
 
 // ---- cache ----
 
@@ -3433,19 +3464,25 @@
 
 	EndInCritical();
 
+	if (iMedReq == EMReqRead || iMedReq == EMReqWrite)
+        {
+        // Powerdown during a read or write operation,
+	    // invalidate Cache to ensure Cache consistency 
+	    InvalidateCache();
+        }
+	
 	// need to cancel the session as the stack doesn't take too kindly to having the same session engaged more than once.
 	if (iSession)
 		iStack->CancelSession(iSession);
-
-	CompleteRequest(KErrNotReady);
-	iMedReq = EMReqIdle;
+	
+	CompleteRequest(KErrNotReady);	
 	OstTraceFunctionExit0( DMMCMEDIADRIVERFLASH_NOTIFYPOWERDOWN_EXIT );
 	}
 
 void DMmcMediaDriverFlash::NotifyEmergencyPowerDown()
 	{
 	OstTraceFunctionEntry0( DMMCMEDIADRIVERFLASH_NOTIFYEMERGENCYPOWERDOWN_ENTRY );
-	__KTRACE_OPT(KPBUSDRV,Kern::Printf(">Ata:NotifyEmergencyPowerDown"));
+	__KTRACE_OPT(KPBUSDRV,Kern::Printf(">mmc:NotifyEmergencyPowerDown"));
 
 	iSessionEndDfc.Cancel();
 	iDataTransferCallBackDfc.Cancel();
@@ -3455,12 +3492,18 @@
 		r=KErrAbort;
 	EndInCritical();
 
+	if (iMedReq == EMReqRead || iMedReq == EMReqWrite)
+        {
+        // Powerdown during a read or write operation,
+        // invalidate Cache to ensure Cache consistency
+        InvalidateCache();
+        }
+	
 	// need to cancel the session as the stack doesn't take too kindly to having the same session engaged more than once.
 	if (iSession)
 		iStack->CancelSession(iSession);
 
-	CompleteRequest(r);
-	iMedReq = EMReqIdle;
+	CompleteRequest(r);	
 	OstTraceFunctionExit0( DMMCMEDIADRIVERFLASH_NOTIFYEMERGENCYPOWERDOWN_EXIT );
 	}
 
--- a/kernel/eka/drivers/medmmc/medmmc.h	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/drivers/medmmc/medmmc.h	Wed Oct 20 13:58:28 2010 +0100
@@ -206,11 +206,13 @@
 	void PasswordControl(TInt aFunc, TLocalDrivePasswordData& aData);
 	void Reset();
 	TInt AllocateSession();  
+	TBool isRemovableDrive(TLocDrv& aDrive);
 
 #ifdef _DEBUG_CACHE
 	TBool CacheInvariant();
 	TUint8* GetCachedBlock(TInt64 aAddr);
 #endif
+
 private:
 	DMMCStack* iStack;			 				// controller objects
 	TMMCard* iCard;
--- a/kernel/eka/eabi/euseru.def	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/eabi/euseru.def	Wed Oct 20 13:58:28 2010 +0100
@@ -2543,3 +2543,6 @@
 	_ZN6RMutex4PollEv @ 2542 NONAME ; RMutex::Poll()
 	_ZN9RFastLock4PollEv @ 2543 NONAME ; RFastLock::Poll()
 	_ZN9RFastLock4WaitEi @ 2544 NONAME ; RFastLock::Wait(int)
+	_ZN5RTest27CompletePostBootSystemTasksEv @ 2545 NONAME
+	_ZN7RLoader9RunReaperEv @ 2546 NONAME
+
--- a/kernel/eka/euser/us_func.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/euser/us_func.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -2020,8 +2020,10 @@
 /* RVCT 3.1 and 4.0 read past the end of arrays when unrolling loops.
  * This only happens when using -O3 -Otime, so force to -O2.
  */
+#if __ARMCC_VERSION >= 310000 
 #pragma push
 #pragma O2
+#endif
 
 /**
 Performs a CCITT CRC-32 checksum on the specified data.
@@ -2042,4 +2044,6 @@
 		crc = (crc >> 8) ^ CrcTab32[(crc ^ *p++) & 0xff];
 	aCrc = crc;
 	}
+#if __ARMCC_VERSION >= 310000 
 #pragma pop
+#endif
--- a/kernel/eka/euser/us_ksvr.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/euser/us_ksvr.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -5333,6 +5333,11 @@
 	return SendReceive(ELoaderCancelLazyDllUnload, TIpcArgs() );
 	}
 
+EXPORT_C TInt RLoader::RunReaper()
+	{
+	return SendReceive(ELoaderRunReaper, TIpcArgs() );
+	}
+
 #ifdef __USERSIDE_THREAD_DATA__
 
 EXPORT_C TInt UserSvr::DllSetTls(TInt aHandle, TAny* aPtr)
--- a/kernel/eka/euser/us_test.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/euser/us_test.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1994-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -561,3 +561,48 @@
 	}
 
 
+/**
+This should be called before using the __KHEAP_MARK macro in tests that check for
+kernel heap leaks.
+
+It will complete deferred background tasks that would ordinarily run at some point after boot
+and that would lead to kernel heap allocs/deallocs. For example, unload of lazily loaded DLLs
+and running the reaper.
+*/
+EXPORT_C TInt RTest::CompletePostBootSystemTasks()
+	{
+	RLoader l;
+	TInt r = l.Connect();
+	if(r != KErrNone)
+		{
+		Printf(_L("RTEST: Error %d while connecting to loader.\n"), r);
+		return r;
+		}
+
+	r = l.CancelLazyDllUnload();
+	if(r != KErrNone)
+		{
+		l.Close();
+		Printf(_L("RTEST: Error %d while canceling Lazy Dll unloading.\n"), r);
+		return r;
+		}
+
+	r = l.RunReaper();
+	l.Close();
+
+	if(r != KErrNone)
+		{
+		Printf(_L("RTEST: Error %d while running the reaper.\n"),r);
+		return r;
+		}
+
+	// Ensure that any kernel objects asynchronously deleted after the
+	// above get fully deleted.
+	r = UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, 0, 0);
+	if(r != KErrNone)
+		{
+		Printf(_L("RTEST: Error %d while attempting to asynchronously delete kernel objects.\n"),r);
+		}
+	return r;
+	}
+
--- a/kernel/eka/include/e32ldr_private.h	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/include/e32ldr_private.h	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -55,6 +55,7 @@
 	ECheckLibraryHash=14, 
 	ELoadFSProxyDrive=15,
     ELoadCodePage=16,
+	ELoaderRunReaper=17,
     EMaxLoaderMsg
 	};
 //
@@ -95,6 +96,7 @@
 	TInt LoadLocale(const TDesC& aLocaleDllName, TLibraryFunction* aExportList);
 	TInt GetInfoFromHeader(const TDesC8& aHeader, TDes8& aInfoBuf);
 	IMPORT_C TInt CancelLazyDllUnload();
+	IMPORT_C TInt RunReaper();
 	IMPORT_C TInt Delete(const TDesC& aFileName);
     IMPORT_C TInt CheckLibraryHash(const TDesC& aFileName, TBool aValidateHash=EFalse);
 	TInt LoadProcess(TInt& aHandle, const TDesC& aFileName, const TDesC& aCommand, const TUidType& aUidType, TInt aMinStackSize, TOwnerType aType);
--- a/kernel/eka/include/e32test.h	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/include/e32test.h	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1994-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -74,6 +74,7 @@
 	inline void HandleValue(TInt aValue,  TInt aLine, const TText* aFileName);
 
 	IMPORT_C static TInt CloseHandleAndWaitForDestruction(RHandleBase& aH);	/**< @internalTechnology */
+	IMPORT_C TInt CompletePostBootSystemTasks();
 
 protected:
 	void CheckConsoleCreated();
@@ -365,7 +366,12 @@
 */
 #define CLOSE_AND_WAIT(h)	((void)(RTest::CloseHandleAndWaitForDestruction(h) && (User::Panic(KLitCloseAndWait,__LINE__),1)))
 
-
+#define COMPLETE_POST_BOOT_SYSTEM_TASKS() \
+	{\
+	_LIT(KLitCompleteSysTasks, "Complete post boot system tasks"); \
+	RTest test(KLitCompleteSysTasks); \
+	test(test.CompletePostBootSystemTasks() == KErrNone); \
+	}
 
 #endif
 
--- a/kernel/eka/include/e32ver.h	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/include/e32ver.h	Wed Oct 20 13:58:28 2010 +0100
@@ -28,7 +28,7 @@
 
 const TInt KE32MajorVersionNumber=2;
 const TInt KE32MinorVersionNumber=0;
-const TInt KE32BuildVersionNumber=4011;
+const TInt KE32BuildVersionNumber=4012;
 
 const TInt KMachineConfigurationMajorVersionNumber=1;
 const TInt KMachineConfigurationMinorVersionNumber=0;
--- a/kernel/eka/memmodel/epoc/mmubase/mmubase.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/memmodel/epoc/mmubase/mmubase.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -4524,7 +4524,7 @@
 		aLock.iLockedStart = aStart;
 		aLock.iLockedPageCount = numPages;
 		aLock.iProcess = process;
-		aLock.iProcess->Open();
+		aLock.iProcess->CheckedOpen();
 		}
 
 	NKern::UnlockSystem();
--- a/kernel/eka/nkernsmp/arm/vectors.cia	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/nkernsmp/arm/vectors.cia	Wed Oct 20 13:58:28 2010 +0100
@@ -137,8 +137,8 @@
 	asm("sub	sp, sp, #%a0" : : "i" _FOFF(SThreadExcStack,iR15));
 	asm("stmia	sp, {r0-r14}^ ");			// save R0-R12, R13_usr, R14_usr
 	asm("mov	r4, #%a0" : : "i" ((TInt)SThreadExcStack::ESvc));
+	asm("ldr	r12, [lr, #-4] ");			// get SWI opcode
 	USER_MEMORY_GUARD_ON_IF_MODE_USR(r11);
-	asm("ldr	r12, [lr, #-4] ");			// get SWI opcode
 	GET_RWNO_TID(,r11);
 	asm("str	r4, [sp, #%a0]" : : "i" _FOFF(SThreadExcStack,iExcCode));	// word describing exception type
 	asm("movs	r12, r12, lsl #9 ");		// 512*SWI number into r12
--- a/kernel/eka/release.txt	Mon Oct 18 15:31:10 2010 +0100
+++ b/kernel/eka/release.txt	Wed Oct 20 13:58:28 2010 +0100
@@ -1,3 +1,38 @@
+Version 2.00.4012
+=================
+(Made by fadhliM 19/10/2010)
+
+1.	h14jiang
+	1.	ou1cimx1#591478 [MCL] ENV: baseapitest has a dependency on TEF, which is outside of kernelhwsrv package
+
+2.	seolney
+	1.	ou1cimx1#616416 ENV: t_dmasim takes too long
+
+3.	mipetzol
+	1.	ou1cimx1#614127 'Inverted Thread Priorities' Use Case for T_DMA
+
+4.	gcochran
+	1.	ou1cimx1#607403 Kernel - SPB10.1 Coverity Prevent defects, Mandatory Checkers
+
+5.	ricoles
+	1.	ou1cimx1#614361 SMP kernel doesn't allow exec calls to be made from ram-loaded code on UDEB
+
+6.	necliffo
+	1.	ou1cimx1#584612 eMMC Reliable Write not enabled for internal eMMC devices
+
+7.	shubmurt
+	1.	ou1cimx1#560596 E32Test for Publish-Subscribe
+
+8.	davegord
+	1.	ou1cimx1#567063 ENV : T_CPUTIME Fails at Line 270 in TestThreadCpuTime()
+
+9.	tocosgro
+	1.	MINOR_CHANGE Check compiler version before issuing pragma
+
+10.	saabbasn
+	1.	ou1cimx1#612006 ENV t_smpsoak child processes now check for already existing files
+
+
 Version 2.00.4011
 =================
 (Made by fadhliM 15/10/2010)
--- a/kerneltest/e32test/active/t_dtim.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/active/t_dtim.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -155,6 +155,7 @@
 //
 //
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 	CMyActiveScheduler* s=NULL;
 	TRAPD(ret,s=CMyActiveScheduler::NewL())
--- a/kerneltest/e32test/bench/t_ipcbm.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/bench/t_ipcbm.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1998-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -114,6 +114,7 @@
 
 GLDEF_C TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	test.Start(_L("Benchmark IPC copy"));
 
--- a/kerneltest/e32test/bench/t_proc1.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/bench/t_proc1.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -680,14 +680,9 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	__KHEAP_MARK;
 
-	// Turn off lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-
 	TBuf16<512> cmd;
 	User::CommandLine(cmd);
 	if(cmd.Length() && TChar(cmd[0]).IsDigit())
--- a/kerneltest/e32test/bench/t_svr2.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/bench/t_svr2.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -273,6 +273,7 @@
 // Test server & session cleanup.
 //
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	RSemaphore svrSem;
 	RSemaphore svrSem2;
 	RSemaphore clientSem;
--- a/kerneltest/e32test/bench/t_svr5.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/bench/t_svr5.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1086,6 +1086,7 @@
 // Test timers.
 //
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 	test.Title();
 	test.Start(_L("Creating client semaphore"));
--- a/kerneltest/e32test/cppexceptions/t_unmap.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/cppexceptions/t_unmap.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -140,12 +140,8 @@
 
 TInt E32Main()
    	{
-	// Turn off lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-	
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
+
 	test.Start(_L("Check code seg unmapping over User::Leave()/C++ exceptions."));
 
 	__UHEAP_MARK;
--- a/kerneltest/e32test/debug/t_context.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/debug/t_context.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -559,6 +559,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	
 	test.Start(_L("Loading LDD"));
--- a/kerneltest/e32test/demandpaging/t_datapaging.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/demandpaging/t_datapaging.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1194,6 +1194,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test_KErrNone(UserHal::PageSizeInBytes(gPageSize));
 	
 	if (User::CommandLineLength() != 0)
--- a/kerneltest/e32test/demandpaging/t_svrpinning.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/demandpaging/t_svrpinning.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -559,6 +559,7 @@
 
 GLDEF_C TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	RTest test(_L("T_SVRPINNING...main"));
 	test.Title();
 
--- a/kerneltest/e32test/device/t_newldd.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/device/t_newldd.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -300,6 +300,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	__UHEAP_MARK;
 
 	test.Start(_L("Testing operator new"));
--- a/kerneltest/e32test/device/t_tldd.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/device/t_tldd.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1998-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -310,6 +310,7 @@
 // Test LDD static data
 //
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	TInt r;
 	test.Title();
 	test.Start(_L("Test device driver loading and unloading"));
--- a/kerneltest/e32test/device/t_usbcsc.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/device/t_usbcsc.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -4553,6 +4553,7 @@
 
 GLDEF_C TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	__UHEAP_MARK;
 	if (ParseCommandLine())
--- a/kerneltest/e32test/dispchan/t_dispchan.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dispchan/t_dispchan.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1505,6 +1505,7 @@
  Create cleanup stack, initialise memory checks and run the tests.
  */
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	CTrapCleanup* cleanup = CTrapCleanup::New();
 	if (!cleanup)
 		{
--- a/kerneltest/e32test/dll/t_tdll12.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dll/t_tdll12.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -283,6 +283,7 @@
 // Test DLL Thread Local Storage data.
 //
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 	test.Title();
 	SetupAddresses();
--- a/kerneltest/e32test/dll/t_tls.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dll/t_tls.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -683,16 +683,11 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 	test.Title();
 	test.Start(_L("Test"));
 
-	// Turn off lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-
 	Test();
 	test.Next(_L("Thread Test"));
 
--- a/kerneltest/e32test/dma/d_dma.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dma/d_dma.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -22,7 +22,6 @@
 
 _LIT(KClientPanicCat, "D_DMA");
 _LIT(KDFCThreadName,"D_DMA_DFC_THREAD");
-const TInt KDFCThreadPriority=26;
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -242,13 +241,14 @@
 		{
 		if (!iDfcQ)
  			{
- 			r = Kern::DynamicDfcQCreate(iDfcQ, KDFCThreadPriority, KDFCThreadName);
+			const TInt dfcThreadPrio = infoBuf().U.iOpen.iDfcThreadPriority;
+ 			r = Kern::DynamicDfcQCreate(iDfcQ, dfcThreadPrio, KDFCThreadName);
 			if (r != KErrNone)
  				return r;
 #ifdef CPU_AFFINITY_ANY
-			NKern::ThreadSetCpuAffinity((NThread*)(iDfcQ->iThread), KCpuAffinityAny);			
+			NKern::ThreadSetCpuAffinity((NThread*)(iDfcQ->iThread), KCpuAffinityAny);
 #endif
- 			}	
+ 			}
 
 		iMemMemPslInfo = DmaTestInfo().iMemMemPslInfo;
 		iCookie = infoBuf().U.iOpen.iId;
--- a/kerneltest/e32test/dma/d_dma.h	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dma/d_dma.h	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -13,7 +13,7 @@
 // Description:
 // e32test\dma\d_dma.h
 // User-side API for LDD used to test DMA framework.
-// 
+//
 //
 
 #ifndef __D_DMA_H__
@@ -52,6 +52,7 @@
 			struct
 				{
 				TUint32 iId;
+				TInt iDfcThreadPriority;
 				TInt iDesCount;
 				TInt iMaxTransferSize;
 				} iOpen;
@@ -113,6 +114,11 @@
 	TPckgBuf<TOpenInfo> infoBuf;
 	infoBuf().iWhat = TOpenInfo::EOpen;
 	infoBuf().U.iOpen.iId = aId;
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+	infoBuf().U.iOpen.iDfcThreadPriority = 11;
+#else
+	infoBuf().U.iOpen.iDfcThreadPriority = 26;
+#endif	// #if defined(DMA_INVERTED_THREAD_PRIORITIES)
 	infoBuf().U.iOpen.iDesCount = aDesCount;
 	infoBuf().U.iOpen.iMaxTransferSize = aMaxTransferSize;
 	return DoCreate(KTestDmaLddName, TestDmaLddVersion(), 0, NULL, &infoBuf, EOwnerThread);
@@ -190,6 +196,7 @@
 	else
 		return ETrue;
 	}
+
 #endif // #ifndef __KERNEL_MODE__
 
 #endif
--- a/kerneltest/e32test/dma/dmasim.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dma/dmasim.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -23,9 +23,9 @@
 
 const char KDmaPanicCat[] = "DMASIM";
 
-const TInt KMaxTransferSize = 0x1FFF;
+const TInt KMaxTransferSize = 0x4000;
 const TInt KMemAlignMask = 3; // memory addresses passed to DMAC must be multiple of 4
-const TInt KBurstSize = 0x800;
+const TInt KBurstSize = KMaxTransferSize;
 
 typedef void (*TPseudoIsr)();
 
@@ -390,19 +390,32 @@
 
 void DmacSim::TickCB(TAny*)
 	{
-	TInt orig = (TInt)__e32_atomic_ior_acq32(&StartStop, EDmaSimInISR);
-	if (orig >= 0)
+	// On the emulator do a transfer for every channel
+	// each tick. This speeds up t_dmasim significantly, since on the
+	// emulator, ticks are less frequent than on real hardware.
+#ifdef __EPOC32__
+	const TInt transfersPerTick = 1;
+#else
+	const TInt transfersPerTick = KChannelCount;
+#endif
+
+	for(TInt i = 0; i < transfersPerTick; i++)
 		{
-		DmacSb::DoTransfer();
-		DmacDb::DoTransfer();
-		DmacSg::DoTransfer();
+		TInt orig = (TInt)__e32_atomic_ior_acq32(&StartStop, EDmaSimInISR);
+		if (orig >= 0)
+			{
+			DmacSb::DoTransfer();
+			DmacDb::DoTransfer();
+			DmacSg::DoTransfer();
+			}
+		orig = (TInt)__e32_atomic_and_rel32(&StartStop, (TUint32)~EDmaSimInISR);
+		if (orig < 0)
+			{
+			__e32_atomic_store_rel32(&StartStop, EDmaSimIdle);
+			return;
+			}
 		}
-	orig = (TInt)__e32_atomic_and_rel32(&StartStop, (TUint32)~EDmaSimInISR);
-	if (orig < 0)
-		{
-		__e32_atomic_store_rel32(&StartStop, EDmaSimIdle);
-		return;
-		}
+
 	TInt r = Timer.Again(KPeriod);
 	if (r == KErrArgument)
 		r = Timer.OneShot(KPeriod);
--- a/kerneltest/e32test/dma/t_dma.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dma/t_dma.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -52,8 +52,12 @@
 #ifdef __DMASIM__
 RTest test(_L("T_DMASIM"));
 #else
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+RTest test(_L("T_DMAINV"));
+#else
 RTest test(_L("T_DMA"));
 #endif
+#endif
 
 //////////////////////////////////////////////////////////////////////////////
 // Mini-framework for running tests either in a single thread or in
@@ -314,7 +318,7 @@
 		if (r == KErrNotSupported)
 			return r;
 		XTEST1(KErrNone == r || KErrInUse == r, r);
-		
+
 		if(KErrInUse == r)
 			{
 			// Channel is in use.
@@ -349,7 +353,11 @@
 	name = _L("TESTER-");
 	name.AppendNum(aIdx);
 	test(iThread.Create(name, ThreadFunction, 0x2000, NULL, this) == KErrNone);
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+	iThread.SetPriority(EPriorityRealTime);
+#else
 	iThread.SetPriority(EPriorityLess);
+#endif	// #if defined(DMA_INVERTED_THREAD_PRIORITIES)
 	iThread.Logon(iStatus);
 	SetActive();
 	iThread.Resume();
@@ -883,12 +891,6 @@
 
 	r = aChannel.Execute(_L8("Q0Q1Q2C"));
 	XTEST1(r == KErrNone, r);
-#ifdef __DMASIM__
-	// At least part of the last destination buffer should be
-	// unchanged if cancel occured before the transfer completed.
-	// Assert only on WINS as real DMACs are too fast.
-	XTEST(! aChannel.CheckBuffer(KDestBuf2, 'C'));
-#endif
 
 	//
 	// Perform another transfer to ensure cancel operation let the
@@ -923,15 +925,28 @@
 	test(aChannel.FragmentCheck(KRequest2, aFragmentCount));
 	// Queue first request (Q0)
 	r = aChannel.Execute(_L8("Q0"));
-	// Wait a second, so next request will be queued on its own
-	// (instead of being appended to the previous one)
-	User::After(1000000);
+	// Wait till Q0 completes before queuing next request
+	// this is to ensure that Q0's link register doesn't
+	// get over-written, which would lead to the test passing
+	// trivially.
+	//
+	// Polling is the only way to achieve this under the
+	// current test interface (since passing in a new
+	// TRequestStatus necessitates re-fragmenting)
+	for(TInt i = 0; i < 100; i++)
+		{
+		if(aChannel.CheckBuffer(KDestBuf0, 'A'))
+			break;
+
+		User::After(10000); // Wait 10 milliseconds
+		}
+	XTEST(aChannel.CheckBuffer(KDestBuf0, 'A'));
+
 	// Queue third request (Q2)
 	r = aChannel.Execute(_L8("Q2"));
 	XTEST1(r == KErrNone, r);
 	User::WaitForRequest(rs2);
 	XTEST1(rs2 == KErrNone, rs2.Int());
-	XTEST(aChannel.CheckBuffer(KDestBuf0, 'A'));
 	// KDestBuf1 should have been left untouched!
 	// If we find all B's in KDestBuf1, that means the last descriptor of the
 	// first request (Q0) wasn't properly unlinked and still points to the Q1
@@ -960,9 +975,15 @@
 		XTEST(aChannel.Execute(_L8("Q0Q1Q2")) == KErrNone);
 		User::WaitForRequest(rs0);
 		XTEST(rs0 != KErrNone);
+		// Request 0 should definitely not succeed, due to the
+		// fault injection. However, depending on the underlying
+		// hardware type, the transfers for the
+		// subsequent requests may or may not complete.
+		// On a double buffered or scatter-gather controller
+		// if the later requests were already programmed into the
+		// second buffer, or linked in to the hardware descriptor chain
+		// they could proceed autonomously.
 		XTEST(! aChannel.CheckBuffer(KDestBuf0, 'A'));
-		XTEST(! aChannel.CheckBuffer(KDestBuf1, 'B'));
-		XTEST(! aChannel.CheckBuffer(KDestBuf2, 'C'));
 		XTEST(aChannel.Execute(_L8("C")) == KErrNone);
 
 		// Transfer again to ensure cancel cleaned-up correctly
@@ -1084,12 +1105,13 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 
 	test.Start(_L("Parsing command-line"));
 	// Default values when run with empty command-line
 	TInt maxfrag = 16; // 5 fragments needed to exercise fully double-buffering state machine
-	TInt maxIter = 3;
+	TInt maxIter = 1;
 	TInt maxchannel = KMaxTInt;
 	TBool crashDbg = EFalse;
 	TInt maxFragSize = 0x4000; //16k
@@ -1102,6 +1124,17 @@
 		User::SetProcessCritical(User::ESystemCritical);
 		}
 
+	RProcess p;
+	RThread t;
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+	// Set the process priority to the maximum value allowed for normal apps.
+	// This will increase the system's interpretation of the thread priority.
+	test(p.SetPriority(EPriorityHigh) == KErrNone);
+	t.SetPriority(EPriorityRealTime);
+#else
+	t.SetPriority(EPriorityLess);
+#endif	// #if defined(DMA_INVERTED_THREAD_PRIORITIES)
+	RDebug::Printf("Process priority:  %d", p.Priority());
 
 	TInt r;
 #if defined(__DMASIM__) && defined(__WINS__)
@@ -1146,12 +1179,6 @@
 		}
 #endif
 
-	// Turn off evil lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-
 	__UHEAP_MARK;
 	__KHEAP_MARK;
 
@@ -1230,7 +1257,9 @@
 	delete Bipper;
 	TheCriticalSection.Close();
 
-	UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, (TAny*)5000, 0);
+	r = UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, (TAny*)5000, 0);
+	test_KErrNone(r);
+
 	__KHEAP_MARKEND;
 	__UHEAP_MARKEND;
 
--- a/kerneltest/e32test/dmav2/d_dma2.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dmav2/d_dma2.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -20,9 +20,8 @@
 #include "d_dma2.h"
 
 _LIT(KClientPanicCat, "D_DMA2");
-_LIT(KDFCThreadName,"D_DMA_DFC_THREAD");
-_LIT(KIsrCbDfcThreadName,"D_DMA_IsrCb_thread");
-const TInt KDFCThreadPriority=26;
+_LIT(KDFCThreadName, "D_DMA_DFC_THREAD");
+_LIT(KIsrCbDfcThreadName, "D_DMA_IsrCb_thread");
 
 class TStopwatch
 	{
@@ -320,7 +319,6 @@
 
 	iClientDataRequest->SetDestPtr2(aDurationMicroSecs);
 
-
 	TInt r = iClientDataRequest->SetStatus(aRequestStatus);
 	if(r != KErrNone)
 		{
@@ -532,12 +530,14 @@
 	{}
 
 // called in thread critical section
-TInt DDmaTestSession::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& /*aVer*/)
+TInt DDmaTestSession::DoCreate(TInt /*aUnit*/, const TDesC8* aInfo, const TVersion& /*aVer*/)
 	{
 	__NK_ASSERT_ALWAYS(iDfcQ == NULL);
 	__NK_ASSERT_ALWAYS(iIsrCallbackDfcQ == NULL);
 
-	TInt r = Kern::DynamicDfcQCreate(iDfcQ, KDFCThreadPriority, KDFCThreadName);
+	const TInt dfcThreadPrio = reinterpret_cast<TInt>(aInfo);
+
+	TInt r = Kern::DynamicDfcQCreate(iDfcQ, dfcThreadPrio, KDFCThreadName);
 	if (r != KErrNone)
 		{
 		Kern::Printf("DDmaTestSession::DoCreate D_DMA_DFC_THREAD returned (%d)\n", r);
@@ -545,7 +545,7 @@
 		}
 	NKern::ThreadSetCpuAffinity((NThread*)(iDfcQ->iThread), KCpuAffinityAny);
 
-	r = Kern::DynamicDfcQCreate(iIsrCallbackDfcQ, KDFCThreadPriority, KIsrCbDfcThreadName);
+	r = Kern::DynamicDfcQCreate(iIsrCallbackDfcQ, dfcThreadPrio, KIsrCbDfcThreadName);
 	if (r != KErrNone)
 		{
 		Kern::Printf("DDmaTestSession::DoCreate D_DMA_IsrCb_thread returned (%d)\n", r);
@@ -556,7 +556,11 @@
 	iClient = &Kern::CurrentThread();
 
 	r = CreateSharedChunk();
-	Kern::Printf("DDmaTestSession::DoCreate CreateSharedChunk returned (%d)\n", r);
+	if (r != KErrNone)
+		{
+		Kern::Printf("DDmaTestSession::DoCreate CreateSharedChunk returned %d", r);
+		}
+
 	return r;
 	}
 
@@ -1431,7 +1435,6 @@
 TInt DDmaTestSession::CreateSharedChunk()
 	{
     // Enter critical section so we can't die and leak the objects we are creating
-    // I.e. the TChunkCleanup and DChunk (Shared Chunk)
     NKern::ThreadEnterCS();
 
     // Create the chunk
@@ -1448,19 +1451,21 @@
     DChunk* chunk;
 	TUint32 mapAttr;
     TInt r = Kern::ChunkCreate(info, chunk, iChunkBase, mapAttr);
-    if(r!=KErrNone)
+    if (r != KErrNone)
         {
         NKern::ThreadLeaveCS();
+		Kern::Printf("DDmaTestSession::CreateSharedChunk ChunkCreate returned %d", r);
         return r;
         }
 
     // Map our device's memory into the chunk (at offset 0)
 	TUint32 physicalAddr;
-	r = Kern::ChunkCommitContiguous(chunk,0,KMaxChunkSize, physicalAddr);
-    if(r!=KErrNone)
+	r = Kern::ChunkCommitContiguous(chunk, 0, KMaxChunkSize, physicalAddr);
+    if (r != KErrNone)
         {
-        // Commit failed so tidy-up...
+        // Commit failed, so tidy-up...
         Kern::ChunkClose(chunk);
+		Kern::Printf("DDmaTestSession::CreateSharedChunk ChunkCommitContiguous returned %d", r);
         }
     else
         {
@@ -1518,6 +1523,7 @@
 TInt DDmaTestSession::FragmentRequest(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, TBool aLegacy)
 	{
 	__KTRACE_OPT(KDMA, Kern::Printf(">FragmentRequest: cookie=0x%08x, legacy=%d", aRequestCookie, aLegacy)); 
+
 	TInt requestIndex = CookieToRequestIndex(aRequestCookie);
 	if(requestIndex < 0)
 		return requestIndex;
@@ -1639,8 +1645,11 @@
 
 TInt DDmaTestFactory::Create(DLogicalChannelBase*& aChannel)
     {
-	aChannel=new DDmaTestSession;
-	Kern::Printf("DDmaTestFactory::Create %d\n", aChannel?KErrNone : KErrNoMemory);
+	aChannel = new DDmaTestSession;
+	if (!aChannel)
+		{
+		Kern::Printf("DDmaTestFactory::Create failed\n");
+		}
 	return aChannel ? KErrNone : KErrNoMemory;
     }
 
--- a/kerneltest/e32test/dmav2/d_dma2.h	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dmav2/d_dma2.h	Wed Oct 20 13:58:28 2010 +0100
@@ -13,7 +13,7 @@
 // Description:
 // e32test\dmav2\d_dma2.h
 // User-side API for LDD used to test DMAv2 framework.
-// 
+//
 //
 
 #ifndef __D_DMA2_H__
@@ -312,7 +312,8 @@
 		{
 		_LIT(KOutput, "TAddressParms: src=0x%08x (%d) dst=0x%08x (%d) count=0x%08x (%d)\0");
 #ifdef __KERNEL_MODE__
-		DmaAppendFormat(aBuf, (const char*)KOutput().Ptr(), iSrcAddr, iSrcAddr, iDstAddr, iDstAddr, iTransferCount, iTransferCount);
+		DmaAppendFormat(aBuf, (const char*)KOutput().Ptr(), iSrcAddr, iSrcAddr,
+						iDstAddr, iDstAddr, iTransferCount, iTransferCount);
 #else
 		aBuf.AppendFormat(KOutput, iSrcAddr, iSrcAddr, iDstAddr, iDstAddr, iTransferCount, iTransferCount);
 #endif
@@ -411,16 +412,16 @@
 #ifndef __KERNEL_MODE__
 	TInt ChannelIsQueueEmpty(TUint aDriverCookie,TBool& aQueueEmpty)
 		{
-		return DoControl(EIsQueueEmpty, reinterpret_cast<TAny*>(aDriverCookie),	&aQueueEmpty);		
+		return DoControl(EIsQueueEmpty, reinterpret_cast<TAny*>(aDriverCookie),	&aQueueEmpty);
 		}
 
 	TInt ChannelIsOpened(TUint aDriverCookie,TBool &aChannelOpen)
 		{
-		return DoControl(EIsOpened, reinterpret_cast<TAny*>(aDriverCookie), &aChannelOpen);		
+		return DoControl(EIsOpened, reinterpret_cast<TAny*>(aDriverCookie), &aChannelOpen);
 		}
 
 	TInt ChannelCancelAll(TUint aDriverCookie)
-		{	
+		{
 		return DoControl(ECancelAllChannel, reinterpret_cast<TAny*>(aDriverCookie));
 		}
 
@@ -436,27 +437,27 @@
 		}
 
 	TInt ChannelClose(TUint aDriverCookie)
-		{	
+		{
 		return DoControl(ECloseChannel, reinterpret_cast<TAny*>(aDriverCookie));
 		}
 
 	TInt ChannelPause(TUint aDriverCookie)
-		{	
+		{
 		return DoControl(EPauseChannel, reinterpret_cast<TAny*>(aDriverCookie));
 		}
-	
+
 	TInt ChannelResume(TUint aDriverCookie)
-		{	
+		{
 		return DoControl(EResumeChannel, reinterpret_cast<TAny*>(aDriverCookie));
 		}
 
 	TInt ChannelLinking(TUint aDriverCookie)
-		{	
+		{
 		return DoControl(ELinkChannel, reinterpret_cast<TAny*>(aDriverCookie));
 		}
 
 	TInt ChannelUnLinking(TUint aDriverCookie)
-		{	
+		{
 		return DoControl(EUnlinkChannel, reinterpret_cast<TAny*>(aDriverCookie));
 		}
 
@@ -473,22 +474,41 @@
 		TPckg<TDmacTestCaps> package(aChannelCaps);
 		return DoControl(EChannelCaps, reinterpret_cast<TAny*>(aDriverCookie), &package);
 		}
-	
+
 	TInt Open()
 		{
-		TInt r = KErrNone;
-		r = DoCreate(KTestDmaLddNameHw,TestDmaLddVersion(), 0, NULL, NULL, EOwnerThread);
-		RDebug::Printf("RDmaSession::Open returned %d", r);
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+		const TInt dfcThreadPriority = 11;
+#else
+		const TInt dfcThreadPriority = 26;
+#endif
+		const TInt r = DoCreate(KTestDmaLddNameHw, TestDmaLddVersion(), 0, NULL,
+								reinterpret_cast<const TDesC8*>(dfcThreadPriority), EOwnerThread);
+		if (r != KErrNone)
+			{
+			RDebug::Printf("RDmaSession::Open(): DoCreate() returned %d", r);
+			}
 		return r;
 		}
 
 	TInt OpenSim()
 		{
-		return DoCreate(KTestDmaLddNameSim,TestDmaLddVersion(), 0, NULL, NULL, EOwnerThread);
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+		const TInt dfcThreadPriority = 11;
+#else
+		const TInt dfcThreadPriority = 26;
+#endif
+		const TInt r = DoCreate(KTestDmaLddNameSim, TestDmaLddVersion(), 0, NULL,
+								reinterpret_cast<const TDesC8*>(dfcThreadPriority), EOwnerThread);
+		if (r != KErrNone)
+			{
+			RDebug::Printf("RDmaSession::OpenSim(): DoCreate() returned %d", r);
+			}
+		return r;
 		}
 
 	TInt RequestCreateOld(TUint aChannelCookie, TUint& aRequestCookie, TUint aMaxTransferSize=0)
-		{	
+		{
 		return DoRequestCreate(aChannelCookie, EFalse, aMaxTransferSize, aRequestCookie);
 		}
 
@@ -499,49 +519,50 @@
 		}
 
 	TInt RequestDestroy(TUint aRequestCookie)
-		{	
+		{
 		return DoControl(ERequestClose, reinterpret_cast<TAny*>(aRequestCookie));
 		}
 
 	TInt RequestFragmentCount(TUint aRequestCookie)
-		{	
+		{
 		return DoControl(EFragmentCount, reinterpret_cast<TAny*>(aRequestCookie));
 		}
 
 	TInt RequestEnableDstElementCounting(TUint aRequestCookie)
-		{					
-		return DoControl(EEnableDstElementCounting, reinterpret_cast<TAny*>(aRequestCookie));		
+		{
+		return DoControl(EEnableDstElementCounting, reinterpret_cast<TAny*>(aRequestCookie));
 		}
 
 	TInt RequestEnableSrcElementCounting(TUint aRequestCookie)
-		{		
+		{
 		return DoControl(EEnableSrcElementCounting, reinterpret_cast<TAny*>(aRequestCookie));
 		}
 
 	TInt RequestDisableDstElementCounting(TUint aRequestCookie)
-		{	
+		{
 		return DoControl(EDisableDstElementCounting, reinterpret_cast<TAny*>(aRequestCookie));
 		}
 
 	TInt RequestDisableSrcElementCounting(TUint aRequestCookie)
-		{	
+		{
 		return DoControl(EDisableSrcElementCounting, reinterpret_cast<TAny*>(aRequestCookie));
 		}
 
 	TInt RequestTotalNumDstElementsTransferred(TUint aRequestCookie)
-		{	
+		{
 		return DoControl(ETotalNumDstElementsTransferred, reinterpret_cast<TAny*>(aRequestCookie));
 		}
 
 	TInt RequestTotalNumSrcElementsTransferred(TUint aRequestCookie)
-		{	
+		{
 		return DoControl(ETotalNumSrcElementsTransferred, reinterpret_cast<TAny*>(aRequestCookie));
 		}
 
 	/**
 	Will fragment a DMA request using the legacy API
 	*/
-	TInt FragmentRequestOld(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, TUint64* aDurationMicroSecs=NULL)
+	TInt FragmentRequestOld(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs,
+							TUint64* aDurationMicroSecs=NULL)
 		{
 		const TFragmentArgs args(aRequestCookie, aTransferArgs, aDurationMicroSecs);
 		TPckgC<TFragmentArgs> package(args);
@@ -551,14 +572,16 @@
 	/**
 	Will fragment a DMA request using the new API
 	*/
-	TInt FragmentRequest(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, TUint64* aDurationMicroSecs=NULL)
+	TInt FragmentRequest(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs,
+						 TUint64* aDurationMicroSecs=NULL)
 		{
 		const TFragmentArgs args(aRequestCookie, aTransferArgs, aDurationMicroSecs);
 		TPckgC<TFragmentArgs> package(args);
 		return DoControl(EFragment, &package);
 		}
 
-	TInt QueueRequest(TUint aRequestCookie, TRequestStatus& aStatus, TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL)
+	TInt QueueRequest(TUint aRequestCookie, TRequestStatus& aStatus, TCallbackRecord* aRecord = NULL,
+					  TUint64* aDurationMicroSecs=NULL)
 		{
 		//These dummy values can accept the writeback from the driver
 		//if the client does not want them.
@@ -569,7 +592,8 @@
 
 		aStatus = KRequestPending;
 
-		TQueueArgs args(aRequestCookie, &aStatus, aRecord ? aRecord : &dummyRec, aDurationMicroSecs ? aDurationMicroSecs : &dummyTime);
+		TQueueArgs args(aRequestCookie, &aStatus, aRecord ? aRecord : &dummyRec,
+						aDurationMicroSecs ? aDurationMicroSecs : &dummyTime);
 		TPckgC<TQueueArgs> package(args);
 		return DoControl(EQueueRequest, &package);
 		}
@@ -577,7 +601,8 @@
 	/**
 	Synchronous version of QueueRequest
 	*/
-	TInt QueueRequest(TUint aRequestCookie, TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL)
+	TInt QueueRequest(TUint aRequestCookie, TCallbackRecord* aRecord = NULL,
+					  TUint64* aDurationMicroSecs=NULL)
 		{
 		TRequestStatus status;
 		TInt r = QueueRequest(aRequestCookie, status, aRecord, aDurationMicroSecs);
@@ -592,7 +617,9 @@
 
 	@pre Isr callback for completion must have been requested at request fragmentation time
 	*/
-	TInt QueueRequestWithRequeue(TUint aRequestCookie, TIsrRequeArgs* aRequeueArgs, TInt aCount, TRequestStatus& aStatus, TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL)
+	TInt QueueRequestWithRequeue(TUint aRequestCookie, TIsrRequeArgs* aRequeueArgs, TInt aCount,
+								 TRequestStatus& aStatus, TCallbackRecord* aRecord = NULL,
+								 TUint64* aDurationMicroSecs=NULL)
 		{
 		//These dummy values can accept the writeback from the driver
 		//if the client does not want them.
@@ -603,7 +630,9 @@
 
 		aStatus = KRequestPending;
 
-		TQueueArgsWithReque args(aRequeueArgs, aCount, aRequestCookie, &aStatus, aRecord ? aRecord : &dummyRec, aDurationMicroSecs ? aDurationMicroSecs : &dummyTime);
+		TQueueArgsWithReque args(aRequeueArgs, aCount, aRequestCookie,
+								 &aStatus, aRecord ? aRecord : &dummyRec,
+								 aDurationMicroSecs ? aDurationMicroSecs : &dummyTime);
 		TPckgC<TQueueArgsWithReque> package(args);
 		return DoControl(EQueueRequestWithReque, &package);
 		}
@@ -611,10 +640,12 @@
 	/**
 	Synchronous version of QueueRequestWithRequeue
 	*/
-	TInt QueueRequestWithRequeue(TUint aRequestCookie, TIsrRequeArgs* aRequeueArgs, TInt aCount, TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL)
+	TInt QueueRequestWithRequeue(TUint aRequestCookie, TIsrRequeArgs* aRequeueArgs, TInt aCount,
+								 TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL)
 		{
 		TRequestStatus status;
-		TInt r = QueueRequestWithRequeue(aRequestCookie, aRequeueArgs, aCount, status, aRecord, aDurationMicroSecs);
+		TInt r = QueueRequestWithRequeue(aRequestCookie, aRequeueArgs, aCount, status, aRecord,
+										 aDurationMicroSecs);
 		User::WaitForRequest(status);
 		return r;
 		}
@@ -638,13 +669,14 @@
 
 private:
 
-	TInt DoRequestCreate(TUint aChannelCookie, TBool aNewStyle, TUint aMaxTransferSize, TUint& aRequestCookie)
+	TInt DoRequestCreate(TUint aChannelCookie, TBool aNewStyle, TUint aMaxTransferSize,
+						 TUint& aRequestCookie)
 		{
 		TRequestCreateArgs args(aChannelCookie, aNewStyle, aMaxTransferSize);
 		TPckgC<TRequestCreateArgs> package(args);
 		return DoControl(ERequestOpen, &package, &aRequestCookie);
 		}
-	
+
 	struct TRequestCreateArgs
 		{
 		TRequestCreateArgs(TUint aChannelCookie, TBool aNewStyle, TUint aMaxFragmentSize)
@@ -661,8 +693,10 @@
 		TFragmentArgs()
 			:iRequestCookie(0), iTransferArgs(), iDurationMicroSecs(NULL)
 			{}
-		TFragmentArgs(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, TUint64* aDurationMicroSecs = NULL)
-			:iRequestCookie(aRequestCookie), iTransferArgs(aTransferArgs), iDurationMicroSecs(aDurationMicroSecs)
+		TFragmentArgs(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs,
+					  TUint64* aDurationMicroSecs = NULL)
+			:iRequestCookie(aRequestCookie), iTransferArgs(aTransferArgs),
+			 iDurationMicroSecs(aDurationMicroSecs)
 			{}
 
 		const TUint iRequestCookie;
@@ -672,8 +706,10 @@
 
 	struct TQueueArgs
 		{
-		TQueueArgs(TUint aRequestCookie=0, TRequestStatus* aStatus=NULL, TCallbackRecord* aCallbackRecord=NULL, TUint64* aDurationMicroSecs=NULL)
-			:iRequestCookie(aRequestCookie), iStatus(aStatus), iCallbackRecord(aCallbackRecord), iDurationMicroSecs(aDurationMicroSecs)
+		TQueueArgs(TUint aRequestCookie=0, TRequestStatus* aStatus=NULL,
+				   TCallbackRecord* aCallbackRecord=NULL, TUint64* aDurationMicroSecs=NULL)
+			:iRequestCookie(aRequestCookie), iStatus(aStatus), iCallbackRecord(aCallbackRecord),
+			 iDurationMicroSecs(aDurationMicroSecs)
 			{}
 		TUint iRequestCookie;
 		TRequestStatus* iStatus;
@@ -688,8 +724,10 @@
 	struct TQueueArgsWithReque : public TQueueArgs
 		{
 		TQueueArgsWithReque(TIsrRequeArgs* aRequeueArgs=NULL, TInt aCount=0,
-				TUint aRequestCookie=0, TRequestStatus* aStatus=NULL, TCallbackRecord* aCallbackRecord=NULL, TUint64* aDurationMicroSecs=NULL)
-			:TQueueArgs(aRequestCookie, aStatus, aCallbackRecord, aDurationMicroSecs), iRequeSet(aRequeueArgs, aCount)
+							TUint aRequestCookie=0, TRequestStatus* aStatus=NULL,
+							TCallbackRecord* aCallbackRecord=NULL, TUint64* aDurationMicroSecs=NULL)
+			:TQueueArgs(aRequestCookie, aStatus, aCallbackRecord, aDurationMicroSecs),
+			 iRequeSet(aRequeueArgs, aCount)
 			{
 			}
 
@@ -727,4 +765,5 @@
 		ETotalNumSrcElementsTransferred,
 		};
 	};
+
 #endif // __D_DMA2_H__
--- a/kerneltest/e32test/dmav2/self_test.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dmav2/self_test.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -86,7 +86,7 @@
 	test.Next(_L("Open channel"));
 	TUint channelCookie=0;
 	r = session.ChannelOpen(testChannel, channelCookie);
-	test.Printf(_L("cookie recived = 0x%08x\n"), channelCookie);
+	test.Printf(_L("cookie received = 0x%08x\n"), channelCookie);
 	test_KErrNone(r);
 
 	test.Next(_L("Get Channel caps"));
@@ -134,7 +134,7 @@
 	test.Next(_L("Create Dma request - max fragment size 32K"));
 	TUint reqCookie=0;
 	r = session.RequestCreateOld(channelCookie, reqCookie, 32 * KKilo);
-	test.Printf(_L("cookie recived = 0x%08x\n"), reqCookie);
+	test.Printf(_L("cookie received = 0x%08x\n"), reqCookie);
 	test_KErrNone(r);
 
 	if(newPil)
@@ -142,7 +142,7 @@
 		test.Next(_L("Create Dma request (with new-style callback)"));
 		TUint reqCookieNewStyle=0;
 		r = session.RequestCreate(channelCookie, reqCookieNewStyle);
-		test.Printf(_L("cookie recived = 0x%08x\n"), reqCookieNewStyle );
+		test.Printf(_L("cookie received = 0x%08x\n"), reqCookieNewStyle );
 		test_KErrNone(r);
 
 		if(!aSimulatedDmac)
@@ -314,7 +314,7 @@
 // is horribly confusing. The _L macro will make the
 // *first* string token wide, but not the next two.
 // Therefore these must be made wide or compilier
-// will complain about concatination of narrow and wide string
+// will complain about concatenation of narrow and wide string
 // literals
 #define CAP_TEST(CAP, CAPSET, EXPCT)\
 	{\
--- a/kerneltest/e32test/dmav2/t_dma2.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dmav2/t_dma2.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -572,6 +572,13 @@
 
 void CDmaBmFragmentation::RunTest()
 	{
+	// This HAL call is here to make sure the chunk that was used for the
+	// previous test iteration has been freed by the time the next one gets
+	// created. (This was put in after T_DMA2INV OOM failures during the
+	// Fragmentation Benchmark tests.)
+	const TInt r = UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, (TAny*)5000, 0);
+	TEST_ASSERT(r == KErrNone);
+
 	OpenDmaSession();
 
 	OpenChannel();
@@ -1048,9 +1055,11 @@
 		{
 		RDebug::Printf("Open/Close test sequence failed"); 
 		}
-			
+
 	return iOpenCloseResult;
 	}
+
+
 //////////////////////////////////////////////////////////////////////
 // CDmaBmTransfer
 //////////////////////////////////////////////////////////////////////
@@ -2240,7 +2249,12 @@
 	return EFalse;
 	}
 
-static RTest test(_L("DMAv2 test"));
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+static RTest test(_L("T_DMA2INV"));
+#else
+static RTest test(_L("T_DMA2"));
+#endif
+
 
 //////////////////////////////////////////////////////////////////////
 // TTestRunner
@@ -2347,10 +2361,11 @@
 			default:
 				TEST_FAULT;
 				}
-			//Depending on the value of iConcurrentTest the test runner will either block until the thread has completed or
-			//alternatively run the current test case on the next channel:
-
-			//if the test case has been run on all channels it will then  wait for all threads to complete.
+			//Depending on the value of iConcurrentTest the test runner will
+			//either block until the thread has completed or alternatively run
+			//the current test case on the next channel: if the test case has
+			//been run on all channels it will then wait for all threads to
+			//complete.
 			}
 
 		// Run the tests which should happen concurrently
@@ -2699,14 +2714,14 @@
 		test.Start(_L("Open channel"));
 		TUint channelCookie=0;
 		r = session.ChannelOpen(pslId, channelCookie);
-		test.Printf(_L("Open channel %d, cookie recived = 0x%08x\n"), pslId, channelCookie);
+		test.Printf(_L("Open channel %d, cookie received = 0x%08x\n"), pslId, channelCookie);
 		test_KErrNone(r);
 
 		test.Next(_L("Create Dma request"));
 
 		TUint reqCookie=0;
 		r = session.RequestCreate(channelCookie, reqCookie);
-		test.Printf(_L("cookie recived = 0x%08x\n"), reqCookie );
+		test.Printf(_L("cookie received = 0x%08x\n"), reqCookie );
 		test_KErrNone(r);
 
 		if(doFrag)
@@ -2736,6 +2751,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	__UHEAP_MARK;
 	test.Title();
 
@@ -2762,6 +2778,19 @@
 		PrintUsage();
 		User::Leave(-2);	// nothing to do!
 		}
+
+	RProcess p;
+	RThread t;
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+	// Set the process priority to the maximum value allowed for normal apps.
+	// This will increase the system's interpretation of the thread priority.
+	test(p.SetPriority(EPriorityHigh) == KErrNone);
+	t.SetPriority(EPriorityRealTime);
+#else
+	t.SetPriority(EPriorityLess);
+#endif	// #if defined(DMA_INVERTED_THREAD_PRIORITIES)
+	RDebug::Printf("Process priority:  %d", p.Priority());
+
 	test.Start(_L("Loading test LDD"));
 	//load either the new test ldd, d_dma2.ldd,
 	//or d_dma2_compat.ldd - an ldd linked against
@@ -2808,12 +2837,6 @@
 		test(EFalse);
 		}
 
-	// Turn off evil lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	RTest::CloseHandleAndWaitForDestruction(l);
-
 	__KHEAP_MARK;
 
 	if (gSelfTest) //Run self tests if specified on command line
--- a/kerneltest/e32test/dmav2/test_cases.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dmav2/test_cases.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -402,7 +402,7 @@
 namespace Multipart
 	{
 	// need long transfer, to try and force adjacent
-	// requests to be concatinated
+	// requests to be concatenated
 	const TInt size = 2 * KMega;
 	const TDmaTransferArgs transferArgArray[] = {
 		TDmaTransferArgs(0, size, size, KDmaMemAddr),
@@ -416,7 +416,7 @@
 		};
 
 	CMultiTransferTest multipart =
-		CMultiTransferTest(_L("Sg request concatination"), 1, transferArgArray, expected, ARRAY_LENGTH(transferArgArray))
+		CMultiTransferTest(_L("Sg request concatenation"), 1, transferArgArray, expected, ARRAY_LENGTH(transferArgArray))
 			.SetPreTransferTest(&KPreTransferIncrBytes)
 			.SetPostTransferTest(&KCompareSrcDst);
 
--- a/kerneltest/e32test/dmav2/test_thread.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/dmav2/test_thread.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -75,7 +75,11 @@
 		RDebug::Printf("RThread::Create failed, code=%d", r);
 		User::Panic(KPanicCat, EThreadCreateFailed);
 		}
-
+#if defined(DMA_INVERTED_THREAD_PRIORITIES)
+	iThread.SetPriority(EPriorityRealTime);
+#else
+	iThread.SetPriority(EPriorityLess);
+#endif	// #if defined(DMA_INVERTED_THREAD_PRIORITIES)
 	iThread.Logon(iLogonStatus);
 	__ASSERT_ALWAYS(iLogonStatus == KRequestPending, User::Panic(_L("TTestThread"),0));
 
--- a/kerneltest/e32test/emi/t_emi.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/emi/t_emi.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1003,6 +1003,7 @@
 
 GLDEF_C TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	TInt r;
 
 	test.Title();
--- a/kerneltest/e32test/emul/t_guiconfig.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/emul/t_guiconfig.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -143,6 +143,7 @@
 // Test LDD static data
 //
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	test.Start(_L("Test emulator GUI configuration API"));
 
--- a/kerneltest/e32test/group/bld.inf	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/group/bld.inf	Wed Oct 20 13:58:28 2010 +0100
@@ -754,6 +754,7 @@
 t_prop_define2  support
 t_prop_define3  support
 t_stress_property   support
+t_propclose
 
 // /E32TEST/REALTIME tests
 t_frag      support
@@ -915,9 +916,11 @@
 t_context
 #endif
 
-// /E32TEST/DMA tests
+// DMA tests
 t_dma       // user-side test harness for real DMA framework
-t_dma2       // user-side test harness for DMAv2 framework
+t_dma2      // user-side test harness for DMAv2 framework
+t_dmainv    // T_DMA with inverted thread priorities
+t_dma2inv   // T_DMA2 with inverted thread priorities
 
 // Example RTOS personality
 ../personality/example/t_expers support
--- a/kerneltest/e32test/group/t_ctrap.mmp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/group/t_ctrap.mmp	Wed Oct 20 13:58:28 2010 +0100
@@ -28,3 +28,5 @@
 VENDORID 0x70000001
 
 SMPSAFE
+
+epocstacksize        0x4000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/group/t_dma2inv.mmp	Wed Oct 20 13:58:28 2010 +0100
@@ -0,0 +1,37 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: Creates a copy of T_DMA2 which uses 'inverted' (from the more
+// common case) thread priorities. With DMA_INVERTED_THREAD_PRIORITIES defined
+// the priority of the DMA test client threads will be higher than that of the
+// corresponding channel DFC queue threads. This test case can help uncover
+// wrong assumptions about relative thread priorities in DMA PIL & PSL code,
+// both in uni-core and SMP implementations.
+//
+
+TARGET         t_dma2inv.exe
+TARGETTYPE     EXE
+SOURCEPATH	../dmav2
+SOURCE         t_dma2.cpp test_cases.cpp self_test.cpp  d_dma2_cmn.cpp
+SOURCE		   test_thread.cpp
+SOURCEPATH	../../../kernel/eka/drivers/dma
+SOURCE		dma2_shared.cpp
+LIBRARY        euser.lib
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+MACRO DMA_INVERTED_THREAD_PRIORITIES
+
+CAPABILITY	NONE
+
+VENDORID 0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/group/t_dmainv.mmp	Wed Oct 20 13:58:28 2010 +0100
@@ -0,0 +1,34 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description: Creates a copy of T_DMA which uses 'inverted' (from the more
+// common case) thread priorities. With DMA_INVERTED_THREAD_PRIORITIES defined
+// the priority of the DMA test client threads will be higher than that of the
+// corresponding channel DFC queue threads. This test case can help uncover
+// wrong assumptions about relative thread priorities in DMA PIL & PSL code,
+// both in uni-core and SMP implementations.
+//
+
+TARGET         t_dmainv.exe
+TARGETTYPE     EXE
+SOURCEPATH	   ../dma
+SOURCE         t_dma.cpp
+LIBRARY        euser.lib
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+MACRO DMA_INVERTED_THREAD_PRIORITIES
+
+CAPABILITY NONE
+
+VENDORID 0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/group/t_propclose.mmp	Wed Oct 20 13:58:28 2010 +0100
@@ -0,0 +1,32 @@
+// Copyright (c) 2010-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32test/group/t_propclose.mmp
+// 
+//
+
+TARGET			t_propclose.exe
+TARGETTYPE		EXE
+SOURCEPATH		../property
+SOURCE			t_propclose.cpp
+LIBRARY			euser.lib
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+
+capability		all
+
+VENDORID		0x70000001
+UID				0x00000000 0xbaadbeef
+SMPSAFE
+
+library efsrv.lib 
--- a/kerneltest/e32test/hcr/t_hcr.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/hcr/t_hcr.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -3272,6 +3272,7 @@
 
 GLDEF_C TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	__UHEAP_MARK;
 
 	test.Title();
--- a/kerneltest/e32test/heap/t_fail.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/heap/t_fail.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -250,14 +250,6 @@
 	__RHEAP_RESET(rHeap);
 	__RHEAP_MARK(rHeap);
 
-
-	// Prepare for __KHEAP tests by:
-	// Turning off lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-
 	// Loading the kernel heap test driver
 	test.Next(_L("Load/open d_kheap test driver"));
 	TInt r = User::LoadLogicalDevice(KHeapTestDriverName);
@@ -653,7 +645,8 @@
 //
 // __KHEAP_SETFAIL etc. not available in release mode, so don't test
 //
-	{	 
+	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 	test.Title();
 	test.Start(_L("No tests in release mode"));
--- a/kerneltest/e32test/heap/t_heap2.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/heap/t_heap2.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -567,6 +567,7 @@
 	
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	__KHEAP_MARK;
 	test.Start(_L("Testing heaps"));
--- a/kerneltest/e32test/heap/t_heapstress.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/heap/t_heapstress.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1198,6 +1198,7 @@
     
 TInt E32Main()
     {
+    COMPLETE_POST_BOOT_SYSTEM_TASKS();
     test.Title();
     __KHEAP_MARK;
     test.Start(_L("Testing heaps"));
--- a/kerneltest/e32test/heap/t_kheap.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/heap/t_kheap.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -55,7 +55,6 @@
 #include "d_kheap.h"
 
 RTest test(_L("T_KHEAP"));
-RLoader LoaderSession;
 
 #ifdef _DEBUG
 _LIT(KTestLdd0FileName, "D_LDD.LDD");
@@ -194,7 +193,6 @@
 			test(0);
 		}
 	TInt r = User::LoadLogicalDevice(*fileName);
-	test_KErrNone(LoaderSession.CancelLazyDllUnload());	// make sure transient loader session has been destroyed
 	if (r==KErrNone)
 		{
 		r = User::FreeLogicalDevice(*objName);
@@ -420,6 +418,7 @@
 // Test kernel alloc heaven with all out of memory possibilities
 //
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 /*	Objects
  *	Thread	       tested here
@@ -455,11 +454,6 @@
 
 	// Keep a session to the loader
 	TInt r;
-	r = LoaderSession.Connect();
-	test_KErrNone(r);
-
-	// Turn off lazy dll unloading
-	test_KErrNone(LoaderSession.CancelLazyDllUnload());
 
 	if (TestChunk(KLargeChunk) == KErrNone)
 		{
@@ -562,7 +556,6 @@
 	test.Next(_L("Close/unload d_kheap test driver"));
 	KHeapDevice.Close();
 	User::FreeLogicalDevice(KHeapTestDriverName);
-	LoaderSession.Close();
 	test.End();
 	return 0;
 	}
@@ -572,6 +565,7 @@
 // _KHEAP_SETFAIL etc. not available in release mode, so don't test
 //
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 	test.Title();
 	test.Start(_L("No tests in release mode"));
--- a/kerneltest/e32test/iic/t_iic.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/iic/t_iic.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1637,17 +1637,12 @@
 // Main
 //
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	gTest.Title();
 	gTest.Start(_L("Test IIC API\n"));
 
 	TInt r = KErrNone;
 
-    // Turn off lazy dll unloading
-    RLoader l;
-    gTest(l.Connect()==KErrNone);
-    gTest(l.CancelLazyDllUnload()==KErrNone);
-    l.Close();
-
 #ifdef IIC_SIMULATED_PSL
 	gTest.Next(_L("Start the IIC with controller test\n"));
 	aStandAloneChan = 0;
--- a/kerneltest/e32test/misc/t_cputime.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/misc/t_cputime.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -33,9 +33,10 @@
 _LIT(KUp, "up");
 _LIT(KDown, "down");
 
-const TInt KLongWait  = 3000000;  // 3 seconds
-const TInt KShortWait =  100000;  // 0.1 seconds
-const TInt KTolerance =    1000;  // 1 ms
+const TInt KLongWait			= 3000000;  // 3 seconds
+const TInt KShortWait			=  100000;  // 0.1 seconds
+const TInt64 KMaxStartupTime	=    1000;  // 1 ms
+const TInt64 KMaxOverheadPerMil	=      25;	// 2.5%
 const TInt numCpus = UserSvr::HalFunction(EHalGroupKernel, EKernelHalNumLogicalCpus, 0, 0);
 
 #define FailIfError(EXPR) \
@@ -67,7 +68,7 @@
 TInt SetCpuAffinity(TInt aCore)
     {
     TInt r = UserSvr::HalFunction(EHalGroupKernel, EKernelHalLockThreadToCpu, (TAny *)aCore, 0);
-    test(r==KErrNone);  
+    test(r == KErrNone);  
     return r;
     }
 
@@ -184,7 +185,7 @@
 		TRequestStatus status;
 		thread.Logon(status);
 		User::WaitForRequest(status);
-		test(status == KErrNone);
+		test(status.Int() == KErrNone);
 		CLOSE_AND_WAIT(thread);
 		
 		(threadParam.iSem).Close();
@@ -219,12 +220,12 @@
 
 	RThread thread;
 	RUndertaker u;
+	TRequestStatus s;
 	TInt h;
-	TRequestStatus s;
 	FailIfError(thread.Create(_L("Thread"), ThreadFunction, 1024, NULL, &threadParam));
 	thread.SetPriority(EPriorityLess);
 	FailIfError(u.Create());
-	FailIfError(u.Logon(s,h));
+	FailIfError(u.Logon(s, h));
 	test(s==KRequestPending);
 
 	TTimeIntervalMicroSeconds time, time2;
@@ -232,59 +233,81 @@
 
 	// Test cpu time is initially zero
 	FailIfError(thread.GetCpuTime(time));
-	test(time == 0);
+	us = time.Int64();
+	test(us == 0);
+
+	// Resume the thread, and sleep long enough for it to wait-on-semaphore
+	thread.Resume();
+	User::After(KLongWait);
+	FailIfError(thread.GetCpuTime(time));
+	us = time.Int64();
+	test.Printf(_L("Time %Ldus\n"), us);
+	test(us < KMaxStartupTime);							// wait should happen in less than 1ms
 
 	// Test cpu time is not increased while thread is waiting on semaphore
-	thread.Resume();
-	User::After(KShortWait);
+	User::After(KLongWait);
 	FailIfError(thread.GetCpuTime(time2));
 	us = time2.Int64();
-	test.Printf(_L("Time %dus\n"), us);
-	test(us < KTolerance); // wait should happen in less than 1ms
+	test.Printf(_L("Time %Ldus\n"), us);
+	test(time2 == time);
 
-	// Test cpu time increases when thread allowed to run
-	// We want to allow 2% tolerance for the thread's CPU time, as there could be
-	// something else running on the system during that time which would result lower CPU time than the
-	// actual KShortPeriod or KLongPeriod wait time.
-	// Also User::After(t) might return within the range of <t, t + 1000000/64 + 2*NanoKarnelTickPeriod>.
-	// Given all that - we expect that the the cpu time should be within the range of:
-	// <t - 0.02*t, t + 15625 + 2*NanoKernelTickPeriod>
-	// or <0.98*t, t + 15625 + 2*NanoKernelTickPeriod>
-	TInt user_after_tolerance = 0;
-	HAL::Get(HAL::ENanoTickPeriod, user_after_tolerance);
-	user_after_tolerance += user_after_tolerance + 15625;
+	// Test cpu time increases when thread allowed to run.
+	//
+	// We want to allow some tolerance for the thread's CPU time, as there could
+	// be other processes running on the system, which would result in lower CPU
+	// time than the actual KShortPeriod or KLongPeriod wait time. We try to
+	// minimise this by making this process as a whole High priority, but it
+	// will still be lower than the WindowServer or the FileServer (but we hope
+	// they won't be active during this test).
+	//
+	// Also interrupts and other overheads may take some of the thread's time.
+	//
+	// Also User::After(t) might return late, by up to one Symbian OS tick (64Hz)
+	// plus twice the NanoKernelTickPeriod
+	// 
+	// Given all that, we expect that the the CPU time should be in the range:
+	//
+	// ( WaitTime*(100-MaxOverhead)% ) <= CPUTime <= ( WaitTime+(1/Hz)+2*NanoKernelTickPeriod )
 
-	(threadParam.iSem).Signal();
-	User::After(KShortWait);
-	FailIfError(thread.GetCpuTime(time));
-	us = time.Int64() - time2.Int64();
-	test.Printf(_L("Time %dus\n"), us);
-	test(100*us >= 98*KShortWait); // left limit
-	test(us - KShortWait <= user_after_tolerance); // right limit
+	TInt nanoTick = 0;
+	HAL::Get(HAL::ENanoTickPeriod, nanoTick);
+	TInt64 maxSleepOverrun = 2*nanoTick + (1000000/64);					// microseconds
+	TInt64 minCpuTime;
+
+	(threadParam.iSem).Signal();										// make thread runnable
+
+	User::After(KShortWait);											// yield CPU for a while
+	FailIfError(thread.GetCpuTime(time2));
+	us = time2.Int64() - time.Int64();
+	test.Printf(_L("Time %Ldus\n"), us);
+	minCpuTime = KShortWait*(1000-KMaxOverheadPerMil)/1000;
+	test(us >= minCpuTime);
+	test(us <= KShortWait+maxSleepOverrun);
 
 	FailIfError(thread.GetCpuTime(time));
-	User::After(KLongWait);
+	User::After(KLongWait);												// yield CPU for a while
 	FailIfError(thread.GetCpuTime(time2));
 	us = time2.Int64() - time.Int64();
 	test.Printf(_L("Time %dus\n"), us);
-	test(100*us >= 98*KLongWait); // left limit
-	test(us - KLongWait <= user_after_tolerance); // right limit
+	minCpuTime = KLongWait*(1000-KMaxOverheadPerMil)/1000;
+	test(us >= minCpuTime);
+	test(us <= KLongWait+maxSleepOverrun);
 
 	// Test not increased while suspended
 	thread.Suspend();
 	FailIfError(thread.GetCpuTime(time));
-	User::After(KShortWait);
+	User::After(KLongWait);
 	FailIfError(thread.GetCpuTime(time2));
-	test(time == time2);
+	test(time2 == time);
 	thread.Resume();
 
 	// Test not increased while dead
 	thread.Kill(KErrNone);
 	User::WaitForRequest(s);	// wait on undertaker since that completes in supervisor thread
 	FailIfError(thread.GetCpuTime(time));
-	User::After(KShortWait);
+	User::After(KLongWait);
 	FailIfError(thread.GetCpuTime(time2));
-	test(time == time2);
+	test(time2 == time);
 
 	RThread t;
 	t.SetHandle(h);
@@ -312,6 +335,7 @@
 	if (numCpus > 1)
 		{
 		test.Printf(_L("** SMP system detected - not testing time shared between threads until load balancing optimized **\n"));
+		test.End();
 		return ETrue;
 		}
 
@@ -371,7 +395,7 @@
 				TRequestStatus status;
 				threads[k].Logon(status);
 				User::WaitForRequest(status);
-				test(status == KErrNone);
+				test(status.Int() == KErrNone);
 				CLOSE_AND_WAIT(threads[k]);
 				}
 			}
@@ -452,6 +476,15 @@
 	TestFastCounter();
 	if (GetCpuTimeIsSupported())
 		{
+		// This process (and this thread) should have priority
+		// over pretty much everything else in the system; test
+		// threads will have slightly lower relative priorities,
+		// but still higher than any other nonsystem tasks ...
+		RProcess thisProcess;
+		RThread thisThread;
+		thisProcess.SetPriority(EPriorityHigh);
+		thisThread.SetPriority(EPriorityMore);
+
 		EnsureSystemIdle();
 		TestThreadCpuTime();
 		TestThreadCpuTime2();
@@ -462,3 +495,4 @@
 	test.End();
 	return 0;
 	}
+
--- a/kerneltest/e32test/misc/t_svrstress.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/misc/t_svrstress.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -689,6 +689,7 @@
 
 GLDEF_C TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	TInt i;
 
 	test.Title();
--- a/kerneltest/e32test/mmu/t_chunk.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/mmu/t_chunk.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1382,6 +1382,7 @@
 //	Test RChunk class
 //
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	if (!HaveVirtMem())
 		{
@@ -1390,12 +1391,6 @@
 		}
 	testInitialise();
 
-	// Turn off lazy dll unloading so the kernel heap checking isn't affected.
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-
 	_LIT(KExtended,"extended");
 
 	if (IsInCommandLine(KExtended))
--- a/kerneltest/e32test/mmu/t_dchunk.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/mmu/t_dchunk.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -27,8 +27,9 @@
 //
 //	Test RChunk class
 //
-	{	
- 
+	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
+
 	test.Title();
 	test.Start(_L("Test double-ended chunks"));
 	__KHEAP_MARK;
--- a/kerneltest/e32test/mmu/t_demandpaging.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/mmu/t_demandpaging.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1447,6 +1447,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	
 	test_KErrNone(UserSvr::HalFunction(EHalGroupKernel,EKernelHalPageSizeInBytes,&PageSize,0));
--- a/kerneltest/e32test/mmu/t_pin.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/mmu/t_pin.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -808,6 +808,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	test.Start(_L("Test kernel pinning APIs"));
 
--- a/kerneltest/e32test/mmu/t_shadow.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/mmu/t_shadow.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -484,6 +484,7 @@
 // Test ROM shadowing
 //
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	
 	if (!HaveMMU())
@@ -494,11 +495,6 @@
 #ifdef __WINS__
 	test.Printf(_L("Test not valid in WINS\n"));
 #else
-	// Turn off lazy dll unloading
-	RLoader l;
-	test_KErrNone(l.Connect());
-	test_KErrNone(l.CancelLazyDllUnload());
-	l.Close();
 
 	test.Start(_L("Testing ROM shadowing"));
 	Initialise();
--- a/kerneltest/e32test/mmu/t_sharedchunk.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/mmu/t_sharedchunk.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1320,17 +1320,12 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	// Running as slave?
 	TInt slaveCommand;
 	if(User::GetTIntParameter(1,slaveCommand)==KErrNone)
 		return SlaveCommand((TSlaveCommand)slaveCommand);
 
-// Turn off lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-
 	test.Title();
 
 	MemModelAttributes=UserSvr::HalFunction(EHalGroupKernel, EKernelHalMemModelInfo, NULL, NULL);
--- a/kerneltest/e32test/mmu/t_sharedio.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/mmu/t_sharedio.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -381,6 +381,7 @@
 
 GLDEF_C TInt E32Main()
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	TBuf16<512> cmd;
 	User::CommandLine(cmd);
 	if(cmd.Length() && TChar(cmd[0]).IsDigit())
@@ -401,12 +402,6 @@
 	TUint mm=MemModelAttributes&EMemModelTypeMask;
 	PhysicalCommitSupported = mm!=EMemModelTypeDirect && mm!=EMemModelTypeEmul;
 
-// Turn off lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-
 	test.Title();
 
 #if defined(__FIXED__) || defined(__SECOND_FIXED__) || defined(__MOVING_FIXED__)
--- a/kerneltest/e32test/mmu/t_shbuf.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/mmu/t_shbuf.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -3431,6 +3431,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	__UHEAP_MARK;
 
 	// Parse command line for slave processes
--- a/kerneltest/e32test/multimedia/t_sound2.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/multimedia/t_sound2.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1998-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -2371,6 +2371,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 //	User::SetDebugMask(0x10,1); // Enable KSOUND1
 
 	__UHEAP_MARK;
--- a/kerneltest/e32test/multimedia/t_sound_api.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/multimedia/t_sound_api.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1295,6 +1295,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	TInt r;
 
 	__UHEAP_MARK;
--- a/kerneltest/e32test/multimedia/t_soundmchan.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/multimedia/t_soundmchan.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -118,6 +118,7 @@
 GLDEF_C TInt E32Main()
 
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	__UHEAP_MARK;
 
 	Test.Title();
--- a/kerneltest/e32test/multimedia/t_soundwav.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/multimedia/t_soundwav.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -778,6 +778,7 @@
 	
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	TInt r;
 
 	__UHEAP_MARK;
--- a/kerneltest/e32test/pccd/t_atadrv.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/pccd/t_atadrv.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -191,6 +191,7 @@
 
 GLDEF_C TInt E32Main()
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	TInt i;
 	TBuf<64> b;
 
--- a/kerneltest/e32test/prime/t_rwlock.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/prime/t_rwlock.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -604,6 +604,7 @@
 
 TInt E32Main()
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	Test.Title();
 	Test.Start(_L("RReadWriteLock Testing"));
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/property/t_propclose.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -0,0 +1,191 @@
+// Copyright (c) 2010-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32test\property\t_propclose
+//This test case was written to exercise the use-case 
+//before DPropertyRef::Close() was introduced in sproperty.cpp
+//Kernel used to crash when a Close() was issued on a property handle by some thread
+//when other thread had issued a Cancel() on it.
+//
+
+#define __E32TEST_EXTENSION__
+#include <e32test.h>
+#include <e32property.h>
+
+RTest test(_L("T_PROPCLOSE"));
+
+const TInt32 KUidTestPropertyCategoryValue = 0xbaadbeef;
+const TUid KUidTestPropertyCategory = {KUidTestPropertyCategoryValue};
+const TUint KUidTestPropertyKey = 0xfeedfaceu;
+const TInt KHeapSize=0x200;
+
+#define TEST_RUNS 1000
+
+class CPropertyTest
+	{
+public:
+	CPropertyTest();
+	~CPropertyTest();
+
+	TInt DefineProperty();
+
+	TInt CreateThreadOneAndResume();
+	TInt CreateThreadTwoAndResume();
+	void CloseAndWait();
+
+	static TInt ThreadFuncOne(TAny* aThreadOnePtr);
+	TInt RunThreadFuncOne();
+
+	static TInt ThreadFuncTwo(TAny* aThreadTwoPtr);
+	TInt RunThreadFuncTwo();
+
+private:	
+	RProperty iP;
+	RTest iTest;
+
+	RThread iThreadOne;
+	TRequestStatus iThreadOneStatus;
+
+	RThread iThreadTwo;
+	TRequestStatus iThreadTwoStatus;
+
+	TInt iLoopCount;
+	};
+
+
+CPropertyTest::CPropertyTest():iTest(_L("PropertyClose Test"))
+	{
+	iLoopCount=0;
+	}
+
+
+CPropertyTest::~CPropertyTest()
+	{
+	iTest.End();
+	iTest.Close();	
+	}
+
+
+TInt CPropertyTest::DefineProperty()
+	{
+	iTest.Title();
+	iTest.Start(_L("Start PropertyClose Test"));
+	iTest.Next(_L("Define Property"));
+	TInt r = RProperty::Define(KUidTestPropertyCategory, KUidTestPropertyKey, RProperty::EInt);
+	test(r==KErrAlreadyExists || r==KErrNone);
+	return r;
+	}
+
+TInt CPropertyTest::CreateThreadOneAndResume()
+	{
+	TInt r=KErrNone;
+
+	r = iThreadOne.Create(KNullDesC,ThreadFuncOne,KDefaultStackSize,KHeapSize,KHeapSize,this);
+	test_KErrNone(r);
+	iThreadOne.SetPriority(EPriorityAbsoluteHigh); //value 23
+	iThreadOne.Logon(iThreadOneStatus);
+
+	iThreadOne.Resume();
+	return r;
+	}
+
+
+TInt CPropertyTest::CreateThreadTwoAndResume()
+	{
+	TInt r=KErrNone;
+
+	r = iThreadTwo.Create(KNullDesC,ThreadFuncTwo,KDefaultStackSize,KHeapSize,KHeapSize,this);
+	test_KErrNone(r);
+	iThreadTwo.SetPriority(EPriorityMore); //value 23
+	iThreadTwo.Logon(iThreadTwoStatus);
+
+	iThreadTwo.Resume();
+	return r;
+	}
+
+void CPropertyTest::CloseAndWait()
+	{
+	User::WaitForAnyRequest();
+	if( iThreadOne.ExitType() == EExitPanic)
+		{
+		iThreadOne.Close();
+		CreateThreadOneAndResume();
+		CloseAndWait();
+		}
+	else if(iThreadOneStatus == KErrNone)
+			{
+			iThreadOne.Close();
+			}
+		else if(iThreadTwoStatus == KErrNone)
+					{
+					iThreadTwo.Close();
+					}
+	}
+
+
+TInt CPropertyTest::ThreadFuncOne(TAny* aThreadOnePtr)
+	{
+	return ((CPropertyTest*)aThreadOnePtr)->RunThreadFuncOne();
+	}
+
+
+TInt CPropertyTest::ThreadFuncTwo(TAny* aThreadTwoPtr)
+	{
+	return ((CPropertyTest*)aThreadTwoPtr)->RunThreadFuncTwo();
+	}
+
+
+TInt CPropertyTest::RunThreadFuncOne()
+	{
+	TInt r=KErrNone;
+	TInt attach;
+	TRequestStatus sp1;
+	while(iLoopCount <= TEST_RUNS)
+		{
+		attach = iP.Attach(KUidTestPropertyCategory, KUidTestPropertyKey);
+		test_KErrNone(attach);
+		iP.Subscribe(sp1);
+		iP.Cancel();  //should initiate TProperty::CompleteCancellationQDfc()
+		iLoopCount++;
+		}
+	return r;
+	}
+
+
+TInt CPropertyTest::RunThreadFuncTwo()
+	{
+	while(iLoopCount <= TEST_RUNS)
+		{
+		//loop adds delay to simulate crash on Naviengine
+		for(TInt i=0;i<10000;i++){};
+		iP.Close();
+		iLoopCount++;
+		}
+	return KErrNone;
+	}
+
+
+GLDEF_C TInt E32Main()
+	{
+	//Need to ensure ThreadOne,ThreadTwo and Main are of higher priorities than SVR thread
+	RProcess().SetPriority(EPriorityHigh); 
+	RThread().SetPriority(EPriorityMore); //value 20
+
+	CPropertyTest propertyTest;
+	propertyTest.DefineProperty();
+	propertyTest.CreateThreadOneAndResume();
+	propertyTest.CreateThreadTwoAndResume();
+	propertyTest.CloseAndWait();
+
+	return KErrNone;
+	}
--- a/kerneltest/e32test/random/t_securerng.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/random/t_securerng.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -237,6 +237,7 @@
 */
 GLDEF_C TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	test.Start(_L("\n Starting Secure RNG Unit tests \n"));
 	    
--- a/kerneltest/e32test/resmanus/t_resmanus.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/resmanus/t_resmanus.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -4270,6 +4270,7 @@
 // Main
 //
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	gTest.Title();
 	gTest.Start(_L("Test Power Resource Manager user side API\n"));
 
--- a/kerneltest/e32test/resourceman/t_rescontrolcli.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/resourceman/t_rescontrolcli.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -4317,6 +4317,7 @@
 	
 GLDEF_C TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	test.Start(_L("Testing Resource Manager...\n"));
 	test.Printf(_L("Testing HCR client setting Macro's for Resource Manager \n"));
--- a/kerneltest/e32test/smpsoak/t_smpsoakprocess.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/smpsoak/t_smpsoakprocess.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -298,7 +298,8 @@
                     {	
                     filename.Format(KFile,iThreadData.dirID,i);
                     PRINT((_L("File = %S Write\n"),&filename));
-                    test_KErrNone(file.Create(fs,filename,EFileWrite));
+					r = file.Create(fs,filename,EFileWrite);
+					test(r == KErrNone || r == KErrAlreadyExists);
                     test_KErrNone(file.Write(fileData));
                     file.Close();
                     }
--- a/kerneltest/e32test/system/t_chnot.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/system/t_chnot.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -483,6 +483,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 	User::After(1000000);//So WINS doesn't give an instant power-status change;
 	test.Start(_L("Create"));
--- a/kerneltest/e32test/system/t_condvar.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/system/t_condvar.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,831 +1,824 @@
-// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of the License "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// e32test\system\t_condvar.cpp
-// Overview:
-// Test the use of the RCondVar & RMutex classes.
-// API Information:
-// RCondVar, RMutex
-// Details:
-// - Create some local conditional variables and mutexes and verify results
-// are as expected.
-// - Create a test thread that waits on conditional variables and mutexes, 
-// append some items on an array, signal the conditional variable and mutex,
-// the thread then counts the number of items on the array and passes the 
-// result back to the main process. Verify results are as expected. Repeat
-// with different array data.
-// - Verify that a RCondVar::Wait() panics when the thread does not hold the
-// specified mutex (mutex not locked).
-// - Test using two mutexes with 1 conditional variable, append some items to 
-// an array, verify results from the thread are as expected. 
-// - Create a second thread with higher priority, perform tests similar to
-// above, verify results are as expected.
-// - Verify the thread timeout values are as expected.
-// - Create global conditional variables and global mutexes, using two threads
-// test the RCondVar::Signal() and RMutex::Wait() results are as expected.
-// - Test various combinations of creating a thread, suspending and killing it
-// and signalling a conditional variable and mutex. Verify results are as
-// expected.
-// - Create a secondary process along with a global chunk, conditional variable 
-// and mutex. Signal the conditional variable and verify the results are as 
-// expected.
-// - Using two threads, benchmark the number of conditional variable/mutex Signal
-// and Wait iterations that can be completed per second.
-// Platforms/Drives/Compatibility:
-// All.
-// Assumptions/Requirement/Pre-requisites:
-// Failures and causes:
-// Base Port information:
-// 
-//
-
-#include <e32std.h>
-#include <e32std_private.h>
-#include <e32svr.h>
-#include <e32test.h>
-#include <e32ldr.h>
-#include <e32def.h>
-#include <e32def_private.h>
-#include <u32std.h>
-
-RTest test(_L("T_CONDVAR"));
-RMutex M1;
-RMutex M2;
-RCondVar CV1;
-RCondVar CV2;
-
-#define __TRACE_LINE__	test.Printf(_L("Line %d\n"),__LINE__)
-
-struct SThreadData
-	{
-	SThreadData();
-	RMutex iM;
-	RCondVar iV;
-	RArray<TInt>* iA;
-	TInt iTotal;
-	TInt iInnerLoops;
-	TInt iOuterLoops;
-	TInt iTimeoutMs;
-	TInt iTimeouts;
-	TInt iBadCount;
-	};
-
-struct SThreadData2
-	{
-	SThreadData2();
-	const TText* iMutexName;
-	const TText* iCondVarName;
-	TInt iInnerLoops;
-	};
-
-SThreadData::SThreadData()
-	{
-	memset(this, 0, sizeof(*this));
-	}
-
-SThreadData2::SThreadData2()
-	{
-	memset(this, 0, sizeof(*this));
-	}
-
-TInt Thread0(TAny*)
-	{
-	return CV1.Wait(M1);
-	}
-
-TInt Thread1(TAny* a)
-	{
-	TUint32 t1, t2;
-	SThreadData& d = *(SThreadData*)a;
-	TInt r = KErrNone;
-	TInt i = 0;
-	d.iM.Wait();
-	FOREVER
-		{
-		while (d.iA->Count()<=i && r==KErrNone)
-			{
-			t1 = User::NTickCount();
-			if (d.iTimeoutMs)
-				r = d.iV.TimedWait(d.iM, d.iTimeoutMs*1000);
-			else
-				r = d.iV.Wait(d.iM);
-			t2 = User::NTickCount();
-			++d.iInnerLoops;
-			if (r == KErrTimedOut)
-				{
-				++d.iTimeouts;
-				TInt iv = (TInt)(t2-t1);
-				if (iv<d.iTimeoutMs)
-					++d.iBadCount;
-				r = KErrNone;
-				}
-			}
-		if (r != KErrNone)
-			break;
-		++d.iOuterLoops;
-		TInt c = d.iA->Count();
-		for (; i<c; ++i)
-			d.iTotal += (*d.iA)[i];
-		}
-	return r;
-	}
-
-TInt Thread2(TAny* a)
-	{
-	TUint32 t1, t2;
-	SThreadData& d = *(SThreadData*)a;
-	TInt r = KErrNone;
-	d.iM.Wait();
-	RThread::Rendezvous(KErrNone);
-	while (r==KErrNone)
-		{
-		t1 = User::NTickCount();
-		if (d.iTimeoutMs)
-			r = d.iV.TimedWait(d.iM, d.iTimeoutMs*1000);
-		else
-			r = d.iV.Wait(d.iM);
-		t2 = User::NTickCount();
-		++d.iInnerLoops;
-		if (r == KErrTimedOut)
-			{
-			++d.iTimeouts;
-			TInt iv = (TInt)(t2-t1);
-			if (iv<d.iTimeoutMs)
-				++d.iBadCount;
-			r = KErrNone;
-			}
-		}
-	return r;
-	}
-
-TInt Thread3(TAny* a)
-	{
-	SThreadData2& d = *(SThreadData2*)a;
-	RMutex m;
-	RCondVar cv;
-	TInt r = m.OpenGlobal(TPtrC(d.iMutexName), EOwnerThread);
-	if (r!=KErrNone)
-		return r;
-	r = cv.OpenGlobal(TPtrC(d.iCondVarName), EOwnerThread);
-	if (r!=KErrNone)
-		return r;
-	m.Wait();
-	while (r==KErrNone)
-		{
-		r = cv.Wait(m);
-		++d.iInnerLoops;
-		}
-	return r;
-	}
-
-TInt Thread4(TAny* a)
-	{
-	volatile TInt& count = *(volatile TInt*)a;
-	TInt r = KErrNone;
-	M2.Wait();
-	while (r==KErrNone)
-		{
-		r = CV2.Wait(M2);
-		++count;
-		}
-	return r;
-	}
-
-TInt Thread5(TAny*)
-	{
-	FOREVER
-		{
-		M2.Wait();
-		CV2.Signal();
-		M2.Signal();
-		}
-	}
-
-void RunBench()
-	{
-	test.Next(_L("Benchmark"));
-	RThread t4, t5;
-	TInt count = 0;
-	TInt r = t4.Create(KNullDesC, &Thread4, 0x1000, 0x1000, 0x1000, &count);
-	test(r==KErrNone);
-	t4.SetPriority(EPriorityLess);
-	r = t5.Create(KNullDesC, &Thread5, 0x1000, 0x1000, 0x1000, NULL);
-	test(r==KErrNone);
-	t5.SetPriority(EPriorityMuchLess);
-	t4.Resume();
-	t5.Resume();
-	User::After(500000);
-	TInt initc = count;
-	User::After(5000000);
-	TInt finalc = count;
-	test.Printf(_L("%d iterations per second\n"), (finalc-initc)/5);
-	t4.Kill(0);
-	t5.Kill(0);
-	CLOSE_AND_WAIT(t4);
-	CLOSE_AND_WAIT(t5);
-	}
-
-void CreateThread2(RThread& aThread, SThreadData& aData, TThreadPriority aPri)
-	{
-	TInt r = aThread.Create(KNullDesC, &Thread2, 0x1000, 0x1000, 0x1000, &aData);
-	test(r==KErrNone);
-	aThread.SetPriority(aPri);
-	TRequestStatus s;
-	aThread.Rendezvous(s);
-	test(s==KRequestPending);
-	aThread.Resume();
-	User::WaitForRequest(s);
-	test(s==KErrNone);
-	test(aThread.ExitType()==EExitPending);
-	aData.iM.Wait();
-	}
-
-void KillThread2(RThread& aThread)
-	{
-	TRequestStatus s;
-	aThread.Logon(s);
-	test(s==KRequestPending);
-	aThread.Terminate(0);
-	User::WaitForRequest(s);
-	test(aThread.ExitType()==EExitTerminate);
-	test(aThread.ExitReason()==0);
-	test(s==0);
-	CLOSE_AND_WAIT(aThread);
-	}
-
-void AppendToArray(SThreadData& aD, TInt aCount, ...)
-	{
-	VA_LIST list;
-	VA_START(list,aCount);
-	aD.iM.Wait();
-	while(--aCount>=0)
-		{
-		test(aD.iA->Append(VA_ARG(list,TInt))==KErrNone);
-		}
-	aD.iV.Signal();
-	aD.iM.Signal();
-	}
-
-void AppendToArrayB(SThreadData& aD, TInt aCount, ...)
-	{
-	VA_LIST list;
-	VA_START(list,aCount);
-	aD.iM.Wait();
-	while(--aCount>=0)
-		{
-		test(aD.iA->Append(VA_ARG(list,TInt))==KErrNone);
-		}
-	aD.iV.Broadcast();
-	aD.iM.Signal();
-	}
-
-void AppendToArrayB2(SThreadData& aD, TInt aCount, ...)
-	{
-	VA_LIST list;
-	VA_START(list,aCount);
-	aD.iM.Wait();
-	while(--aCount>=0)
-		{
-		test(aD.iA->Append(VA_ARG(list,TInt))==KErrNone);
-		}
-	aD.iM.Signal();
-	aD.iV.Broadcast();
-	}
-
-void Thread2Test()
-	{
-	test.Next(_L("Thread2Test"));
-	RCondVar cv2;
-	RMutex m3;
-	TInt r = cv2.CreateLocal();
-	test(r==KErrNone);
-	r = m3.CreateLocal();
-	test(r==KErrNone);
-	SThreadData d1;
-	d1.iM = m3;
-	d1.iV = cv2;
-	RThread t1;
-
-	CreateThread2(t1, d1, EPriorityLess);
-	cv2.Signal();
-	m3.Signal();
-	User::After(100000);
-	test(d1.iInnerLoops == 1);
-	KillThread2(t1);
-
-	CreateThread2(t1, d1, EPriorityLess);
-	KillThread2(t1);
-	m3.Signal();
-	test(d1.iInnerLoops == 1);
-
-	CreateThread2(t1, d1, EPriorityLess);
-	m3.Signal();
-	User::After(10000);
-	KillThread2(t1);
-	test(d1.iInnerLoops == 1);
-
-	CreateThread2(t1, d1, EPriorityLess);
-	cv2.Signal();
-	User::After(10000);
-	KillThread2(t1);
-	m3.Signal();
-	test(d1.iInnerLoops == 1);
-
-	CreateThread2(t1, d1, EPriorityLess);
-	t1.Suspend();
-	KillThread2(t1);
-	m3.Signal();
-	test(d1.iInnerLoops == 1);
-
-	CreateThread2(t1, d1, EPriorityLess);
-	User::After(10000);
-	t1.Suspend();
-	KillThread2(t1);
-	m3.Signal();
-	test(d1.iInnerLoops == 1);
-
-	CreateThread2(t1, d1, EPriorityLess);
-	cv2.Signal();
-	t1.Suspend();
-	KillThread2(t1);
-	m3.Signal();
-	test(d1.iInnerLoops == 1);
-
-	CreateThread2(t1, d1, EPriorityLess);
-	cv2.Signal();
-	User::After(10000);
-	t1.Suspend();
-	KillThread2(t1);
-	m3.Signal();
-	test(d1.iInnerLoops == 1);
-
-	cv2.Close();
-	m3.Close();
-	}
-
-const TText* KMutex1Name = _S("mtx1");
-const TText* KMutex2Name = _S("mtx2");
-const TText* KCondVar1Name = _S("cv1");
-const TText* KCondVar2Name = _S("cv2");
-
-void TestGlobal()
-	{
-	test.Next(_L("Test Global"));
-	RMutex mg1, mg2;
-	RCondVar cvg1, cvg2;
-	TInt r = mg1.CreateGlobal(TPtrC(KMutex1Name));
-	test(r==KErrNone);
-	r = mg2.CreateGlobal(TPtrC(KMutex2Name));
-	test(r==KErrNone);
-	r = cvg1.CreateGlobal(TPtrC(KCondVar1Name));
-	test(r==KErrNone);
-	r = cvg2.CreateGlobal(TPtrC(KCondVar2Name));
-	test(r==KErrNone);
-	SThreadData2 d1, d2;
-	d1.iMutexName = KMutex1Name;
-	d1.iCondVarName = KCondVar1Name;
-	d2.iMutexName = KMutex2Name;
-	d2.iCondVarName = KCondVar2Name;
-
-	RThread t1, t2;
-	r = t1.Create(KNullDesC, &Thread3, 0x1000, 0x1000, 0x1000, &d1);
-	test(r==KErrNone);
-	t1.SetPriority(EPriorityMore);
-	TRequestStatus s1;
-	t1.Logon(s1);
-	t1.Resume();
-	r = t2.Create(KNullDesC, &Thread3, 0x1000, 0x1000, 0x1000, &d2);
-	test(r==KErrNone);
-	t2.SetPriority(EPriorityMore);
-	TRequestStatus s2;
-	t2.Logon(s2);
-	t2.Resume();
-
-	test(s1==KRequestPending);
-	test(s2==KRequestPending);
-	test(d1.iInnerLoops == 0);
-	test(d2.iInnerLoops == 0);
-	cvg1.Signal();
-	test(d1.iInnerLoops == 1);
-	test(d2.iInnerLoops == 0);
-	cvg2.Signal();
-	test(d1.iInnerLoops == 1);
-	test(d2.iInnerLoops == 1);
-
-	cvg1.Close();
-	cvg2.Close();
-	test(s1==KRequestPending);
-	test(s2==KRequestPending);
-	test(d1.iInnerLoops == 1);
-	test(d2.iInnerLoops == 1);
-
-	t1.Kill(0);
-	t2.Kill(0);
-	User::WaitForRequest(s1);
-	User::WaitForRequest(s2);
-	test(t1.ExitType()==EExitKill);
-	test(t1.ExitReason()==0);
-	test(t2.ExitType()==EExitKill);
-	test(t2.ExitReason()==0);
-	CLOSE_AND_WAIT(t1);
-	CLOSE_AND_WAIT(t2);
-	r = cvg1.OpenGlobal(TPtrC(KCondVar1Name));
-	test(r==KErrNotFound);
-	test(cvg1.Handle()==0);
-	mg1.Close();
-	mg2.Close();
-	}
-
-void TestSecondaryProcess()
-	{
-	test.Next(_L("Test Secondary Process"));
-
-	RProcess p;
-	RChunk c;
-	RMutex m;
-	RCondVar cv;
-
-	//cancel lazy dll unloading
-	RLoader loader;
-	TInt r = loader.Connect();
-	test(r==KErrNone);
-	r = loader.CancelLazyDllUnload();
-	test(r==KErrNone);
-	loader.Close();
-
-	r = c.CreateGlobal(KNullDesC, 0x1000, 0x1000);
-	test(r==KErrNone);
-	volatile TInt& x = *(volatile TInt*)c.Base();
-	x = 0;
-	r = m.CreateGlobal(KNullDesC);
-	test(r==KErrNone);
-	r = cv.CreateGlobal(KNullDesC);
-	test(r==KErrNone);
-	r = p.Create(RProcess().FileName(), KNullDesC);
-	test(r==KErrNone);
-	p.SetPriority(EPriorityHigh);
-	r = p.SetParameter(1, cv);
-	test(r==KErrNone);
-	r = p.SetParameter(2, m);
-	test(r==KErrNone);
-	r = p.SetParameter(3, c);
-	test(r==KErrNone);
-	TRequestStatus s;
-	p.Logon(s);
-	p.Resume();
-	test(s==KRequestPending);
-	test(x==0);
-	TInt i;
-	for (i=0; i<10; ++i)
-		{
-		cv.Signal();
-		test(x == i+1);
-		}
-	cv.Close();
-	test(s==KRequestPending);
-	test(x==10);
-	p.Terminate(0);
-	User::WaitForRequest(s);
-	test(p.ExitType()==EExitTerminate);
-	test(p.ExitReason()==0);
-	CLOSE_AND_WAIT(p);
-	m.Close();
-	c.Close();
-	}
-
-TInt SecondaryProcess(RCondVar aCV)
-	{
-	RDebug::Print(_L("SecProc"));
-	RMutex mp;
-	RChunk cp;
-	TInt r = mp.Open(2);
-	if (r!=KErrNone)
-		return r;
-	r = cp.Open(3);
-	if (r!=KErrNone)
-		return r;
-	volatile TInt& x = *(volatile TInt*)cp.Base();
-	mp.Wait();
-	r = KErrNone;
-	while (r==KErrNone)
-		{
-		r = aCV.Wait(mp);
-		++x;
-		RDebug::Print(_L("SecProc r=%d x=%d"), r, x);
-		}
-	return r;
-	}
-
-TInt E32Main()
-	{
-	TInt cpus = UserSvr::HalFunction(EHalGroupKernel, EKernelHalNumLogicalCpus, 0, 0);
-	if (cpus != 1)
-		{
-		test(cpus>1);
-		// This test will require compatibility mode (and probably other changes)
-		// to work on SMP - it depends on explicit scheduling order.
-		test.Printf(_L("T_CONDVAR skipped, does not work on SMP\n"));
-		return KErrNone;
-		}	
-	
-	__KHEAP_MARK;
-	__UHEAP_MARK;
-
-	TInt r;
-	RCondVar cvp;
-	r = cvp.Open(1);
-	if (r==KErrNone)
-		return SecondaryProcess(cvp);
-	test.Title();
-	test.Start(_L("Create condition variable"));
-	r = CV1.CreateLocal();
-	test(r==KErrNone);
-	r = CV2.CreateLocal();
-	test(r==KErrNone);
-
-	test.Next(_L("Signal with no-one waiting"));
-	CV1.Signal();
-
-	test.Next(_L("Broadcast with no-one waiting"));
-	CV1.Broadcast();
-
-	test.Next(_L("Create mutexes"));
-	r = M1.CreateLocal();
-	test(r==KErrNone);
-	r = M2.CreateLocal();
-	test(r==KErrNone);
-
-	RArray<TInt> array;
-	SThreadData d0;
-	d0.iM = M2;
-	d0.iV = CV1;
-	d0.iA = &array;
-	test.Next(_L("Create thread to use mutex 2"));
-	RThread t0;
-	r = t0.Create(KNullDesC, &Thread1, 0x1000, 0x1000, 0x1000, &d0);
-	test(r==KErrNone);
-	t0.SetPriority(EPriorityMore);
-	TRequestStatus s0;
-	t0.Logon(s0);
-	t0.Resume();
-	__TRACE_LINE__;
-	AppendToArray(d0, 1, 4);
-	test(d0.iTotal==4);
-	__TRACE_LINE__;
-	AppendToArray(d0, 2, -3, 17);
-	test(d0.iTotal==18);
-	t0.Terminate(11);
-	User::WaitForRequest(s0);
-	test(t0.ExitType()==EExitTerminate);
-	test(t0.ExitReason()==11);
-	CLOSE_AND_WAIT(t0);
-	array.Reset();
-
-	SThreadData d;
-	d.iM = M1;
-	d.iV = CV1;
-	d.iA = &array;
-	test.Next(_L("Create thread to use mutex 1"));
-	RThread t;
-	r = t.Create(KNullDesC, &Thread1, 0x1000, 0x1000, 0x1000, &d);
-	test(r==KErrNone);
-	t.SetPriority(EPriorityMore);
-	TRequestStatus s;
-	t.Logon(s);
-	t.Resume();
-
-	test.Next(_L("Test wait with mutex unlocked"));
-	r = t0.Create(KNullDesC, &Thread0, 0x1000, 0x1000, 0x1000, NULL);
-	test(r==KErrNone);
-	t0.SetPriority(EPriorityMore);
-	t0.Logon(s0);
-	TBool jit = User::JustInTime();
-	User::SetJustInTime(EFalse);
-	t0.Resume();
-	User::WaitForRequest(s0);
-	User::SetJustInTime(jit);
-	test(t0.ExitType()==EExitPanic);
-	test(t0.ExitCategory()==_L("KERN-EXEC"));
-	test(t0.ExitReason()==ECondVarWaitMutexNotLocked);
-	CLOSE_AND_WAIT(t0);
-
-	test.Next(_L("Test trying to use two mutexes with 1 condition variable"));
-	M2.Wait();
-	r = CV1.Wait(M2);
-	M2.Signal();
-	test(r==KErrInUse);
-
-	test(d.iTotal==0);
-	__TRACE_LINE__;
-	AppendToArray(d, 1, 3);
-	test(d.iTotal==3);
-	__TRACE_LINE__;
-	AppendToArray(d, 2, 3, 19);
-	test(d.iTotal==25);
-	__TRACE_LINE__;
-	AppendToArray(d, 4, 15, -1, -2, -30);
-	test(d.iTotal==7);
-	test(d.iInnerLoops==3);
-	test(d.iOuterLoops==3);
-	__TRACE_LINE__;
-	t.Suspend();
-	__TRACE_LINE__;
-	t.Resume();
-	test(d.iTotal==7);
-	test(d.iInnerLoops==4);
-	test(d.iOuterLoops==3);
-	__TRACE_LINE__;
-	t.SetPriority(EPriorityLess);
-	test(d.iTotal==7);
-	test(d.iInnerLoops==4);
-	test(d.iOuterLoops==3);
-	__TRACE_LINE__;
-	t.SetPriority(EPriorityMore);
-	test(d.iTotal==7);
-	test(d.iInnerLoops==5);
-	test(d.iOuterLoops==3);
-	__TRACE_LINE__;
-	t.Suspend();
-	__TRACE_LINE__;
-	AppendToArray(d, 1, 4);
-	test(d.iTotal==7);
-	test(d.iInnerLoops==5);
-	test(d.iOuterLoops==3);
-	__TRACE_LINE__;
-	t.Resume();
-	test(d.iTotal==11);
-	test(d.iInnerLoops==6);
-	test(d.iOuterLoops==4);
-
-	SThreadData d2;
-	d2.iM = M1;
-	d2.iV = CV1;
-	d2.iA = &array;
-
-	test.Next(_L("Create 2nd thread"));
-	RThread t2;
-	r = t2.Create(KNullDesC, &Thread1, 0x1000, NULL, &d2);
-	test(r==KErrNone);
-	t2.SetPriority(EPriorityMuchMore);
-	TRequestStatus s2;
-	t2.Logon(s2);
-	__TRACE_LINE__;
-	t2.Resume();
-
-	test(d2.iTotal == 11);
-	test(d2.iInnerLoops == 0);
-	test(d2.iOuterLoops == 1);
-	__TRACE_LINE__;
-	AppendToArray(d, 2, 9, 10);
-	test(d2.iTotal == 30);
-	test(d2.iInnerLoops == 1);
-	test(d2.iOuterLoops == 2);
-	test(d.iTotal==11);
-	test(d.iInnerLoops==6);
-	test(d.iOuterLoops==4);
-	__TRACE_LINE__;
-	AppendToArrayB(d, 2, 20, 30);
-	test(d2.iTotal == 80);
-	test(d2.iInnerLoops == 2);
-	test(d2.iOuterLoops == 3);
-	test(d.iTotal == 80);
-	test(d.iInnerLoops == 7);
-	test(d.iOuterLoops == 5);
-	__TRACE_LINE__;
-	AppendToArrayB2(d, 2, -10, -6);
-	test(d2.iTotal == 64);
-	test(d2.iInnerLoops == 3);
-	test(d2.iOuterLoops == 4);
-	test(d.iTotal == 64);
-	test(d.iInnerLoops == 8);
-	test(d.iOuterLoops == 6);
-	__TRACE_LINE__;
-	t2.Suspend();
-	__TRACE_LINE__;
-	AppendToArray(d, 2, -8, -8);
-	test(d2.iTotal == 64);
-	test(d2.iInnerLoops == 3);
-	test(d2.iOuterLoops == 4);
-	test(d.iTotal == 48);
-	test(d.iInnerLoops == 9);
-	test(d.iOuterLoops == 7);
-	__TRACE_LINE__;
-	t2.Resume();
-	test(d2.iTotal == 48);
-	test(d2.iInnerLoops == 4);
-	test(d2.iOuterLoops == 5);
-	test(d.iTotal == 48);
-	test(d.iInnerLoops == 9);
-	test(d.iOuterLoops == 7);
-
-	// test timeouts
-	d.iTimeoutMs = 1000;
-	__TRACE_LINE__;
-	t.Suspend();
-	__TRACE_LINE__;
-	t.Resume();
-	test(d2.iTotal == 48);
-	test(d2.iInnerLoops == 4);
-	test(d2.iOuterLoops == 5);
-	test(d2.iTimeouts == 0);
-	test(d.iTotal == 48);
-	test(d.iInnerLoops == 10);
-	test(d.iOuterLoops == 7);
-	test(d.iTimeouts == 0);
-	test(array.Append(1)==0);
-	TInt nt = 0;
-	do	{
-		if (d.iTimeouts > nt)
-			{
-			test(d.iTimeouts-nt == 1);
-			nt = d.iTimeouts;
-			test.Printf(_L("Timeout %d\n"), nt);
-			test(d2.iTotal == 48);
-			test(d2.iInnerLoops == 4);
-			test(d2.iOuterLoops == 5);
-			test(d2.iTimeouts == 0);
-			test(d.iTotal == 48+nt);
-			test(d.iInnerLoops == 10+nt);
-			test(d.iOuterLoops == 7+nt);
-			test(array.Append(1)==0);
-			}
-		} while (nt<10);
-
-	d.iTimeoutMs = 0;
-	AppendToArrayB(d, 0);
-	test(d2.iTotal == 59);
-	test(d2.iInnerLoops == 5);
-	test(d2.iOuterLoops == 6);
-	test(d2.iTimeouts == 0);
-	test(d.iTotal == 59);
-	test(d.iInnerLoops == 21);
-	test(d.iOuterLoops == 18);
-	test(d.iTimeouts == 10);
-
-	__TRACE_LINE__;
-	t.SetPriority(EPriorityLess);
-	__TRACE_LINE__;
-	AppendToArrayB(d, 1, 11);
-	test(d2.iTotal == 70);
-	test(d2.iInnerLoops == 6);
-	test(d2.iOuterLoops == 7);
-	test(d2.iTimeouts == 0);
-	test(d.iTotal == 59);
-	test(d.iInnerLoops == 21);
-	test(d.iOuterLoops == 18);
-	test(d.iTimeouts == 10);
-	User::After(50000);
-	test(d2.iTotal == 70);
-	test(d2.iInnerLoops == 6);
-	test(d2.iOuterLoops == 7);
-	test(d2.iTimeouts == 0);
-	test(d.iTotal == 70);
-	test(d.iInnerLoops == 22);
-	test(d.iOuterLoops == 19);
-	test(d.iTimeouts == 10);
-
-
-
-	__TRACE_LINE__;
-	CV1.Close();
-	User::WaitForRequest(s);
-	test(t.ExitType()==EExitKill);
-	test(t.ExitReason()==KErrGeneral);
-	User::WaitForRequest(s2);
-	test(t2.ExitType()==EExitKill);
-	test(t2.ExitReason()==KErrGeneral);
-	CLOSE_AND_WAIT(t);
-	CLOSE_AND_WAIT(t2);
-
-
-	M1.Close();
-
-	TestGlobal();
-
-	Thread2Test();
-
-	TestSecondaryProcess();
-
-	RunBench();
-	M2.Close();
-	CV2.Close();
-	array.Close();
-
-	test.End();
-	test.Close();
-
-	__UHEAP_MARKEND;
-	__KHEAP_MARKEND;
-	return KErrNone;
-	}
-
+// Copyright (c) 1994-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32test\system\t_condvar.cpp
+// Overview:
+// Test the use of the RCondVar & RMutex classes.
+// API Information:
+// RCondVar, RMutex
+// Details:
+// - Create some local conditional variables and mutexes and verify results
+// are as expected.
+// - Create a test thread that waits on conditional variables and mutexes, 
+// append some items on an array, signal the conditional variable and mutex,
+// the thread then counts the number of items on the array and passes the 
+// result back to the main process. Verify results are as expected. Repeat
+// with different array data.
+// - Verify that a RCondVar::Wait() panics when the thread does not hold the
+// specified mutex (mutex not locked).
+// - Test using two mutexes with 1 conditional variable, append some items to 
+// an array, verify results from the thread are as expected. 
+// - Create a second thread with higher priority, perform tests similar to
+// above, verify results are as expected.
+// - Verify the thread timeout values are as expected.
+// - Create global conditional variables and global mutexes, using two threads
+// test the RCondVar::Signal() and RMutex::Wait() results are as expected.
+// - Test various combinations of creating a thread, suspending and killing it
+// and signalling a conditional variable and mutex. Verify results are as
+// expected.
+// - Create a secondary process along with a global chunk, conditional variable 
+// and mutex. Signal the conditional variable and verify the results are as 
+// expected.
+// - Using two threads, benchmark the number of conditional variable/mutex Signal
+// and Wait iterations that can be completed per second.
+// Platforms/Drives/Compatibility:
+// All.
+// Assumptions/Requirement/Pre-requisites:
+// Failures and causes:
+// Base Port information:
+// 
+//
+
+#include <e32std.h>
+#include <e32std_private.h>
+#include <e32svr.h>
+#include <e32test.h>
+#include <e32ldr.h>
+#include <e32def.h>
+#include <e32def_private.h>
+#include <u32std.h>
+
+RTest test(_L("T_CONDVAR"));
+RMutex M1;
+RMutex M2;
+RCondVar CV1;
+RCondVar CV2;
+
+#define __TRACE_LINE__	test.Printf(_L("Line %d\n"),__LINE__)
+
+struct SThreadData
+	{
+	SThreadData();
+	RMutex iM;
+	RCondVar iV;
+	RArray<TInt>* iA;
+	TInt iTotal;
+	TInt iInnerLoops;
+	TInt iOuterLoops;
+	TInt iTimeoutMs;
+	TInt iTimeouts;
+	TInt iBadCount;
+	};
+
+struct SThreadData2
+	{
+	SThreadData2();
+	const TText* iMutexName;
+	const TText* iCondVarName;
+	TInt iInnerLoops;
+	};
+
+SThreadData::SThreadData()
+	{
+	memset(this, 0, sizeof(*this));
+	}
+
+SThreadData2::SThreadData2()
+	{
+	memset(this, 0, sizeof(*this));
+	}
+
+TInt Thread0(TAny*)
+	{
+	return CV1.Wait(M1);
+	}
+
+TInt Thread1(TAny* a)
+	{
+	TUint32 t1, t2;
+	SThreadData& d = *(SThreadData*)a;
+	TInt r = KErrNone;
+	TInt i = 0;
+	d.iM.Wait();
+	FOREVER
+		{
+		while (d.iA->Count()<=i && r==KErrNone)
+			{
+			t1 = User::NTickCount();
+			if (d.iTimeoutMs)
+				r = d.iV.TimedWait(d.iM, d.iTimeoutMs*1000);
+			else
+				r = d.iV.Wait(d.iM);
+			t2 = User::NTickCount();
+			++d.iInnerLoops;
+			if (r == KErrTimedOut)
+				{
+				++d.iTimeouts;
+				TInt iv = (TInt)(t2-t1);
+				if (iv<d.iTimeoutMs)
+					++d.iBadCount;
+				r = KErrNone;
+				}
+			}
+		if (r != KErrNone)
+			break;
+		++d.iOuterLoops;
+		TInt c = d.iA->Count();
+		for (; i<c; ++i)
+			d.iTotal += (*d.iA)[i];
+		}
+	return r;
+	}
+
+TInt Thread2(TAny* a)
+	{
+	TUint32 t1, t2;
+	SThreadData& d = *(SThreadData*)a;
+	TInt r = KErrNone;
+	d.iM.Wait();
+	RThread::Rendezvous(KErrNone);
+	while (r==KErrNone)
+		{
+		t1 = User::NTickCount();
+		if (d.iTimeoutMs)
+			r = d.iV.TimedWait(d.iM, d.iTimeoutMs*1000);
+		else
+			r = d.iV.Wait(d.iM);
+		t2 = User::NTickCount();
+		++d.iInnerLoops;
+		if (r == KErrTimedOut)
+			{
+			++d.iTimeouts;
+			TInt iv = (TInt)(t2-t1);
+			if (iv<d.iTimeoutMs)
+				++d.iBadCount;
+			r = KErrNone;
+			}
+		}
+	return r;
+	}
+
+TInt Thread3(TAny* a)
+	{
+	SThreadData2& d = *(SThreadData2*)a;
+	RMutex m;
+	RCondVar cv;
+	TInt r = m.OpenGlobal(TPtrC(d.iMutexName), EOwnerThread);
+	if (r!=KErrNone)
+		return r;
+	r = cv.OpenGlobal(TPtrC(d.iCondVarName), EOwnerThread);
+	if (r!=KErrNone)
+		return r;
+	m.Wait();
+	while (r==KErrNone)
+		{
+		r = cv.Wait(m);
+		++d.iInnerLoops;
+		}
+	return r;
+	}
+
+TInt Thread4(TAny* a)
+	{
+	volatile TInt& count = *(volatile TInt*)a;
+	TInt r = KErrNone;
+	M2.Wait();
+	while (r==KErrNone)
+		{
+		r = CV2.Wait(M2);
+		++count;
+		}
+	return r;
+	}
+
+TInt Thread5(TAny*)
+	{
+	FOREVER
+		{
+		M2.Wait();
+		CV2.Signal();
+		M2.Signal();
+		}
+	}
+
+void RunBench()
+	{
+	test.Next(_L("Benchmark"));
+	RThread t4, t5;
+	TInt count = 0;
+	TInt r = t4.Create(KNullDesC, &Thread4, 0x1000, 0x1000, 0x1000, &count);
+	test(r==KErrNone);
+	t4.SetPriority(EPriorityLess);
+	r = t5.Create(KNullDesC, &Thread5, 0x1000, 0x1000, 0x1000, NULL);
+	test(r==KErrNone);
+	t5.SetPriority(EPriorityMuchLess);
+	t4.Resume();
+	t5.Resume();
+	User::After(500000);
+	TInt initc = count;
+	User::After(5000000);
+	TInt finalc = count;
+	test.Printf(_L("%d iterations per second\n"), (finalc-initc)/5);
+	t4.Kill(0);
+	t5.Kill(0);
+	CLOSE_AND_WAIT(t4);
+	CLOSE_AND_WAIT(t5);
+	}
+
+void CreateThread2(RThread& aThread, SThreadData& aData, TThreadPriority aPri)
+	{
+	TInt r = aThread.Create(KNullDesC, &Thread2, 0x1000, 0x1000, 0x1000, &aData);
+	test(r==KErrNone);
+	aThread.SetPriority(aPri);
+	TRequestStatus s;
+	aThread.Rendezvous(s);
+	test(s==KRequestPending);
+	aThread.Resume();
+	User::WaitForRequest(s);
+	test(s==KErrNone);
+	test(aThread.ExitType()==EExitPending);
+	aData.iM.Wait();
+	}
+
+void KillThread2(RThread& aThread)
+	{
+	TRequestStatus s;
+	aThread.Logon(s);
+	test(s==KRequestPending);
+	aThread.Terminate(0);
+	User::WaitForRequest(s);
+	test(aThread.ExitType()==EExitTerminate);
+	test(aThread.ExitReason()==0);
+	test(s==0);
+	CLOSE_AND_WAIT(aThread);
+	}
+
+void AppendToArray(SThreadData& aD, TInt aCount, ...)
+	{
+	VA_LIST list;
+	VA_START(list,aCount);
+	aD.iM.Wait();
+	while(--aCount>=0)
+		{
+		test(aD.iA->Append(VA_ARG(list,TInt))==KErrNone);
+		}
+	aD.iV.Signal();
+	aD.iM.Signal();
+	}
+
+void AppendToArrayB(SThreadData& aD, TInt aCount, ...)
+	{
+	VA_LIST list;
+	VA_START(list,aCount);
+	aD.iM.Wait();
+	while(--aCount>=0)
+		{
+		test(aD.iA->Append(VA_ARG(list,TInt))==KErrNone);
+		}
+	aD.iV.Broadcast();
+	aD.iM.Signal();
+	}
+
+void AppendToArrayB2(SThreadData& aD, TInt aCount, ...)
+	{
+	VA_LIST list;
+	VA_START(list,aCount);
+	aD.iM.Wait();
+	while(--aCount>=0)
+		{
+		test(aD.iA->Append(VA_ARG(list,TInt))==KErrNone);
+		}
+	aD.iM.Signal();
+	aD.iV.Broadcast();
+	}
+
+void Thread2Test()
+	{
+	test.Next(_L("Thread2Test"));
+	RCondVar cv2;
+	RMutex m3;
+	TInt r = cv2.CreateLocal();
+	test(r==KErrNone);
+	r = m3.CreateLocal();
+	test(r==KErrNone);
+	SThreadData d1;
+	d1.iM = m3;
+	d1.iV = cv2;
+	RThread t1;
+
+	CreateThread2(t1, d1, EPriorityLess);
+	cv2.Signal();
+	m3.Signal();
+	User::After(100000);
+	test(d1.iInnerLoops == 1);
+	KillThread2(t1);
+
+	CreateThread2(t1, d1, EPriorityLess);
+	KillThread2(t1);
+	m3.Signal();
+	test(d1.iInnerLoops == 1);
+
+	CreateThread2(t1, d1, EPriorityLess);
+	m3.Signal();
+	User::After(10000);
+	KillThread2(t1);
+	test(d1.iInnerLoops == 1);
+
+	CreateThread2(t1, d1, EPriorityLess);
+	cv2.Signal();
+	User::After(10000);
+	KillThread2(t1);
+	m3.Signal();
+	test(d1.iInnerLoops == 1);
+
+	CreateThread2(t1, d1, EPriorityLess);
+	t1.Suspend();
+	KillThread2(t1);
+	m3.Signal();
+	test(d1.iInnerLoops == 1);
+
+	CreateThread2(t1, d1, EPriorityLess);
+	User::After(10000);
+	t1.Suspend();
+	KillThread2(t1);
+	m3.Signal();
+	test(d1.iInnerLoops == 1);
+
+	CreateThread2(t1, d1, EPriorityLess);
+	cv2.Signal();
+	t1.Suspend();
+	KillThread2(t1);
+	m3.Signal();
+	test(d1.iInnerLoops == 1);
+
+	CreateThread2(t1, d1, EPriorityLess);
+	cv2.Signal();
+	User::After(10000);
+	t1.Suspend();
+	KillThread2(t1);
+	m3.Signal();
+	test(d1.iInnerLoops == 1);
+
+	cv2.Close();
+	m3.Close();
+	}
+
+const TText* KMutex1Name = _S("mtx1");
+const TText* KMutex2Name = _S("mtx2");
+const TText* KCondVar1Name = _S("cv1");
+const TText* KCondVar2Name = _S("cv2");
+
+void TestGlobal()
+	{
+	test.Next(_L("Test Global"));
+	RMutex mg1, mg2;
+	RCondVar cvg1, cvg2;
+	TInt r = mg1.CreateGlobal(TPtrC(KMutex1Name));
+	test(r==KErrNone);
+	r = mg2.CreateGlobal(TPtrC(KMutex2Name));
+	test(r==KErrNone);
+	r = cvg1.CreateGlobal(TPtrC(KCondVar1Name));
+	test(r==KErrNone);
+	r = cvg2.CreateGlobal(TPtrC(KCondVar2Name));
+	test(r==KErrNone);
+	SThreadData2 d1, d2;
+	d1.iMutexName = KMutex1Name;
+	d1.iCondVarName = KCondVar1Name;
+	d2.iMutexName = KMutex2Name;
+	d2.iCondVarName = KCondVar2Name;
+
+	RThread t1, t2;
+	r = t1.Create(KNullDesC, &Thread3, 0x1000, 0x1000, 0x1000, &d1);
+	test(r==KErrNone);
+	t1.SetPriority(EPriorityMore);
+	TRequestStatus s1;
+	t1.Logon(s1);
+	t1.Resume();
+	r = t2.Create(KNullDesC, &Thread3, 0x1000, 0x1000, 0x1000, &d2);
+	test(r==KErrNone);
+	t2.SetPriority(EPriorityMore);
+	TRequestStatus s2;
+	t2.Logon(s2);
+	t2.Resume();
+
+	test(s1==KRequestPending);
+	test(s2==KRequestPending);
+	test(d1.iInnerLoops == 0);
+	test(d2.iInnerLoops == 0);
+	cvg1.Signal();
+	test(d1.iInnerLoops == 1);
+	test(d2.iInnerLoops == 0);
+	cvg2.Signal();
+	test(d1.iInnerLoops == 1);
+	test(d2.iInnerLoops == 1);
+
+	cvg1.Close();
+	cvg2.Close();
+	test(s1==KRequestPending);
+	test(s2==KRequestPending);
+	test(d1.iInnerLoops == 1);
+	test(d2.iInnerLoops == 1);
+
+	t1.Kill(0);
+	t2.Kill(0);
+	User::WaitForRequest(s1);
+	User::WaitForRequest(s2);
+	test(t1.ExitType()==EExitKill);
+	test(t1.ExitReason()==0);
+	test(t2.ExitType()==EExitKill);
+	test(t2.ExitReason()==0);
+	CLOSE_AND_WAIT(t1);
+	CLOSE_AND_WAIT(t2);
+	r = cvg1.OpenGlobal(TPtrC(KCondVar1Name));
+	test(r==KErrNotFound);
+	test(cvg1.Handle()==0);
+	mg1.Close();
+	mg2.Close();
+	}
+
+void TestSecondaryProcess()
+	{
+	test.Next(_L("Test Secondary Process"));
+
+	RProcess p;
+	RChunk c;
+	RMutex m;
+	RCondVar cv;
+
+	TInt r = c.CreateGlobal(KNullDesC, 0x1000, 0x1000);
+	test(r==KErrNone);
+	volatile TInt& x = *(volatile TInt*)c.Base();
+	x = 0;
+	r = m.CreateGlobal(KNullDesC);
+	test(r==KErrNone);
+	r = cv.CreateGlobal(KNullDesC);
+	test(r==KErrNone);
+	r = p.Create(RProcess().FileName(), KNullDesC);
+	test(r==KErrNone);
+	p.SetPriority(EPriorityHigh);
+	r = p.SetParameter(1, cv);
+	test(r==KErrNone);
+	r = p.SetParameter(2, m);
+	test(r==KErrNone);
+	r = p.SetParameter(3, c);
+	test(r==KErrNone);
+	TRequestStatus s;
+	p.Logon(s);
+	p.Resume();
+	test(s==KRequestPending);
+	test(x==0);
+	TInt i;
+	for (i=0; i<10; ++i)
+		{
+		cv.Signal();
+		test(x == i+1);
+		}
+	cv.Close();
+	test(s==KRequestPending);
+	test(x==10);
+	p.Terminate(0);
+	User::WaitForRequest(s);
+	test(p.ExitType()==EExitTerminate);
+	test(p.ExitReason()==0);
+	CLOSE_AND_WAIT(p);
+	m.Close();
+	c.Close();
+	}
+
+TInt SecondaryProcess(RCondVar aCV)
+	{
+	RDebug::Print(_L("SecProc"));
+	RMutex mp;
+	RChunk cp;
+	TInt r = mp.Open(2);
+	if (r!=KErrNone)
+		return r;
+	r = cp.Open(3);
+	if (r!=KErrNone)
+		return r;
+	volatile TInt& x = *(volatile TInt*)cp.Base();
+	mp.Wait();
+	r = KErrNone;
+	while (r==KErrNone)
+		{
+		r = aCV.Wait(mp);
+		++x;
+		RDebug::Print(_L("SecProc r=%d x=%d"), r, x);
+		}
+	return r;
+	}
+
+TInt E32Main()
+	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
+	TInt cpus = UserSvr::HalFunction(EHalGroupKernel, EKernelHalNumLogicalCpus, 0, 0);
+	if (cpus != 1)
+		{
+		test(cpus>1);
+		// This test will require compatibility mode (and probably other changes)
+		// to work on SMP - it depends on explicit scheduling order.
+		test.Printf(_L("T_CONDVAR skipped, does not work on SMP\n"));
+		return KErrNone;
+		}	
+	
+	__KHEAP_MARK;
+	__UHEAP_MARK;
+
+	TInt r;
+	RCondVar cvp;
+	r = cvp.Open(1);
+	if (r==KErrNone)
+		return SecondaryProcess(cvp);
+	test.Title();
+	test.Start(_L("Create condition variable"));
+	r = CV1.CreateLocal();
+	test(r==KErrNone);
+	r = CV2.CreateLocal();
+	test(r==KErrNone);
+
+	test.Next(_L("Signal with no-one waiting"));
+	CV1.Signal();
+
+	test.Next(_L("Broadcast with no-one waiting"));
+	CV1.Broadcast();
+
+	test.Next(_L("Create mutexes"));
+	r = M1.CreateLocal();
+	test(r==KErrNone);
+	r = M2.CreateLocal();
+	test(r==KErrNone);
+
+	RArray<TInt> array;
+	SThreadData d0;
+	d0.iM = M2;
+	d0.iV = CV1;
+	d0.iA = &array;
+	test.Next(_L("Create thread to use mutex 2"));
+	RThread t0;
+	r = t0.Create(KNullDesC, &Thread1, 0x1000, 0x1000, 0x1000, &d0);
+	test(r==KErrNone);
+	t0.SetPriority(EPriorityMore);
+	TRequestStatus s0;
+	t0.Logon(s0);
+	t0.Resume();
+	__TRACE_LINE__;
+	AppendToArray(d0, 1, 4);
+	test(d0.iTotal==4);
+	__TRACE_LINE__;
+	AppendToArray(d0, 2, -3, 17);
+	test(d0.iTotal==18);
+	t0.Terminate(11);
+	User::WaitForRequest(s0);
+	test(t0.ExitType()==EExitTerminate);
+	test(t0.ExitReason()==11);
+	CLOSE_AND_WAIT(t0);
+	array.Reset();
+
+	SThreadData d;
+	d.iM = M1;
+	d.iV = CV1;
+	d.iA = &array;
+	test.Next(_L("Create thread to use mutex 1"));
+	RThread t;
+	r = t.Create(KNullDesC, &Thread1, 0x1000, 0x1000, 0x1000, &d);
+	test(r==KErrNone);
+	t.SetPriority(EPriorityMore);
+	TRequestStatus s;
+	t.Logon(s);
+	t.Resume();
+
+	test.Next(_L("Test wait with mutex unlocked"));
+	r = t0.Create(KNullDesC, &Thread0, 0x1000, 0x1000, 0x1000, NULL);
+	test(r==KErrNone);
+	t0.SetPriority(EPriorityMore);
+	t0.Logon(s0);
+	TBool jit = User::JustInTime();
+	User::SetJustInTime(EFalse);
+	t0.Resume();
+	User::WaitForRequest(s0);
+	User::SetJustInTime(jit);
+	test(t0.ExitType()==EExitPanic);
+	test(t0.ExitCategory()==_L("KERN-EXEC"));
+	test(t0.ExitReason()==ECondVarWaitMutexNotLocked);
+	CLOSE_AND_WAIT(t0);
+
+	test.Next(_L("Test trying to use two mutexes with 1 condition variable"));
+	M2.Wait();
+	r = CV1.Wait(M2);
+	M2.Signal();
+	test(r==KErrInUse);
+
+	test(d.iTotal==0);
+	__TRACE_LINE__;
+	AppendToArray(d, 1, 3);
+	test(d.iTotal==3);
+	__TRACE_LINE__;
+	AppendToArray(d, 2, 3, 19);
+	test(d.iTotal==25);
+	__TRACE_LINE__;
+	AppendToArray(d, 4, 15, -1, -2, -30);
+	test(d.iTotal==7);
+	test(d.iInnerLoops==3);
+	test(d.iOuterLoops==3);
+	__TRACE_LINE__;
+	t.Suspend();
+	__TRACE_LINE__;
+	t.Resume();
+	test(d.iTotal==7);
+	test(d.iInnerLoops==4);
+	test(d.iOuterLoops==3);
+	__TRACE_LINE__;
+	t.SetPriority(EPriorityLess);
+	test(d.iTotal==7);
+	test(d.iInnerLoops==4);
+	test(d.iOuterLoops==3);
+	__TRACE_LINE__;
+	t.SetPriority(EPriorityMore);
+	test(d.iTotal==7);
+	test(d.iInnerLoops==5);
+	test(d.iOuterLoops==3);
+	__TRACE_LINE__;
+	t.Suspend();
+	__TRACE_LINE__;
+	AppendToArray(d, 1, 4);
+	test(d.iTotal==7);
+	test(d.iInnerLoops==5);
+	test(d.iOuterLoops==3);
+	__TRACE_LINE__;
+	t.Resume();
+	test(d.iTotal==11);
+	test(d.iInnerLoops==6);
+	test(d.iOuterLoops==4);
+
+	SThreadData d2;
+	d2.iM = M1;
+	d2.iV = CV1;
+	d2.iA = &array;
+
+	test.Next(_L("Create 2nd thread"));
+	RThread t2;
+	r = t2.Create(KNullDesC, &Thread1, 0x1000, NULL, &d2);
+	test(r==KErrNone);
+	t2.SetPriority(EPriorityMuchMore);
+	TRequestStatus s2;
+	t2.Logon(s2);
+	__TRACE_LINE__;
+	t2.Resume();
+
+	test(d2.iTotal == 11);
+	test(d2.iInnerLoops == 0);
+	test(d2.iOuterLoops == 1);
+	__TRACE_LINE__;
+	AppendToArray(d, 2, 9, 10);
+	test(d2.iTotal == 30);
+	test(d2.iInnerLoops == 1);
+	test(d2.iOuterLoops == 2);
+	test(d.iTotal==11);
+	test(d.iInnerLoops==6);
+	test(d.iOuterLoops==4);
+	__TRACE_LINE__;
+	AppendToArrayB(d, 2, 20, 30);
+	test(d2.iTotal == 80);
+	test(d2.iInnerLoops == 2);
+	test(d2.iOuterLoops == 3);
+	test(d.iTotal == 80);
+	test(d.iInnerLoops == 7);
+	test(d.iOuterLoops == 5);
+	__TRACE_LINE__;
+	AppendToArrayB2(d, 2, -10, -6);
+	test(d2.iTotal == 64);
+	test(d2.iInnerLoops == 3);
+	test(d2.iOuterLoops == 4);
+	test(d.iTotal == 64);
+	test(d.iInnerLoops == 8);
+	test(d.iOuterLoops == 6);
+	__TRACE_LINE__;
+	t2.Suspend();
+	__TRACE_LINE__;
+	AppendToArray(d, 2, -8, -8);
+	test(d2.iTotal == 64);
+	test(d2.iInnerLoops == 3);
+	test(d2.iOuterLoops == 4);
+	test(d.iTotal == 48);
+	test(d.iInnerLoops == 9);
+	test(d.iOuterLoops == 7);
+	__TRACE_LINE__;
+	t2.Resume();
+	test(d2.iTotal == 48);
+	test(d2.iInnerLoops == 4);
+	test(d2.iOuterLoops == 5);
+	test(d.iTotal == 48);
+	test(d.iInnerLoops == 9);
+	test(d.iOuterLoops == 7);
+
+	// test timeouts
+	d.iTimeoutMs = 1000;
+	__TRACE_LINE__;
+	t.Suspend();
+	__TRACE_LINE__;
+	t.Resume();
+	test(d2.iTotal == 48);
+	test(d2.iInnerLoops == 4);
+	test(d2.iOuterLoops == 5);
+	test(d2.iTimeouts == 0);
+	test(d.iTotal == 48);
+	test(d.iInnerLoops == 10);
+	test(d.iOuterLoops == 7);
+	test(d.iTimeouts == 0);
+	test(array.Append(1)==0);
+	TInt nt = 0;
+	do	{
+		if (d.iTimeouts > nt)
+			{
+			test(d.iTimeouts-nt == 1);
+			nt = d.iTimeouts;
+			test.Printf(_L("Timeout %d\n"), nt);
+			test(d2.iTotal == 48);
+			test(d2.iInnerLoops == 4);
+			test(d2.iOuterLoops == 5);
+			test(d2.iTimeouts == 0);
+			test(d.iTotal == 48+nt);
+			test(d.iInnerLoops == 10+nt);
+			test(d.iOuterLoops == 7+nt);
+			test(array.Append(1)==0);
+			}
+		} while (nt<10);
+
+	d.iTimeoutMs = 0;
+	AppendToArrayB(d, 0);
+	test(d2.iTotal == 59);
+	test(d2.iInnerLoops == 5);
+	test(d2.iOuterLoops == 6);
+	test(d2.iTimeouts == 0);
+	test(d.iTotal == 59);
+	test(d.iInnerLoops == 21);
+	test(d.iOuterLoops == 18);
+	test(d.iTimeouts == 10);
+
+	__TRACE_LINE__;
+	t.SetPriority(EPriorityLess);
+	__TRACE_LINE__;
+	AppendToArrayB(d, 1, 11);
+	test(d2.iTotal == 70);
+	test(d2.iInnerLoops == 6);
+	test(d2.iOuterLoops == 7);
+	test(d2.iTimeouts == 0);
+	test(d.iTotal == 59);
+	test(d.iInnerLoops == 21);
+	test(d.iOuterLoops == 18);
+	test(d.iTimeouts == 10);
+	User::After(50000);
+	test(d2.iTotal == 70);
+	test(d2.iInnerLoops == 6);
+	test(d2.iOuterLoops == 7);
+	test(d2.iTimeouts == 0);
+	test(d.iTotal == 70);
+	test(d.iInnerLoops == 22);
+	test(d.iOuterLoops == 19);
+	test(d.iTimeouts == 10);
+
+
+
+	__TRACE_LINE__;
+	CV1.Close();
+	User::WaitForRequest(s);
+	test(t.ExitType()==EExitKill);
+	test(t.ExitReason()==KErrGeneral);
+	User::WaitForRequest(s2);
+	test(t2.ExitType()==EExitKill);
+	test(t2.ExitReason()==KErrGeneral);
+	CLOSE_AND_WAIT(t);
+	CLOSE_AND_WAIT(t2);
+
+
+	M1.Close();
+
+	TestGlobal();
+
+	Thread2Test();
+
+	TestSecondaryProcess();
+
+	RunBench();
+	M2.Close();
+	CV2.Close();
+	array.Close();
+
+	test.End();
+	test.Close();
+
+	__UHEAP_MARKEND;
+	__KHEAP_MARKEND;
+	return KErrNone;
+	}
+
--- a/kerneltest/e32test/system/t_ctrap.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/system/t_ctrap.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -1608,6 +1608,7 @@
 
 GLDEF_C TInt E32Main()
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 	test.Title();
 	
 	test.Start(_L("Test destructor causing stack reallocation"));
--- a/kerneltest/e32test/system/t_reg.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/system/t_reg.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -103,6 +103,7 @@
 // Test the registry functions.
 //
     {
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 
 	test.Title();
 //
--- a/kerneltest/e32test/thread/t_thread.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/e32test/thread/t_thread.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1500,7 +1500,8 @@
 //
 // Main
 //
-	{	
+	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
  
 	// don't want just in time debugging as we trap panics
 	TBool justInTime=User::JustInTime(); 
--- a/kerneltest/f32test/demandpaging/loader/t_pageldrtst.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/f32test/demandpaging/loader/t_pageldrtst.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -4923,6 +4923,7 @@
 
 TInt E32Main()
 	{
+	COMPLETE_POST_BOOT_SYSTEM_TASKS();
 #ifndef TEST_ON_UNPAGED
 	TRomHeader* romHeader = (TRomHeader*)UserSvr::RomHeaderAddress();
 	if(!romHeader->iPageableRomStart)
@@ -4930,14 +4931,6 @@
 		TestIsDemandPaged = EFalse;
 		}
 #endif
-	// Turn off lazy dll unloading
-	RLoader l;
-	if (l.Connect() == KErrNone)
-		{
-		l.CancelLazyDllUnload();
-		l.Close();
-		}
-	
 	HAL::Get(HAL::ESystemTickPeriod, TickPeriod);
 
 	SVMCacheInfo  tempPages;
--- a/kerneltest/f32test/loader/ldrtst.flm	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/f32test/loader/ldrtst.flm	Wed Oct 20 13:58:28 2010 +0100
@@ -1,5 +1,17 @@
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
 #
-# Copyright (c) 2009 Nokia Ltd.  All rights reserved.
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# f32test/loader/ldrtst.flm
 #
 
 GDIR:=gen
--- a/kerneltest/f32test/loader/ldrtst.mbc	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/f32test/loader/ldrtst.mbc	Wed Oct 20 13:58:28 2010 +0100
@@ -1,3 +1,17 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
 
 SECTION_COMMANDS
 
@@ -5,5 +19,3 @@
 oneoff \os\kernelhwsrv\kerneltest\f32test\loader abld test makefile
 oneoff \os\kernelhwsrv\kerneltest\f32test\loader abld test library
 oneoff \os\kernelhwsrv\kerneltest\f32test\loader abld -k test target
-
-
--- a/kerneltest/f32test/loader/ldrtst.mke	Mon Oct 18 15:31:10 2010 +0100
+++ b/kerneltest/f32test/loader/ldrtst.mke	Wed Oct 20 13:58:28 2010 +0100
@@ -1,6 +1,17 @@
-# f32test/loader/ldrtst.mke
+# Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
 #
-# Copyright (c) 2000 Symbian Ltd.  All rights reserved.
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# f32test/loader/ldrtst.mke
 #
 
 ifeq "$(OS)" "Windows_NT"
--- a/userlibandfileserver/fileserver/group/release.txt	Mon Oct 18 15:31:10 2010 +0100
+++ b/userlibandfileserver/fileserver/group/release.txt	Wed Oct 20 13:58:28 2010 +0100
@@ -1,3 +1,11 @@
+Version 2.00.4007
+=================
+(Made by fadhliM 15/10/2010)
+
+1.	vfebvre
+	1.	ou1cimx1#613596 ENV Incorrect/missing copyright notices in f32test/loader
+
+
 Version 2.00.4006
 =================
 (Made by fadhliM 13/10/2010)
--- a/userlibandfileserver/fileserver/inc/f32ver.h	Mon Oct 18 15:31:10 2010 +0100
+++ b/userlibandfileserver/fileserver/inc/f32ver.h	Wed Oct 20 13:58:28 2010 +0100
@@ -58,6 +58,6 @@
 
 @see TVersion
 */
-const TInt KF32BuildVersionNumber=4006;
+const TInt KF32BuildVersionNumber=4007;
 //
 #endif
--- a/userlibandfileserver/fileserver/sfile/sf_ldr.cpp	Mon Oct 18 15:31:10 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_ldr.cpp	Wed Oct 20 13:58:28 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -936,6 +936,12 @@
 		msg.Complete(KErrNone);
 		return;
 		}
+	if(mid==ELoaderRunReaper)
+		{
+		CReaperCleanupTimer::Complete();
+		msg.Complete(KErrNone);
+		return;
+		}
 #ifdef _DEBUG
 	gTheLoaderFs.ResourceCountMarkStart();
 #endif