Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
merge conflicts resolved
authorMarion Guthmuller <marion.guthmuller@loria.fr>
Wed, 11 Jan 2012 15:26:44 +0000 (16:26 +0100)
committerMarion Guthmuller <marion.guthmuller@loria.fr>
Wed, 11 Jan 2012 15:26:44 +0000 (16:26 +0100)
162 files changed:
.gitignore
CMakeLists.txt
ChangeLog
buildtools/Cmake/AddTests.cmake
buildtools/Cmake/CompleteInFiles.cmake
buildtools/Cmake/DefinePackages.cmake
buildtools/Cmake/GenerateDoc.cmake
buildtools/Cmake/GenerateDocWin.cmake [new file with mode: 0644]
buildtools/Cmake/MakeExe.cmake
buildtools/Cmake/MakeLibWin.cmake
buildtools/Cmake/Modules/FindPCRE.cmake
buildtools/Cmake/gras_config.h.in
buildtools/Cmake/simgrid.nsi.in
buildtools/Cmake/test_g5k.xml [deleted file]
buildtools/Cmake/test_prog/prog_sem_init.c
buildtools/Cmake/test_prog/prog_sem_open.c
buildtools/Cmake/update_tesh.pl
contrib/network_model/calibrate_piecewise.py
contrib/network_model/griffon_skampi_pt2pt.ski.dat [new file with mode: 0644]
contrib/network_model/pingpong-in.dat [new file with mode: 0644]
contrib/network_model/regress.py
contrib/network_model/regression2.py [new file with mode: 0755]
contrib/network_model/smpi_calibration.c [new file with mode: 0644]
doc/Doxyfile.in
doc/FAQ.doc [new file with mode: 0644]
doc/HelloWorld/CMakeLists.txt
doc/HelloWorld/HelloWorld.c
doc/HelloWorld/README
doc/installSimgrid.doc
doc/module-msg.doc
doc/options.doc
doc/tracing.doc
doc/triva-graph_visualization.png
doc/triva-graph_visualization.svg
doc/webcruft/simgrid_logo_win_2011.bmp [new file with mode: 0644]
examples/SimGrid.tesh [deleted file]
examples/gras/all2all/test_sg_32.tesh
examples/gras/all2all/test_sg_64.tesh
examples/gras/pmm/test_sg_32.tesh
examples/gras/pmm/test_sg_64.tesh
examples/lua/masterslave/master_slave.tesh
examples/lua/multi_matrix/mult_matrix.tesh
examples/msg/chord/chord.tesh
examples/msg/chord/chord10.xml [new file with mode: 0644]
examples/msg/chord/chord100.xml [new file with mode: 0644]
examples/msg/chord/chord_crosstraffic.tesh [new file with mode: 0644]
examples/msg/gtnets/crosstraffic-d.xml [moved from examples/msg/gtnets/fullduplex-d.xml with 100% similarity]
examples/msg/gtnets/crosstraffic-p.xml [moved from examples/msg/gtnets/fullduplex-p.xml with 100% similarity]
examples/msg/gtnets/gtnets-crosstraffic.tesh [moved from examples/msg/gtnets/gtnets-fullduplex.tesh with 53% similarity]
examples/msg/gtnets/gtnets.c
examples/msg/masterslave/masterslave.tesh
examples/msg/masterslave/masterslave_cpu_ti.tesh
examples/msg/masterslave/masterslave_cpu_ti_crosstraffic.tesh [new file with mode: 0644]
examples/msg/masterslave/masterslave_crosstraffic.tesh [new file with mode: 0644]
examples/msg/masterslave/masterslave_failure.tesh
examples/msg/masterslave/masterslave_failure_crosstraffic.tesh [new file with mode: 0644]
examples/msg/masterslave/masterslave_forwarder.tesh
examples/msg/masterslave/masterslave_forwarder_crosstraffic.tesh [new file with mode: 0644]
examples/msg/masterslave/masterslave_mailbox.tesh
examples/msg/masterslave/masterslave_mailbox_crosstraffic.tesh [new file with mode: 0644]
examples/msg/masterslave/masterslave_multicore.tesh
examples/msg/masterslave/masterslave_vivaldi.tesh
examples/msg/properties/deployment_properties.xml
examples/msg/properties/msg_prop.c
examples/msg/properties/msg_prop.tesh
examples/msg/sendrecv/sendrecv_CLM03.tesh
examples/msg/sendrecv/sendrecv_KCCFLN05.tesh
examples/msg/token_ring/token_ring.tesh
examples/msg/trace/trace.tesh
examples/platforms/cloud.xml
examples/platforms/data_center.xml
examples/platforms/generation_scripts/generate_g5k_platform.pl [moved from buildtools/Cmake/generate_g5k_platform.pl with 97% similarity]
examples/platforms/generation_scripts/generate_g5k_platform_cabinets.pl [moved from buildtools/Cmake/generate_g5k_platform_cabinets.pl with 97% similarity, mode: 0755]
examples/platforms/syscoord/median_harvard.xml
examples/platforms/syscoord/median_meridian.xml
examples/platforms/syscoord/median_p2psim.xml
examples/platforms/vivaldi.xml
examples/smpi/CMakeLists.txt
examples/smpi/bcast.tesh
examples/smpi/dsend.c [new file with mode: 0644]
examples/smpi/reduce.tesh
examples/smpi/sendtest.c [new file with mode: 0644]
include/msg/msg.h
include/simix/context.h
include/simix/simix.h
include/smpi/mpi.h
include/smpi/smpi.h
include/smpi/smpif.h.in
include/xbt/heap.h
src/bindings/lua/simgrid_lua.c
src/gras/Msg/sg_msg.c
src/include/surf/maxmin.h
src/include/surf/surf.h
src/instr/instr_config.c
src/instr/instr_paje.c
src/instr/instr_paje_trace.c
src/instr/instr_private.h
src/instr/instr_resource_utilization.c
src/instr/instr_smpi.c
src/mc/mc_checkpoint.c
src/mc/mc_global.c
src/mc/mc_liveness.c
src/mc/mc_request.c
src/msg/msg_global.c
src/msg/msg_gos.c
src/msg/msg_mailbox.c
src/msg/msg_private.h
src/msg/msg_process.c
src/msg/msg_task.c
src/simix/network_private.h
src/simix/private.h
src/simix/smurf_private.h
src/simix/smx_context.c
src/simix/smx_context_base.c
src/simix/smx_context_sysv.c
src/simix/smx_deployment.c
src/simix/smx_global.c
src/simix/smx_network.c
src/simix/smx_process.c
src/simix/smx_smurf.c
src/simix/smx_user.c
src/smpi/private.h
src/smpi/smpi_base.c
src/smpi/smpi_bench.c
src/smpi/smpi_coll.c
src/smpi/smpi_f77.c
src/smpi/smpi_global.c
src/smpi/smpi_pmpi.c
src/smpi/smpif2c.in
src/smpi/smpirun.in
src/surf/cpu.c [deleted file]
src/surf/cpu_cas01.c [moved from src/surf/cpu_im.c with 53% similarity]
src/surf/cpu_ti.c
src/surf/maxmin.c
src/surf/maxmin_private.h
src/surf/network.c
src/surf/network_constant.c
src/surf/network_im.c [deleted file]
src/surf/network_private.h
src/surf/surf.c
src/surf/surf_config.c
src/surf/surf_model.c
src/surf/surf_private.h
src/surf/surf_routing_cluster.c
src/surf/surf_routing_generic.c
src/surf/surf_routing_rulebased.c
src/surf/surfxml_parse.c
src/surf/workstation.c
src/surf/workstation_ptask_L07.c
src/xbt/heap_private.h
src/xbt/mmalloc/mm_legacy.c
src/xbt/parmap.c
src/xbt/xbt_os_thread.c
src/xbt/xbt_os_time.c
teshsuite/simdag/platforms/CMakeLists.txt
teshsuite/simdag/platforms/basic_parsing_test.tesh
teshsuite/simdag/platforms/basic_tracing.c [new file with mode: 0644]
teshsuite/simdag/platforms/properties.xml
testsuite/surf/lmm_usage.c
testsuite/surf/maxmin_bench.c
testsuite/surf/surf_usage2.c
tools/doxygen/doxygen_postprocesser.pl

index b5b3b84..39c9818 100644 (file)
@@ -139,7 +139,6 @@ examples/msg/tracing/volume
 examples/msg/mc/bugged3
 examples/msg/mc/random_test
 examples/msg/chord/chord
-examples/msg/chord/chord*.xml
 examples/msg/token_ring/token_ring
 examples/simdag/ex_sd_seq_access
 examples/simdag/sd_seq_access
index f136823..54b68d1 100644 (file)
@@ -136,24 +136,7 @@ if(WIN32)
     string(REGEX REPLACE "/bin/gcc.*" "/include"  CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
     string(REGEX REPLACE "/bin/gcc.*" "/lib"  CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
     set(INCLUDES ${INCLUDES} ${CMAKE_INCLUDE_WIN})
-    
-    if(BORLAND)                        ### BORLAND COMPILER
-           set(__BORLANDC__ 1)
-           set(CMAKE_COMPILER_IS_GNUCC 0)
-           set(MSVC 0)
-           set(_XBT_BORLANDC_COMPILER 1)
-    endif(BORLAND)
-    
-    if(MSVC)   ### MicroSoftVisualC COMPILER
-           set(__VISUALC__ 1)
-           set(BORLAND 0)
-           set(CMAKE_COMPILER_IS_GNUCC 0)
-           set(_XBT_VISUALC_COMPILER 1)
-           set(_MSC_VER 1)
-        set(__STRICT_ANSI__ 1)
-        set(_M_IX86 1)
-    endif(MSVC)
-    
+        
     if(CMAKE_COMPILER_IS_GNUCC)
         set(__GNUC__ 1)
         exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION")
@@ -169,6 +152,8 @@ if(WIN32)
         endif(COMPILER_C_MINOR_VERSION)
         set(MSVC 0)
            set(BORLAND 0)
+    else(CMAKE_COMPILER_IS_GNUCC)
+        message(FATAL_ERROR "Please use MinGW to compile SimGrid!")
     endif(CMAKE_COMPILER_IS_GNUCC)
     
     if(ARCH_32_BITS)   ### Arch 32bits
@@ -241,10 +226,13 @@ include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Distrib.cmake)
 ### Pipol compilation
 include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Pipol.cmake)
 
-if(NOT WIN32)
 ### Build the doc
+if(NOT WIN32)
 include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/GenerateDoc.cmake)
+else(NOT WIN32)
+include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/GenerateDocWin.cmake)  
 endif(NOT WIN32)
+
 ### Print ARGS
 include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/PrintArgs.cmake)
 
index 63e07ed..9f4c638 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,8 +3,34 @@ SimGrid (3.7) NOT RELEASED; urgency=low
   The "Simplicity does not preceed complexity, but follows it" release.
 
   Models:
+  * Change the correction factors used in LMM model, according to
+    the lastest experiments described in INRIA RR-7821. 
+    Accuracy should be improved this way.
   * Use the partial invalidation optimization by default for the
     network too. Should produce the exact same results, only faster.
+  * Major cleanup in surf to merge models and split some optimization
+    mechanisms from the core of the models. As a result you can now
+    specify which model to use (e.g., --cfg=network/model:LV08
+    --cfg=cpu/model:Cas01) and which optimization mode to use
+    (e.g., --cfg=network/optim:lazy --cfg=cpu/optim:TI).
+    Incompatible combinations should err at initialization. See
+    --help-models for the list of all models and optimization modes.
+  * The CLM03 workstation model were dropped for simplicity because it
+    used the deprecated CM02 network model. Use default instead.
+  * Rename the TCP_gamma configuration option to network/TCP_gamma
+  * Rename the coordinates configuration option to
+    network/coordinates, and document it
+  * Use now crosstraffic keyword instead of the terribly missleading 
+    fullduplex keyword. It is activated by default now in the current
+    default model, use --cfg=network/crosstraffic:0 to turn it off.
+
+  Simix:
+  * Stabilize the parallel execution mode of user contexts
+  * Introduce configuration variables to control parallel execution:
+    - contexts/synchro: Synchronization mode to use when running
+      contexts in parallel (either futex, posix or busy_wait)
+    - contexts/parallel_threshold: Minimal number of user contexts
+      to be run in parallel (raw contexts only)
 
   SimDag:
   * Performance boost by using a swag internally to compute the set of
index d5d96de..4f49828 100644 (file)
@@ -127,37 +127,59 @@ ADD_TEST(msg-sendrecv-CLM03-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     -
 ADD_TEST(msg-sendrecv-Vegas-thread     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Vegas.tesh)
 ADD_TEST(msg-sendrecv-Reno-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Reno.tesh)
 ADD_TEST(msg-suspend-thread    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/suspend/suspend.tesh)
-ADD_TEST(msg-masterslave-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave.tesh)
-ADD_TEST(msg-masterslave-forwarder-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder.tesh)
-ADD_TEST(msg-masterslave-failure-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh)
 ADD_TEST(msg-masterslave-bypass-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_bypass.tesh)
-ADD_TEST(msg-masterslave-mailbox-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh)
 ADD_TEST(msg-masterslave-kill-thread   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_kill.tesh)
+ADD_TEST(msg-masterslave-multicore-thread   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_multicore.tesh)
+
+ADD_TEST(msg-masterslave-no-crosstraffic-mailbox-thread     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh)
+ADD_TEST(msg-masterslave-no-crosstraffic-thread             ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave.tesh)
+ADD_TEST(msg-masterslave-no-crosstraffic-forwarder-thread   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder.tesh)
+ADD_TEST(msg-masterslave-no-crosstraffic-failure-thread     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh)
+
+ADD_TEST(msg-masterslave-thread                ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_crosstraffic.tesh)
+ADD_TEST(msg-masterslave-forwarder-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder_crosstraffic.tesh)
+ADD_TEST(msg-masterslave-failure-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure_crosstraffic.tesh)
+ADD_TEST(msg-masterslave-mailbox-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox_crosstraffic.tesh)
+ADD_TEST(msg-masterslave-cpu-ti-thread         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave    --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti_crosstraffic.tesh)
 
 if(HAVE_UCONTEXT_H)
        ADD_TEST(msg-sendrecv-CLM03-ucontext    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh)
        ADD_TEST(msg-sendrecv-Vegas-ucontext    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Vegas.tesh)
        ADD_TEST(msg-sendrecv-Reno-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Reno.tesh)
        ADD_TEST(msg-suspend-ucontext   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/suspend/suspend.tesh)
-       ADD_TEST(msg-masterslave-ucontext       ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave.tesh)
-       ADD_TEST(msg-masterslave-forwarder-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder.tesh)
-       ADD_TEST(msg-masterslave-failure-ucontext       ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh)
        ADD_TEST(msg-masterslave-bypass-ucontext        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_bypass.tesh)
-       ADD_TEST(msg-masterslave-mailbox-ucontext       ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh)
     ADD_TEST(msg-masterslave-kill-ucontext         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_kill.tesh)
+    ADD_TEST(msg-masterslave-multicore-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext     --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_multicore.tesh)
+    ADD_TEST(msg-masterslave-no-crosstraffic-mailbox-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh)
+    ADD_TEST(msg-masterslave-no-crosstraffic-ucontext             ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave.tesh)
+    ADD_TEST(msg-masterslave-no-crosstraffic-forwarder-ucontext   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder.tesh)
+    ADD_TEST(msg-masterslave-no-crosstraffic-failure-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh)
+    
+    ADD_TEST(msg-masterslave-ucontext                ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_crosstraffic.tesh)
+    ADD_TEST(msg-masterslave-forwarder-ucontext      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder_crosstraffic.tesh)
+    ADD_TEST(msg-masterslave-failure-ucontext        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure_crosstraffic.tesh)
+    ADD_TEST(msg-masterslave-mailbox-ucontext        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox_crosstraffic.tesh)
+    ADD_TEST(msg-masterslave-cpu-ti-ucontext         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave    --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti_crosstraffic.tesh)
 endif(HAVE_UCONTEXT_H)
 
 if(HAVE_RAWCTX)
-  ADD_TEST(msg-sendrecv-CLM03-raw              ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh)
-  ADD_TEST(msg-sendrecv-Vegas-raw              ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Vegas.tesh)
-  ADD_TEST(msg-sendrecv-Reno-raw               ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Reno.tesh)
-  ADD_TEST(msg-suspend-raw             ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/suspend/suspend.tesh)
-  ADD_TEST(msg-masterslave-raw         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave.tesh)
-  ADD_TEST(msg-masterslave-forwarder-raw               ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder.tesh)
-  ADD_TEST(msg-masterslave-failure-raw         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh)
-  ADD_TEST(msg-masterslave-bypass-raw          ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_bypass.tesh)
-  ADD_TEST(msg-masterslave-mailbox-raw         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh)
-  ADD_TEST(msg-masterslave-kill-raw            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_kill.tesh)
+    ADD_TEST(msg-sendrecv-CLM03-raw            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh)
+    ADD_TEST(msg-sendrecv-Vegas-raw            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Vegas.tesh)
+    ADD_TEST(msg-sendrecv-Reno-raw             ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Reno.tesh)
+    ADD_TEST(msg-suspend-raw           ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/suspend/suspend.tesh)
+    ADD_TEST(msg-masterslave-bypass-raw                ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_bypass.tesh)
+    ADD_TEST(msg-masterslave-kill-raw          ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_kill.tesh)
+    ADD_TEST(msg-masterslave-multicore-raw      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_multicore.tesh)
+    ADD_TEST(msg-masterslave-no-crosstraffic-mailbox-raw     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh)
+    ADD_TEST(msg-masterslave-no-crosstraffic-raw             ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave.tesh)
+    ADD_TEST(msg-masterslave-no-crosstraffic-forwarder-raw   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder.tesh)
+    ADD_TEST(msg-masterslave-no-crosstraffic-failure-raw     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh)
+    
+    ADD_TEST(msg-masterslave-raw                ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_crosstraffic.tesh)
+    ADD_TEST(msg-masterslave-forwarder-raw      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder_crosstraffic.tesh)
+    ADD_TEST(msg-masterslave-failure-raw        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure_crosstraffic.tesh)
+    ADD_TEST(msg-masterslave-mailbox-raw        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox_crosstraffic.tesh)
+    ADD_TEST(msg-masterslave-cpu-ti-raw         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave    --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti_crosstraffic.tesh)
 endif(HAVE_RAWCTX)
 
 ADD_TEST(msg-masterslave-vivaldi-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_vivaldi.tesh)
@@ -171,42 +193,42 @@ if(HAVE_UCONTEXT_H)
        ADD_TEST(msg-token-ring-ucontext        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring         --cd ${CMAKE_BINARY_DIR}/examples/msg/token_ring ${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring/token_ring.tesh)
 endif(HAVE_UCONTEXT_H)
 
-ADD_TEST(msg-masterslave-multicore-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_multicore.tesh)
 ADD_TEST(msg-migration-thread  ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/migration/migration.tesh)
 ADD_TEST(msg-ptask-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task/parallel_task.tesh)
 ADD_TEST(msg-priority-thread   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/priority/priority.tesh)
 ADD_TEST(msg-properties-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/properties/msg_prop.tesh)
 ADD_TEST(msg-icomms-thread     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms     --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh)
 ADD_TEST(msg-actions-thread    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/actions        --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/actions actions.tesh)
-ADD_TEST(msg-masterslave-cpu-ti-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave    --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti.tesh)
 ADD_TEST(msg-trace-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg        --cd ${CMAKE_HOME_DIRECTORY}/examples/msg trace/trace.tesh)
-ADD_TEST(msg-chord-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
-ADD_TEST(msg-chord-thread-parallel     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --cfg contexts/nthreads:4       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+ADD_TEST(msg-chord-no-crosstraffic-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+ADD_TEST(msg-chord-no-crosstraffic-thread-parallel     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --cfg contexts/nthreads:4       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+ADD_TEST(msg-chord-thread   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord_crosstraffic.tesh)
+ADD_TEST(msg-chord-thread-parallel  ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --cfg contexts/nthreads:4   --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord_crosstraffic.tesh)
 if(HAVE_UCONTEXT_H)
-       ADD_TEST(msg-masterslave-multicore-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_multicore.tesh)
        ADD_TEST(msg-migration-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/migration/migration.tesh)
        ADD_TEST(msg-ptask-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task/parallel_task.tesh)
        ADD_TEST(msg-priority-ucontext  ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/priority/priority.tesh)
        ADD_TEST(msg-properties-ucontext        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/properties/msg_prop.tesh)
        ADD_TEST(msg-icomms-ucontext    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms     --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh)
        ADD_TEST(msg-actions-ucontext   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/actions        --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/actions actions.tesh)
-       ADD_TEST(msg-masterslave-cpu-ti-ucontext        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave    --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti.tesh)
        ADD_TEST(msg-trace-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg        --cd ${CMAKE_HOME_DIRECTORY}/examples/msg trace/trace.tesh)
-       ADD_TEST(msg-chord-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
-       ADD_TEST(msg-chord-ucontext-parallel    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --cfg contexts/nthreads:4       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+       ADD_TEST(msg-chord-no-crosstraffic-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+       ADD_TEST(msg-chord-no-crosstraffic-ucontext-parallel    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --cfg contexts/nthreads:4       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+    ADD_TEST(msg-chord-ucontext            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext      --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord_crosstraffic.tesh)
+    ADD_TEST(msg-chord-ucontext-parallel   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext       --cfg contexts/nthreads:4   --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord_crosstraffic.tesh)
 endif(HAVE_UCONTEXT_H)
 if(HAVE_RAWCTX)
-  ADD_TEST(msg-masterslave-multicore-raw               ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_multicore.tesh)
-  ADD_TEST(msg-migration-raw           ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/migration/migration.tesh)
-  ADD_TEST(msg-ptask-raw               ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task/parallel_task.tesh)
-  ADD_TEST(msg-priority-raw            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/priority/priority.tesh)
-  ADD_TEST(msg-actions-raw             ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/actions        --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/actions actions.tesh)
-  ADD_TEST(msg-icomms-raw              ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms     --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh)
-  ADD_TEST(msg-properties-raw          ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/properties/msg_prop.tesh)
-  ADD_TEST(msg-masterslave-cpu-ti-raw          ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave    --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti.tesh)
-  ADD_TEST(msg-trace-raw               ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg        --cd ${CMAKE_HOME_DIRECTORY}/examples/msg trace/trace.tesh)
-  ADD_TEST(msg-chord-raw       ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
-  ADD_TEST(msg-chord-raw-parallel      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw      --cfg contexts/nthreads:4       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+    ADD_TEST(msg-migration-raw         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/migration/migration.tesh)
+    ADD_TEST(msg-ptask-raw             ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task/parallel_task.tesh)
+    ADD_TEST(msg-priority-raw          ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/priority/priority.tesh)
+    ADD_TEST(msg-actions-raw           ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/actions        --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/actions actions.tesh)
+    ADD_TEST(msg-icomms-raw            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/icomms     --cd ${CMAKE_BINARY_DIR}/examples/msg/icomms ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/peer.tesh)
+    ADD_TEST(msg-properties-raw                ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/properties/msg_prop.tesh)
+    ADD_TEST(msg-trace-raw             ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg        --cd ${CMAKE_HOME_DIRECTORY}/examples/msg trace/trace.tesh)
+    ADD_TEST(msg-chord-no-crosstraffic-raw     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+    ADD_TEST(msg-chord-no-crosstraffic-raw-parallel    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw      --cfg contexts/nthreads:4       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord.tesh)
+    ADD_TEST(msg-chord-raw   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord_crosstraffic.tesh)
+    ADD_TEST(msg-chord-raw-parallel  ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw       --cfg contexts/nthreads:4   --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chord  --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/chord chord_crosstraffic.tesh)
 endif(HAVE_RAWCTX)
 
 IF(${ARCH_32_BITS})
@@ -325,20 +347,22 @@ ADD_TEST(simdag-test-simdag-seq-access            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTI
 ADD_TEST(simdag-test-prop              ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag         --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/properties/test_prop.tesh)
 ADD_TEST(simdag-minmin-test            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/scheduling  --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag/scheduling test_minmin.tesh)
 
+ADD_TEST(msg-gtnets-crosstraffic-thread   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread       --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-crosstraffic.tesh)
+ADD_TEST(msg-gtnets-crosstraffic-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext     --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-crosstraffic.tesh)
+ADD_TEST(msg-gtnets-crosstraffic-raw      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw      --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-crosstraffic.tesh)
+
 if(HAVE_GTNETS)
 ADD_TEST(msg-gtnets-waxman-thread      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh)
 ADD_TEST(msg-gtnets-dogbone-thread     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-gtnets.tesh)
 ADD_TEST(msg-gtnets-onelink-thread     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-gtnets.tesh)
 ADD_TEST(msg-gtnets-dogbone-lv08-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-lv08.tesh)
 ADD_TEST(msg-gtnets-onelink-lv08-thread        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-lv08.tesh)
-ADD_TEST(msg-gtnets-fullduplex-thread  ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:thread           --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-fullduplex.tesh)
 if(HAVE_UCONTEXT_H)
        ADD_TEST(msg-gtnets-waxman-ucontext     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh)
        ADD_TEST(msg-gtnets-dogbone-ucontext    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-gtnets.tesh)
        ADD_TEST(msg-gtnets-onelink-ucontext    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-gtnets.tesh)
        ADD_TEST(msg-gtnets-dogbone-lv08-ucontext       ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-lv08.tesh)
        ADD_TEST(msg-gtnets-onelink-lv08-ucontext       ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-lv08.tesh)
-       ADD_TEST(msg-gtnets-fullduplex-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:ucontext         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-fullduplex.tesh)
 endif(HAVE_UCONTEXT_H)
 if(HAVE_RAWCTX)
        ADD_TEST(msg-gtnets-waxman-raw          ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh)
@@ -346,7 +370,6 @@ if(HAVE_RAWCTX)
        ADD_TEST(msg-gtnets-onelink-raw         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-gtnets.tesh)
        ADD_TEST(msg-gtnets-dogbone-lv08-raw            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-lv08.tesh)
        ADD_TEST(msg-gtnets-onelink-lv08-raw            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-lv08.tesh)
-       ADD_TEST(msg-gtnets-fullduplex-raw              ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION}     --cfg contexts/factory:raw              --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg    --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-fullduplex.tesh)
 endif(HAVE_RAWCTX)
 
   if(HAVE_TRACING)
@@ -463,6 +486,16 @@ if(HAVE_MC)
            set_tests_properties(mc-centralized-raw PROPERTIES WILL_FAIL true)
        endif(HAVE_RAWCTX)
 endif(HAVE_MC)
+
+# Those tests are broken due to wrong sort of tesh... TODO sort with more characters
+set_tests_properties(msg-chord-thread msg-chord-thread-parallel PROPERTIES WILL_FAIL true)
+if(HAVE_UCONTEXT_H)
+    set_tests_properties(msg-chord-ucontext msg-chord-ucontext-parallel PROPERTIES WILL_FAIL true)
+endif(HAVE_UCONTEXT_H)
+if(HAVE_RAWCTX)
+    set_tests_properties(msg-chord-raw msg-chord-raw-parallel PROPERTIES WILL_FAIL true)
+endif(HAVE_RAWCTX)
+
 endif(release)
 
 endif(NOT enable_memcheck)
index 1f422e1..7c1511c 100644 (file)
@@ -6,6 +6,7 @@ ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Modules
 # x86_64
 # x86
 # i.86
+
 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86")
     IF(${ARCH_32_BITS})
         set(PROCESSOR_i686 1)
@@ -75,6 +76,9 @@ if(enable_gtnets)
 endif(enable_gtnets)
 if(enable_smpi)
        include(FindF2c)
+       if(HAVE_F2C_H)
+        SET(HAVE_SMPI 1)
+    endif(HAVE_F2C_H)
 endif(enable_smpi)
 if(enable_lua)
        include(FindLua51Simgrid)
@@ -136,8 +140,12 @@ CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
 CHECK_FUNCTION_EXISTS(mergesort HAVE_MERGESORT)
 
 #Check if __thread is defined
-exec_program("${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_thread_storage.c" 
-                       OUTPUT_VARIABLE HAVE_thread_storage_run)
+execute_process(
+COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_thread_storage.c"
+WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+OUTPUT_VARIABLE HAVE_thread_storage_run
+)
+
 if(HAVE_thread_storage_run)
        set(HAVE_THREAD_LOCAL_STORAGE 0)
 else(HAVE_thread_storage_run)
@@ -206,43 +214,65 @@ endif(pthread)
 
 if(pthread)
        ### Test that we have a way to create semaphores
-       
-       if(HAVE_SEM_OPEN_LIB)
-               exec_program("${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_open.c -lpthread -o testprog"
-                            OUTPUT_VARIABLE HAVE_SEM_OPEN_run)
-               if(HAVE_SEM_OPEN_run)
-                       set(HAVE_SEM_OPEN 0)
-                       message(STATUS "Warning: sem_open not compilable")
-               else(HAVE_SEM_OPEN_run)
-                       exec_program("./testprog" RETURN_VALUE HAVE_SEM_OPEN_run2 OUTPUT_VARIABLE var_compil)
-                       if(HAVE_SEM_OPEN_run2)
-                               set(HAVE_SEM_OPEN 0)
-                               message(STATUS "Warning: sem_open not executable")
-                       else(HAVE_SEM_OPEN_run2)
-                               set(HAVE_SEM_OPEN 1)
-                       endif(HAVE_SEM_OPEN_run2)       
-               endif(HAVE_SEM_OPEN_run)
-        else(HAVE_SEM_OPEN_LIB)
+
+    if(HAVE_SEM_OPEN_LIB)
+    
+        exec_program(
+        "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_open.c -lpthread -o testprog"
+        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+        OUTPUT_VARIABLE HAVE_SEM_OPEN_compil
+        )
+    
+       if(HAVE_SEM_OPEN_compil)
+               set(HAVE_SEM_OPEN 0)
+               message(STATUS "Warning: sem_open not compilable")
+               message(STATUS "HAVE_SEM_OPEN_comp_output: ${HAVE_SEM_OPEN_comp_output}")       
+       else(HAVE_SEM_OPEN_compil)
+               set(HAVE_SEM_OPEN 1)
+            message(STATUS "sem_open is compilable")
+       endif(HAVE_SEM_OPEN_compil)
+        
+        exec_program("${CMAKE_BINARY_DIR}/testprog" RETURN_VALUE HAVE_SEM_OPEN_run OUTPUT_VARIABLE var_compil)
+        file(REMOVE "${CMAKE_BINARY_DIR}/testprog*")
+       
+       if(NOT HAVE_SEM_OPEN_run)
+           set(HAVE_SEM_OPEN 1)
+            message(STATUS "sem_open is executable")
+        else(NOT HAVE_SEM_OPEN_run)
+               set(HAVE_SEM_OPEN 0)
+           message(STATUS "Warning: sem_open not executable")          
+        endif(NOT HAVE_SEM_OPEN_run)   
+    
+    else(HAVE_SEM_OPEN_LIB)
                set(HAVE_SEM_OPEN 0)
        endif(HAVE_SEM_OPEN_LIB)
 
        if(HAVE_SEM_INIT_LIB)
-               exec_program("${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_init.c -lpthread -o testprog"
-                            OUTPUT_VARIABLE HAVE_SEM_INIT_run)
-               if(HAVE_SEM_INIT_run)
-                       set(HAVE_SEM_INIT 0)
-                       message(STATUS "Warning: sem_init not compilable")
-               else(HAVE_SEM_INIT_run)
-                       exec_program("./testprog" RETURN_VALUE HAVE_SEM_INIT_run OUTPUT_VARIABLE var_compil)
-                       if(HAVE_SEM_INIT_run)
-                               set(HAVE_SEM_INIT 0)
-                               message(STATUS "Warning: sem_init not executable")
-                       else(HAVE_SEM_INIT_run)
-                               set(HAVE_SEM_INIT 1)
-                       endif(HAVE_SEM_INIT_run)
-               endif(HAVE_SEM_INIT_run)
-        else(HAVE_SEM_INIT_LIB)
-               set(HAVE_SEM_INIT 0)
+        exec_program(
+        "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_init.c -lpthread -o testprog"
+        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+        OUTPUT_VARIABLE HAVE_SEM_INIT_compil
+        )
+    
+       if(HAVE_SEM_INIT_compil)
+               set(HAVE_SEM_INIT 0)
+               message(STATUS "Warning: sem_init not compilable")
+               message(STATUS "HAVE_SEM_INIT_comp_output: ${HAVE_SEM_OPEN_comp_output}")       
+       else(HAVE_SEM_INIT_compil)
+               set(HAVE_SEM_INIT 1)
+            message(STATUS "sem_init is compilable")
+       endif(HAVE_SEM_INIT_compil)
+
+        exec_program("${CMAKE_BINARY_DIR}/testprog" RETURN_VALUE HAVE_SEM_INIT_run OUTPUT_VARIABLE var_compil)
+        file(REMOVE "${CMAKE_BINARY_DIR}/testprog*")
+        
+       if(NOT HAVE_SEM_INIT_run)
+           set(HAVE_SEM_INIT 1)
+            message(STATUS "sem_init is executable")
+        else(NOT HAVE_SEM_INIT_run)
+               set(HAVE_SEM_INIT 0)
+           message(STATUS "Warning: sem_init not executable")
+        endif(NOT HAVE_SEM_INIT_run)   
        endif(HAVE_SEM_INIT_LIB)
 
        if(NOT HAVE_SEM_OPEN AND NOT HAVE_SEM_INIT)
@@ -252,21 +282,37 @@ if(pthread)
        ### Test that we have a way to timewait for semaphores
 
        if(HAVE_SEM_TIMEDWAIT_LIB)
-               exec_program("${CMAKE_C_COMPILER} -lpthread ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_timedwait.c" OUTPUT_VARIABLE HAVE_SEM_TIMEDWAIT_run)
+
+        execute_process(
+        COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_timedwait.c -lpthread"
+        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+        OUTPUT_VARIABLE HAVE_SEM_TIMEDWAIT_run
+        )
+        
                if(HAVE_SEM_TIMEDWAIT_run)
                        set(HAVE_SEM_TIMEDWAIT 0)
+                       message(STATUS "timedwait not compilable")
                else(HAVE_SEM_TIMEDWAIT_run)
                        set(HAVE_SEM_TIMEDWAIT 1)
+            message(STATUS "timedwait is compilable")
                endif(HAVE_SEM_TIMEDWAIT_run)
        endif(HAVE_SEM_TIMEDWAIT_LIB)
 
        ### HAVE_MUTEX_TIMEDLOCK
 
        if(HAVE_MUTEX_TIMEDLOCK_LIB)
-               exec_program("${CMAKE_C_COMPILER} -lpthread ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_mutex_timedlock.c" OUTPUT_VARIABLE HAVE_SEM_TIMEDWAIT_run)
+
+        execute_process(
+        COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_mutex_timedlock.c -lpthread"
+        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+        OUTPUT_VARIABLE HAVE_MUTEX_TIMEDLOCK_run
+        )
+
                if(HAVE_MUTEX_TIMEDLOCK_run)
                        set(HAVE_MUTEX_TIMEDLOCK 0)
+                       message(STATUS "timedlock not compilable")
                else(HAVE_MUTEX_TIMEDLOCK_run)
+                       message(STATUS "timedlock is compilable")
                        set(HAVE_MUTEX_TIMEDLOCK 1)
                endif(HAVE_MUTEX_TIMEDLOCK_run)
        endif(HAVE_MUTEX_TIMEDLOCK_LIB)
@@ -279,12 +325,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
 endif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
 
 if(WIN32)
-    if(__VISUALC__)
-       set(mcsc_flags "/D_XBT_WIN32 /I${CMAKE_HOME_DIRECTORY}/include/xbt /I${CMAKE_HOME_DIRECTORY}/src/xbt")
-       endif(__VISUALC__)
-       if(__GNUC__)
-               set(mcsc_flags "-D_XBT_WIN32 -I${CMAKE_HOME_DIRECTORY}/include/xbt -I${CMAKE_HOME_DIRECTORY}/src/xbt")
-       endif(__GNUC__)
+       set(mcsc_flags "-D_XBT_WIN32 -I${CMAKE_HOME_DIRECTORY}/include/xbt -I${CMAKE_HOME_DIRECTORY}/src/xbt")
 endif(WIN32)
 
 IF(CMAKE_CROSSCOMPILING)
@@ -293,25 +334,31 @@ IF(CMAKE_CROSSCOMPILING)
                set(IS_WINDOWS 1)       
        ENDIF(WIN32)
 ELSE(CMAKE_CROSSCOMPILING)
-       try_run(RUN_mcsc_VAR COMPILE_mcsc_VAR
-               ${PROJECT_BINARY_DIR}
-               ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_AC_CHECK_MCSC.c
-               COMPILE_DEFINITIONS "${mcsc_flags}"
-               OUTPUT_VARIABLE var_compil
-               )
-               
-               if(EXISTS "${PROJECT_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR)
-                       file(READ "${PROJECT_BINARY_DIR}/conftestval" mcsc)
-                       STRING(REPLACE "\n" "" mcsc "${mcsc}")
-                       if(mcsc)
-                               set(mcsc "yes")
-                               set(HAVE_UCONTEXT_H 1)
-                       else(mcsc)
-                               set(mcsc "no")
-                       endif(mcsc)
-           else(EXISTS "${PROJECT_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR)
+    exec_program(
+                 "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_AC_CHECK_MCSC.c ${mcsc_flags} -o testprog"
+                 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/
+                 OUTPUT_VARIABLE COMPILE_mcsc_VAR)
+
+    file(REMOVE ${CMAKE_BINARY_DIR}/conftestval)
+    if(NOT COMPILE_mcsc_VAR)
+        exec_program("${CMAKE_BINARY_DIR}/testprog" OUTPUT_VARIABLE var_compil)
+    endif(NOT COMPILE_mcsc_VAR)
+    file(REMOVE "${CMAKE_BINARY_DIR}/testprog*")
+    
+       if(EXISTS "${CMAKE_BINARY_DIR}/conftestval")
+               file(READ "${CMAKE_BINARY_DIR}/conftestval" mcsc)
+               STRING(REPLACE "\n" "" mcsc "${mcsc}")
+               if(mcsc)
+                       set(mcsc "yes")
+                       set(HAVE_UCONTEXT_H 1)
+               else(mcsc)
                        set(mcsc "no")
-               endif(EXISTS "${PROJECT_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR)
+               endif(mcsc)
+    else(EXISTS "${CMAKE_BINARY_DIR}/conftestval")
+               set(mcsc "no")
+       endif(EXISTS "${CMAKE_BINARY_DIR}/conftestval")
+       
+       message(STATUS "mcsc: ${mcsc}")   
 ENDIF(CMAKE_CROSSCOMPILING)
 
 if(mcsc MATCHES "no" AND pthread)
@@ -349,7 +396,7 @@ endif(pthread)
 ###############
 ## SVN version check
 ##
-if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
+if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/ AND NOT WIN32)
 exec_program("git remote | head -n 1" OUTPUT_VARIABLE remote RETURN_VALUE ret)
 exec_program("git config --get remote.${remote}.url" OUTPUT_VARIABLE url RETURN_VALUE ret)
 
@@ -363,7 +410,7 @@ if(url)
        STRING(REPLACE " " "~" GIT_DATE ${GIT_DATE})
        STRING(REPLACE ":" "-" GIT_DATE ${GIT_DATE})
 endif(url)
-endif(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
+endif(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/ AND NOT WIN32)
 
 ###################################
 ## SimGrid and GRAS specific checks
@@ -372,7 +419,7 @@ endif(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
 IF(NOT CMAKE_CROSSCOMPILING)
 # Check architecture signature begin
 try_run(RUN_GRAS_VAR COMPILE_GRAS_VAR
-       ${PROJECT_BINARY_DIR}
+       ${CMAKE_BINARY_DIR}
        ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_GRAS_ARCH.c
        RUN_OUTPUT_VARIABLE var1
        )
@@ -483,7 +530,7 @@ endif(GRAS_THISARCH MATCHES "none")
 
 # Check architecture signature end
 try_run(RUN_GRAS_VAR COMPILE_GRAS_VAR
-       ${PROJECT_BINARY_DIR}
+       ${CMAKE_BINARY_DIR}
        ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_GRAS_CHECK_STRUCT_COMPACTION.c
        RUN_OUTPUT_VARIABLE var2
        )
@@ -494,10 +541,11 @@ endforeach(var_tmp ${var2})
 
 # Check for [SIZEOF_MAX]
 try_run(RUN_SM_VAR COMPILE_SM_VAR
-       ${PROJECT_BINARY_DIR}
+       ${CMAKE_BINARY_DIR}
        ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_max_size.c
        RUN_OUTPUT_VARIABLE var3
        )
+message(STATUS "SIZEOF_MAX ${var3}")
 SET(SIZEOF_MAX ${var3})
 ENDIF(NOT CMAKE_CROSSCOMPILING)
 
@@ -510,29 +558,37 @@ if(HAVE_MAKECONTEXT OR WIN32)
                set(makecontext_CPPFLAGS_2 "-D_XOPEN_SOURCE")
        endif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
        
-    if(WIN32 AND __VISUALC__)
-        set(makecontext_CPPFLAGS "/DTEST_makecontext")
-           set(makecontext_CPPFLAGS_2 "/D_XBT_WIN32 /I${CMAKE_HOME_DIRECTORY}/include/xbt /I${CMAKE_HOME_DIRECTORY}/src/xbt")
-       endif(WIN32 AND __VISUALC__)
-       if(WIN32 AND __GNUC__)
+    if(WIN32)
+        if(ARCH_32_BITS)
            set(makecontext_CPPFLAGS "-DTEST_makecontext")
+           else(ARCH_32_BITS)
+           set(makecontext_CPPFLAGS "-DTEST_makecontext -D_AMD64_")
+           endif(ARCH_32_BITS)
            set(makecontext_CPPFLAGS_2 "-D_XBT_WIN32 -I${CMAKE_HOME_DIRECTORY}/include/xbt -I${CMAKE_HOME_DIRECTORY}/src/xbt")
-       endif(WIN32 AND __GNUC__)
+       endif(WIN32)
+
+    file(REMOVE ${CMAKE_BINARY_DIR}/conftestval)
        
        try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
-               ${PROJECT_BINARY_DIR}
+               ${CMAKE_BINARY_DIR}
                ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_stacksetup.c
                COMPILE_DEFINITIONS "${makecontext_CPPFLAGS} ${makecontext_CPPFLAGS_2}"
                )
-       file(READ ${PROJECT_BINARY_DIR}/conftestval MAKECONTEXT_ADDR_SIZE)
-       string(REPLACE "\n" "" MAKECONTEXT_ADDR_SIZE "${MAKECONTEXT_ADDR_SIZE}")
-       string(REGEX MATCH ;^.*,;MAKECONTEXT_ADDR "${MAKECONTEXT_ADDR_SIZE}")
-       string(REGEX MATCH ;,.*$; MAKECONTEXT_SIZE "${MAKECONTEXT_ADDR_SIZE}")
-       string(REPLACE "," "" makecontext_addr "${MAKECONTEXT_ADDR}")
-       string(REPLACE "," "" makecontext_size "${MAKECONTEXT_SIZE}")   
-       set(pth_skaddr_makecontext "#define pth_skaddr_makecontext(skaddr,sksize) (${makecontext_addr})")
-       set(pth_sksize_makecontext "#define pth_sksize_makecontext(skaddr,sksize) (${makecontext_size})")
-       
+
+    if(EXISTS ${CMAKE_BINARY_DIR}/conftestval)
+       file(READ ${CMAKE_BINARY_DIR}/conftestval MAKECONTEXT_ADDR_SIZE)
+       string(REPLACE "\n" "" MAKECONTEXT_ADDR_SIZE "${MAKECONTEXT_ADDR_SIZE}")
+       string(REGEX MATCH ;^.*,;MAKECONTEXT_ADDR "${MAKECONTEXT_ADDR_SIZE}")
+       string(REGEX MATCH ;,.*$; MAKECONTEXT_SIZE "${MAKECONTEXT_ADDR_SIZE}")
+       string(REPLACE "," "" makecontext_addr "${MAKECONTEXT_ADDR}")
+       string(REPLACE "," "" makecontext_size "${MAKECONTEXT_SIZE}")   
+       set(pth_skaddr_makecontext "#define pth_skaddr_makecontext(skaddr,sksize) (${makecontext_addr})")
+       set(pth_sksize_makecontext "#define pth_sksize_makecontext(skaddr,sksize) (${makecontext_size})")
+       message(STATUS "${pth_skaddr_makecontext}")
+       message(STATUS "${pth_sksize_makecontext}")
+       else(EXISTS ${CMAKE_BINARY_DIR}/conftestval)
+#          message(FATAL_ERROR "makecontext is not compilable")
+       endif(EXISTS ${CMAKE_BINARY_DIR}/conftestval)
 endif(HAVE_MAKECONTEXT OR WIN32)
 
 #--------------------------------------------------------------------------------------------------
@@ -540,10 +596,10 @@ endif(HAVE_MAKECONTEXT OR WIN32)
 ### check for stackgrowth
 if (NOT CMAKE_CROSSCOMPILING)
        try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
-               ${PROJECT_BINARY_DIR}
+               ${CMAKE_BINARY_DIR}
                ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_stackgrowth.c
                )
-file(READ "${PROJECT_BINARY_DIR}/conftestval" stack)
+file(READ "${CMAKE_BINARY_DIR}/conftestval" stack)
 if(stack MATCHES "down")
        set(PTH_STACKGROWTH "-1")
 endif(stack MATCHES "down")
@@ -565,7 +621,7 @@ endif(NOT CMAKE_CROSSCOMPILING)
 
 #AC_PRINTF_NULL
 try_run(RUN_PRINTF_NULL_VAR COMPILE_PRINTF_NULL_VAR
-       ${PROJECT_BINARY_DIR}
+       ${CMAKE_BINARY_DIR}
        ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_printf_null.c
        )
 
@@ -618,7 +674,7 @@ foreach(fct ${diff_va})
        }"
        )
        try_compile(COMPILE_VA_NULL_VAR
-       ${PROJECT_BINARY_DIR}
+       ${CMAKE_BINARY_DIR}
        ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_va_copy.c
        )
        if(COMPILE_VA_NULL_VAR)
@@ -676,7 +732,7 @@ endforeach(fct ${diff_va})
 #--------------------------------------------------------------------------------------------------
 ### check for getline
 try_compile(COMPILE_RESULT_VAR
-       ${PROJECT_BINARY_DIR}
+       ${CMAKE_BINARY_DIR}
        ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_getline.c
        )
 
@@ -700,7 +756,7 @@ if(HAVE_SNPRINTF AND HAVE_VSNPRINTF OR WIN32)
                #set(PREFER_PORTABLE_SNPRINTF 1)
        else(CMAKE_CROSSCOMPILING)
            try_run(RUN_SNPRINTF_FUNC_VAR COMPILE_SNPRINTF_FUNC_VAR
-               ${PROJECT_BINARY_DIR}
+               ${CMAKE_BINARY_DIR}
                ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_snprintf.c
            )   
        endif(CMAKE_CROSSCOMPILING)
@@ -710,7 +766,7 @@ if(HAVE_SNPRINTF AND HAVE_VSNPRINTF OR WIN32)
                set(PREFER_PORTABLE_VSNPRINTF 1)
        else(CMAKE_CROSSCOMPILING)
           try_run(RUN_VSNPRINTF_FUNC_VAR COMPILE_VSNPRINTF_FUNC_VAR
-               ${PROJECT_BINARY_DIR}
+               ${CMAKE_BINARY_DIR}
                ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_vsnprintf.c
           )
        endif(CMAKE_CROSSCOMPILING)
@@ -783,10 +839,12 @@ configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/b
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/bin/smpiff @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/bin/smpirun @ONLY)
 
+if(NOT WIN32)
 exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicc" OUTPUT_VARIABLE OKITOKI)
 exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c" OUTPUT_VARIABLE OKITOKI)
 exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff" OUTPUT_VARIABLE OKITOKI)
 exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun" OUTPUT_VARIABLE OKITOKI)
+endif(NOT WIN32)
 
 set(generated_headers_to_install
        ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/smpif.h
index aeb4b10..fd54e3d 100644 (file)
@@ -226,14 +226,12 @@ set(SURF_SRC
        src/surf/surf.c
        src/surf/surfxml_parse.c
        src/surf/surfxml_parseplatf.c
-       src/surf/cpu.c
        src/surf/network.c
-       src/surf/network_im.c
        src/surf/network_constant.c
        src/surf/workstation.c
        src/surf/workstation_ptask_L07.c
        src/surf/cpu_ti.c
-       src/surf/cpu_im.c
+       src/surf/cpu_cas01.c
        src/surf/sg_platf.c
        src/xbt/xbt_sg_stubs.c
 )
index 56acede..11441e5 100644 (file)
@@ -91,7 +91,7 @@ if(DOXYGEN_PATH AND FIG2DEV_PATH AND BIBTEX2HTML_PATH AND GOOD_BIBTEX2HTML_VERSI
            COMMAND ${CMAKE_COMMAND} -E echo "XX First Doxygen pass"
                COMMAND ${DOXYGEN_PATH}/doxygen Doxyfile
                COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/index_create.pl simgrid.tag index-API.doc
-               COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/toc_create.pl pls.doc index.doc gtut-introduction.doc installSimgrid.doc bindings.doc options.doc tracing.doc
+               COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/toc_create.pl pls.doc index.doc FAQ.doc gtut-introduction.doc installSimgrid.doc bindings.doc options.doc tracing.doc
                
                COMMAND ${CMAKE_COMMAND} -E echo "XX Second Doxygen pass"
                COMMAND ${DOXYGEN_PATH}/doxygen Doxyfile
diff --git a/buildtools/Cmake/GenerateDocWin.cmake b/buildtools/Cmake/GenerateDocWin.cmake
new file mode 100644 (file)
index 0000000..46ef1c6
--- /dev/null
@@ -0,0 +1,23 @@
+#### Generate the html documentation
+find_path(WGET_PATH    NAMES wget.exe  PATHS NO_DEFAULT_PATHS)
+find_path(NSIS_PATH NAMES makensis.exe  PATHS NO_DEFAULT_PATHS)
+
+message(STATUS "wget: ${WGET_PATH}")
+message(STATUS "nsis: ${NSIS_PATH}")
+
+if(WGET_PATH)
+       ADD_CUSTOM_TARGET(simgrid_documentation
+               COMMENT "Downloading the SimGrid documentation..."
+               COMMAND ${WGET_PATH}/wget.exe -r -np -nH -nd http://simgrid.gforge.inria.fr/simgrid/${release_version}/doc/
+               WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc/html
+       )
+endif(WGET_PATH)
+
+if(NSIS_PATH)
+ADD_CUSTOM_TARGET(nsis
+       COMMENT "Generating the SimGrid installor for Windows..."
+       DEPENDS simgrid gras graphicator gras_stub_generator tesh simgrid-colorizer simgrid_update_xml
+       COMMAND ${NSIS_PATH}/makensis.exe simgrid.nsi
+       WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/
+)
+endif(NSIS_PATH)
\ No newline at end of file
index da26f94..3974506 100644 (file)
@@ -65,9 +65,7 @@ if(HAVE_MC)
        add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/mc)\r
 endif(HAVE_MC)\r
 \r
-if(HAVE_GTNETS)\r
-       add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets)\r
-endif(HAVE_GTNETS)\r
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets)\r
 \r
 if(HAVE_NS3)\r
        add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/ns3)\r
index 0047b48..8e3f463 100644 (file)
@@ -3,24 +3,18 @@
 add_library(simgrid STATIC ${simgrid_sources})\r
 add_library(gras STATIC ${gras_sources})\r
 \r
-if(MSVC)\r
-    set_target_properties(gras     PROPERTIES COMPILE_FLAGS "/D _XBT_DLL_STATIC"\r
+set_target_properties(gras     PROPERTIES COMPILE_FLAGS "-D_XBT_DLL_STATIC"\r
                                                      OUTPUT_NAME   "gras")\r
-    set_target_properties(simgrid  PROPERTIES COMPILE_FLAGS "/D _XBT_DLL_STATIC"\r
-                                                     OUTPUT_NAME   "simgrid")\r
-else(MSVC)\r
-    if(CMAKE_COMPILER_IS_GNUCC)\r
-        set_target_properties(gras     PROPERTIES COMPILE_FLAGS "-D_XBT_DLL_STATIC"\r
-                                                         OUTPUT_NAME   "gras")\r
-        set_target_properties(simgrid  PROPERTIES COMPILE_FLAGS "-D_XBT_DLL_STATIC"\r
-                                                         OUTPUT_NAME   "simgrid")\r
-    else(CMAKE_COMPILER_IS_GNUCC)\r
-        message(FATAL_ERROR "Compilateur non connu!!!")\r
-    endif(CMAKE_COMPILER_IS_GNUCC)\r
-endif(MSVC)\r
+set_target_properties(simgrid  PROPERTIES COMPILE_FLAGS "-D_XBT_DLL_STATIC"                                                  OUTPUT_NAME   "simgrid")\r
 \r
-set(GRAS_DEP "ws2_32")\r
-set(SIMGRID_DEP "ws2_32 -lpcre")\r
+set(GRAS_DEP "ws2_32 -lpthread")\r
+set(SIMGRID_DEP "ws2_32 -lpcre -lpthread")\r
+\r
+if(ARCH_32_BITS)\r
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -march=i486")\r
+else(ARCH_32_BITS)\r
+        message(FATAL_ERROR "Sorry, Simgrid fails with full 64bits for now! Please contact us.")\r
+endif(ARCH_32_BITS)\r
 \r
 target_link_libraries(simgrid  ${SIMGRID_DEP})\r
-target_link_libraries(gras     ${GRAS_DEP})\r
+target_link_libraries(gras     ${GRAS_DEP})
\ No newline at end of file
index 0b3db37..5eb24f8 100644 (file)
@@ -83,6 +83,8 @@ if(PATH_PCRE_LIB AND PATH_PCRE_H)
 else(PATH_PCRE_LIB)
           message(FATAL_ERROR "Please install the libpcre3-dev package or equivalent before using SimGrid.")
 endif(PATH_PCRE_LIB AND PATH_PCRE_H)
-    
+
+set(PCRE_LIBRARY_PATH $ENV{PCRE_LIBRARY_PATH})
+
 mark_as_advanced(PATH_PCRE_H)
 mark_as_advanced(PATH_PCRE_LIB)
\ No newline at end of file
index 9fa4ca4..73e4257 100644 (file)
 /* Indicates that we have GTNETS support */
 #cmakedefine HAVE_GTNETS @HAVE_GTNETS@
 
+/* Indicates that we have SMPI support */
+#cmakedefine HAVE_SMPI @HAVE_SMPI@
+
 /* Indicates that we have NS3 support */
 #cmakedefine HAVE_NS3 @HAVE_NS3@
 
index d627181..ab736c8 100644 (file)
@@ -4,7 +4,7 @@
 ;Interface Configuration\r
 \r
   !define MUI_HEADERIMAGE\r
-  !define MUI_HEADERIMAGE_BITMAP "@CMAKE_HOME_DIRECTORY@\doc\webcruft\simgrid_logo_win.bmp" ; optional\r
+  !define MUI_HEADERIMAGE_BITMAP "@CMAKE_HOME_DIRECTORY@\doc\webcruft\simgrid_logo_win_2011.bmp" ; optional\r
   !define MUI_ABORTWARNING\r
 \r
 ;--------------------------------\r
@@ -91,6 +91,12 @@ Section "Libraries and Headers" LibSection
        file @CMAKE_HOME_DIRECTORY@\include\xbt\mmalloc.h\r
        file @CMAKE_HOME_DIRECTORY@\include\xbt\replay_trace_reader.h\r
        file @CMAKE_HOME_DIRECTORY@\include\xbt\parmap.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\automaton.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\automatonparse_promela.h\r
+\r
+       CreateDirectory  $INSTDIR\include\simgrid\r
+       setOutPath $INSTDIR\include\simgrid\r
+       file @CMAKE_HOME_DIRECTORY@\include\simgrid\platf.h\r
        \r
        CreateDirectory  $INSTDIR\include\mc\r
        setOutPath $INSTDIR\include\mc\r
@@ -205,17 +211,11 @@ Section "Pcre library" PCRESection
        # install pcre library\r
        CreateDirectory $INSTDIR\GnuWin32\r
        setOutPath $INSTDIR\GnuWin32\r
-       file "@PATH_PCRE_LICENCE@\LICENCE"\r
-\r
-       CreateDirectory $INSTDIR\GnuWin32\lib\r
-       setOutPath $INSTDIR\GnuWin32\lib\r
-       file @PATHLIBPCRE@\libpcre.a\r
-       file @PATHLIBPCRE@\libpcreposix.a\r
-       \r
-       CreateDirectory $INSTDIR\GnuWin32\include\r
-       setOutPath $INSTDIR\GnuWin32\include\r
-       file @PATH_PCRE_H@\pcre.h\r
-       file @PATH_PCRE_H@\pcreposix.h\r
+       file /r "@PCRE_LIBRARY_PATH@\lib"\r
+       file /r "@PCRE_LIBRARY_PATH@\include"\r
+       file /nonfatal /r "@PCRE_LIBRARY_PATH@\bin"\r
+       file /nonfatal /r "@PCRE_LIBRARY_PATH@\man"\r
+       file /nonfatal /r "@PCRE_LIBRARY_PATH@\share"\r
 SectionEnd\r
 \r
 # default section start\r
@@ -237,7 +237,7 @@ section
        WriteRegExpandStr ${env_hklm} SIMGRID_VERSION @SIMGRID_VERSION_MAJOR@.@SIMGRID_VERSION_MINOR@.@SIMGRID_VERSION_PATCH@\r
 \r
        WriteRegExpandStr ${env_hklm} SIMGRID_PCRE_LIBRARY_PATH $INSTDIR\GnuWin32\r
-       WriteRegExpandStr ${env_hklm} SIMGRID_PCRE_LIBRARY_VERSION "8.12"\r
+       WriteRegExpandStr ${env_hklm} SIMGRID_PCRE_LIBRARY_VERSION "8.21"\r
 \r
        WriteRegStr HKCU "SOFTWARE\SimGrid" "Version" "@SIMGRID_VERSION_MAJOR@.@SIMGRID_VERSION_MINOR@.@SIMGRID_VERSION_PATCH@"\r
        WriteRegStr HKCU "SOFTWARE\SimGrid" "InstallPath" "$INSTDIR"\r
diff --git a/buildtools/Cmake/test_g5k.xml b/buildtools/Cmake/test_g5k.xml
deleted file mode 100644 (file)
index 46898bd..0000000
+++ /dev/null
@@ -1,441 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-<platform version="3">
-       <AS id="AS_grid5000" routing="Floyd" >
-               <AS id="AS_interne" routing="Floyd">
-                       <router id="lille"/>
-                       <router id="paris"/>
-                       <router id="nancy"/>
-                       <router id="rennes"/>
-                       <router id="lyon"/>
-                       <router id="bordeaux"/>
-                       <router id="grenoble"/>
-                       <router id="marseille"/>
-                       <router id="toulouse"/>
-                       <router id="sophia"/>
-
-                       <link id="Lille_Paris"        bandwidth="1.25E9" latency="1.0E-4"/>
-                       <link id="Paris_Nancy"        bandwidth="1.25E9" latency="1.0E-4"/>
-                       <link id="Paris_Rennes"       bandwidth="1.25E9" latency="1.0E-4"/>
-                       <link id="Paris_Lyon"         bandwidth="1.25E9" latency="1.0E-4"/>
-                       <link id="Bordeaux_Lyon"      bandwidth="1.25E9" latency="1.0E-4"/>
-                       <link id="Lyon_Grenoble"      bandwidth="1.25E9" latency="1.0E-4"/>
-                       <link id="Lyon_Marseille"     bandwidth="1.25E9" latency="1.0E-4"/>
-                       <link id="Marseille_Sophia"   bandwidth="1.25E9" latency="1.0E-4"/>
-                       <link id="Marseille_Toulouse" bandwidth="1.25E9" latency="1.0E-4"/>
-
-               <route src="lille"     dst="paris"     ><link_ctn id="Lille_Paris"/></route>
-               <route src="paris"     dst="nancy"     ><link_ctn id="Paris_Nancy"/></route>
-               <route src="paris"     dst="rennes"    ><link_ctn id="Paris_Rennes"/></route>
-               <route src="paris"     dst="lyon"      ><link_ctn id="Paris_Lyon"/></route>
-               <route src="bordeaux"  dst="lyon"      ><link_ctn id="Bordeaux_Lyon"/></route>
-               <route src="lyon"      dst="grenoble"  ><link_ctn id="Lyon_Grenoble"/></route>
-               <route src="lyon"      dst="marseille" ><link_ctn id="Lyon_Marseille"/></route>
-               <route src="marseille" dst="sophia"    ><link_ctn id="Marseille_Sophia"/></route>
-               <route src="marseille" dst="toulouse"  ><link_ctn id="Marseille_Toulouse"/></route>
-               </AS>
-               <AS id="AS_bordeaux" routing="RuleBased" >
-                       <cluster id="AS_bordeplage" prefix="bordeplage-" suffix=".bordeplage.grid5000.fr"
-                               radical="1-51" power="5.2297E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_bordeplage" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_bordereau" prefix="bordereau-" suffix=".bordereau.grid5000.fr"
-                               radical="1-93" power="8.8925E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_bordereau" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_borderline" prefix="borderline-" suffix=".borderline.grid5000.fr"
-                               radical="1-10" power="13.357E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_borderline" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_bordeaux" routing="Full">
-                               <router id="gw_bordeaux"/>
-                       </AS>
-                       <link   id="link_gw_bordeaux" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <AS id="AS_grenoble" routing="RuleBased" >
-                       <cluster id="AS_adonis" prefix="adonis-" suffix=".adonis.grid5000.fr"
-                               radical="1-12" power="23.681E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_adonis" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_edel" prefix="edel-" suffix=".edel.grid5000.fr"
-                               radical="1-72" power="23.492E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_edel" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_genepi" prefix="genepi-" suffix=".genepi.grid5000.fr"
-                               radical="1-34" power="21.175E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_genepi" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_grenoble" routing="Full">
-                               <router id="gw_grenoble"/>
-                       </AS>
-                       <link   id="link_gw_grenoble" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <AS id="AS_lille" routing="RuleBased" >
-                       <cluster id="AS_chicon" prefix="chicon-" suffix=".chicon.grid5000.fr"
-                               radical="1-26" power="8.9618E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_chicon" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_chinqchint" prefix="chinqchint-" suffix=".chinqchint.grid5000.fr"
-                               radical="1-46" power="22.270E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_chinqchint" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_lille" routing="Full">
-                               <router id="gw_lille"/>
-                       </AS>
-                       <link   id="link_gw_lille" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <AS id="AS_lyon" routing="RuleBased" >
-                       <cluster id="AS_capricorne" prefix="capricorne-" suffix=".capricorne.grid5000.fr"
-                               radical="1-56" power="4.7233E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_capricorne" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_sagittaire" prefix="sagittaire-" suffix=".sagittaire.grid5000.fr"
-                               radical="1-79" power="5.6693E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_sagittaire" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_lyon" routing="Full">
-                               <router id="gw_lyon"/>
-                       </AS>
-                       <link   id="link_gw_lyon" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <AS id="AS_nancy" routing="RuleBased" >
-                       <cluster id="AS_graphene" prefix="graphene-" suffix=".graphene.grid5000.fr"
-                               radical="1-144" power="16.673E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_graphene" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_griffon" prefix="griffon-" suffix=".griffon.grid5000.fr"
-                               radical="1-92" power="20.678E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_griffon" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_nancy" routing="Full">
-                               <router id="gw_nancy"/>
-                       </AS>
-                       <link   id="link_gw_nancy" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <AS id="AS_orsay" routing="RuleBased" >
-                       <cluster id="AS_gdx" prefix="gdx-" suffix=".gdx.grid5000.fr"
-                               radical="1-310" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_gdx" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_netgdx" prefix="netgdx-" suffix=".netgdx.grid5000.fr"
-                               radical="1-30" power="4.7144E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_netgdx" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_orsay" routing="Full">
-                               <router id="gw_orsay"/>
-                       </AS>
-                       <link   id="link_gw_orsay" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <AS id="AS_rennes" routing="RuleBased" >
-                       <cluster id="AS_paradent" prefix="paradent-" suffix=".paradent.grid5000.fr"
-                               radical="1-64" power="21.496E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_paradent" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_paramount" prefix="paramount-" suffix=".paramount.grid5000.fr"
-                               radical="1-33" power="12.910E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_paramount" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_parapide" prefix="parapide-" suffix=".parapide.grid5000.fr"
-                               radical="1-25" power="30.130E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_parapide" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_parapluie" prefix="parapluie-" suffix=".parapluie.grid5000.fr"
-                               radical="1-40" power="27.391E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_parapluie" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_rennes" routing="Full">
-                               <router id="gw_rennes"/>
-                       </AS>
-                       <link   id="link_gw_rennes" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <AS id="AS_sophia" routing="RuleBased" >
-                       <cluster id="AS_helios" prefix="helios-" suffix=".helios.grid5000.fr"
-                               radical="1-56" power="7.7318E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_helios" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_sol" prefix="sol-" suffix=".sol.grid5000.fr"
-                               radical="1-50" power="8.9388E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_sol" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_suno" prefix="suno-" suffix=".suno.grid5000.fr"
-                               radical="1-45" power="23.530E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_suno" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_sophia" routing="Full">
-                               <router id="gw_sophia"/>
-                       </AS>
-                       <link   id="link_gw_sophia" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <AS id="AS_toulouse" routing="RuleBased" >
-                       <cluster id="AS_pastel" prefix="pastel-" suffix=".pastel.grid5000.fr"
-                               radical="1-80" power="9.5674E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_pastel" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <cluster id="AS_violette" prefix="violette-" suffix=".violette.grid5000.fr"
-                               radical="1-52" power="5.1143E9" bw="1.25E8" lat="1.0E-4"
-                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-                       <link   id="link_violette" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <AS id="gw_AS_toulouse" routing="Full">
-                               <router id="gw_toulouse"/>
-                       </AS>
-                       <link   id="link_gw_toulouse" bandwidth="1.25E9" latency="1.0E-4"/>
-
-                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="YES">
-                                       <link_ctn id="link_$1src"/>
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
-                               gw_src="$1src-AS_$1src_router.$1src.grid5000.fr"
-                               gw_dst="gw_$1dst"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1src"/>
-                       </ASroute>
-
-                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
-                               gw_src="gw_$1src"
-                               gw_dst="$1dst-AS_$1dst_router.$1dst.grid5000.fr"
-                               symmetrical="NO">
-                                       <link_ctn id="link_$1dst"/>
-                       </ASroute>
-
-               </AS>
-               <ASroute src="AS_toulouse" dst="AS_interne" gw_src="gw_toulouse" gw_dst="toulouse" symmetrical="YES">
-                       <link_ctn id="link_gw_toulouse"/>
-               </ASroute>
-               <ASroute src="AS_sophia" dst="AS_interne" gw_src="gw_sophia" gw_dst="sophia" symmetrical="YES">
-                       <link_ctn id="link_gw_sophia"/>
-               </ASroute>
-               <ASroute src="AS_rennes" dst="AS_interne" gw_src="gw_rennes" gw_dst="rennes" symmetrical="YES">
-                       <link_ctn id="link_gw_rennes"/>
-               </ASroute>
-               <ASroute src="AS_orsay" dst="AS_interne" gw_src="gw_orsay" gw_dst="paris" symmetrical="YES">
-                       <link_ctn id="link_gw_orsay"/>
-               </ASroute>
-               <ASroute src="AS_nancy" dst="AS_interne" gw_src="gw_nancy" gw_dst="nancy" symmetrical="YES">
-                       <link_ctn id="link_gw_nancy"/>
-               </ASroute>
-               <ASroute src="AS_lyon" dst="AS_interne" gw_src="gw_lyon" gw_dst="lyon" symmetrical="YES">
-                       <link_ctn id="link_gw_lyon"/>
-               </ASroute>
-               <ASroute src="AS_lille" dst="AS_interne" gw_src="gw_lille" gw_dst="lille" symmetrical="YES">
-                       <link_ctn id="link_gw_lille"/>
-               </ASroute>
-               <ASroute src="AS_grenoble" dst="AS_interne" gw_src="gw_grenoble" gw_dst="grenoble" symmetrical="YES">
-                       <link_ctn id="link_gw_grenoble"/>
-               </ASroute>
-               <ASroute src="AS_bordeaux" dst="AS_interne" gw_src="gw_bordeaux" gw_dst="bordeaux" symmetrical="YES">
-                       <link_ctn id="link_gw_bordeaux"/>
-               </ASroute>
-       </AS>
-</platform>
index 5302a80..e822e64 100644 (file)
@@ -4,6 +4,9 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 #include <semaphore.h>
 
 int main(void)
index 4679c32..e9f0445 100644 (file)
 #include <semaphore.h>
 #include <stdio.h>
 
+#ifndef SEM_FAILED
+#define SEM_FAILED (-1)
+#endif
+
 int main(void) {   
-   sem_t * s;
-   
+#ifdef WIN32
+       int s;
+#else
+       sem_t * s;
+#endif
    s = sem_open("/0", O_CREAT, 0644, 10);
    if (s == SEM_FAILED){
 //     printf("sem_open failed\n");
index ae1491c..24d5c25 100755 (executable)
@@ -17,38 +17,40 @@ my($line_exec);
 my($l);
 my($tmp);
 
-print "#! ./tesh\n";
-
 while(defined($line=<SH_LIGNE>))
 {
-       if($line =~ /^p(.*)$/)
+       if($line =~ /^\$(.*)$/)
        {
-               print "$line\n";
-       }
+               $line_exec = $line;
+               $line =~ s/\$\{srcdir\:\=\.\}/./g;
+               $line =~ s/\(/\\(/g;
+               $line =~ s/\)/\\)/g;
+               $line =~ s/\$SG_TEST_EXENV//g;
+               $line =~ s/\$EXEEXT//g;
+               $line =~ s/^\$\ */.\//g;
+               $line =~ s/^.\/lua/lua/g;
+               $line =~ s/^.\/ruby/ruby/g;
+               $line =~ s/--log=([^ ]*)/--log="$1"/g;
+               print "$line_exec";
+               chomp $line;
+               open (FILE, "$line 2>&1|");
+               while(defined($l=<FILE>))
+               {
+               chomp $l;
+               print "\> $l\n";
+               }
+               close(FILE);
+       }
        else
        {
-               if($line =~ /^\$(.*)$/) 
-               {
-                       $line_exec = $line;
-                       $line =~ s/\$\{srcdir\:\=\.\}/./g;
-                       $line =~ s/\$SG_TEST_EXENV//g;
-                       $line =~ s/\$EXEEXT//g;
-                       $line =~ s/^\$\ */.\//g;
-                       $line =~ s/^.\/lua/lua/g;
-                       $line =~ s/^.\/ruby/ruby/g;
-                       $line =~ s/--log=([^ ]*)/--log="$1"/g;
-                       print "\n$line_exec";
-                       chomp $line;
-                       open (FILE, "$line 2>&1|");
-                       while(defined($l=<FILE>))
-                       {
-                       chomp $l;
-                       print "\> $l\n";
-                       }
-
+               if($line =~ /^\>(.*)$/)
+               {
                }
-               close(FILE);
-       }
+               else
+               {
+               print "$line";
+               }
+       }       
 }
 
 close(SH_LIGNE);
index 91807af..f381698 100755 (executable)
@@ -40,11 +40,11 @@ def cov (X, Y):
       S_XY += (X[i] - avg_X) * (Y[i] - avg_Y)
    return (S_XY / n)
 
-##----------------------------------
+##---------------------------------------------------------------------
 ## variance : variance
 ## param X data vector ( ..x_i.. )
 ## (S_X)^2 = (Sum ( x_i - avg(x) )^2 ) / n
-##----------------------------------
+##---------------------------------------------------------------------
 def variance (X):
    n = len(X)
    avg_X = avg (X)
@@ -53,15 +53,58 @@ def variance (X):
       S_X2 += (X[i] - avg_X) ** 2
    return (S_X2 / n)
 
+##---------------------------------------------------------------------
+## calibrate : output correction factors, c_lat on latency, c_bw on bw
+## such that bandwidth * c_bw = bw_regr, latency * c_lat = lat_regr
+## where bw_regr and lat_regr are the values approximating experimental
+## observations.
+##
+## param links number of links traversed during ping-pong
+## param latency as specified on command line, in s
+## param bandwidth as specified on command line, in Byte/s
+## param sizes vector of data sizes, in Bytes
+## param timings vector of time taken: timings[i] for sizes[i], in us
+##---------------------------------------------------------------------
 def calibrate (links, latency, bandwidth, sizes, timings):
    assert len(sizes) == len(timings)
    if len(sizes) < 2:
       return None
+   # compute linear regression : find an affine form  time = a*size+b
    S_XY = cov(sizes, timings)
    S_X2 = variance(sizes)
    a = S_XY / S_X2
    b = avg(timings) - a * avg(sizes)
-   return (b * 1e-6) / (latency * links), 1e6 / (a * bandwidth)
+   # corresponding bandwith, in byte/s (was in byte/us in skampi dat)
+   bw_regr = 1e6 / a     
+   # corresponding latency, in s (was in us in skampi dat)
+   lat_regr = b*1e-6
+   print("\nregression: {0} * x + {1}".format(a,b))
+   print("corr_bw = bw_regr/bandwidth= {0}/{1}={2}     lat_regr/(lat_xml*links)={3}/({4}*{5}))".format(bw_regr,bandwidth,bw_regr/bandwidth,lat_regr,latency,links))
+   # return linear regression result and corresponding correction factors c_bw,c_lat
+   return a,b, bw_regr/bandwidth, lat_regr/(latency*links)
+
+
+##---------------------------------------------------------------------
+## outputs a C formatted conditional return value for factor
+##
+## param lb lower bound
+## param ub upper bound
+## param lb_included boolean to tell if bound is included (<=) or exclude (<) 
+## param ub_included boolean to tell if bound is included (<=) or exclude (<) 
+##---------------------------------------------------------------------
+def c_code_print (lb,ub, retval, lb_included, ub_included):
+       lb_cmp = ub_cmp = "<"
+       if lb_included:
+               lb_cmp ="<="
+       if ub_included:
+               ub_cmp ="<="
+
+       ub_kib=ub/1024.
+       lb_kib=lb/1024.
+       print("\t /* case {0:.1f} KiB {1} size {2} {3:.1f} KiB */".format(lb_kib,lb_cmp,ub_cmp,ub_kib))
+       print("\t if ({0:d} {1}  size && size {2} {3:d}) ".format(lb,lb_cmp,ub_cmp,ub))
+       print("\t       return({0});" . format(retval))
+
 
 ##-----------------------------------------------------------------------------------------------
 ## main
@@ -82,11 +125,11 @@ for line in skampidat:
       ## ---------------
       #count= 8388608  8388608  144916.1       7.6       32  144916.1  143262.0
       #("%s %d %d %f %f %d %f %f\n" % (countlbl, count, countn, time, stddev, iter, mini, maxi)
-               readdata.append( (int(l[1]),float(l[3]) / 2 ) );   # divide by 2 because of ping-pong measured
+               readdata.append( (int(l[1]),float(l[3]) / 2) );   # divide by 2 because of ping-pong measured
 
 ## These may not be sorted so sort it by message size before processing.
 sorteddata = sorted( readdata, key=lambda pair: pair[0])
-sizes,timings = zip(*sorteddata);
+sizes,timings= zip(*sorteddata)
 
 
 ## adds message sizes of interest: if values are specified starting from the 6th command line arg 
@@ -100,9 +143,69 @@ if len(sys.argv) > 5:
       limits += [idx for idx in range(len(sizes)) if sizes[idx] == int(sys.argv[i])]
 limits.append(len(sizes) - 1)
 
+factors = []
 low = 0
 for lim in limits:
    correc = calibrate(links, latency, bandwidth, sizes[low:lim + 1], timings[low:lim + 1])
    if correc:
-      print("Segment [%d:%d] -- Latency factor=%g -- Bandwidth factor=%g" % (sizes[low], sizes[lim], correc[0], correc[1]))
+       # save interval [lb,ub] correction, regression line direction and origin
+      # and corresponding correction factors for bw and lat resp. 
+       (dircoef,origin,factor_bw,factor_lat) = correc
+       factors.append( (sizes[low],sizes[lim], dircoef, origin, factor_bw,factor_lat) )
+       print("Segment [%d:%d] --Bandwidth factor=%g --Latency factor=%g " % (sizes[low], sizes[lim], factor_bw,factor_lat))
    low = lim + 1
+
+# now computes joining lines between segments
+joinseg=[]
+
+print("\n/**\n *------------------ <copy/paste C code snippet in surf/network.c> ----------------------")
+print(" *\n * produced by: {0}\n *".format(' '.join(sys.argv)))
+print(" *---------------------------------------------------------------------------------------\n **/")
+
+# print correction factor for bandwidth for each segment
+print("static double smpi_bandwidth_factor(double size)\n{")                                
+for (lb,ub,a,b,factor_bw,factor_lat) in factors:
+       c_code_print(lb,ub,factor_bw,True,True)
+
+       # save ends and starts of segments 
+       if lb != sizes[0]:
+               joinseg.append( (lb,timings[sizes.index(lb)]) )
+       if ub != sizes[-1]:
+               joinseg.append( (ub,timings[sizes.index(ub)]) )
+
+# print correction factor for bandwidth between segments
+joinseg.reverse()
+print("\n\t /* ..:: inter-segment corrections ::.. */");
+inx=len(joinseg)-1
+while inx>=1:
+       (x0,y0) = joinseg[inx]
+       inx = inx -1
+       (x1,y1) = joinseg[inx]
+       inx = inx -1
+       # line eq. is y = (y1-y0)/(x0-x1) * x +  (y0 x1 - y1 x0)/(x1-x0)
+       a = (y1-y0) / (x1-x0)
+       bw_join = 1e6 / a
+       factor_join_bw = bw_join / bandwidth
+       #print("Joining points (%f,%f) -> (%f,%f)  : line dir : a=%g\n" % (x0,y0,x1,y1,a))
+       c_code_print(x0,x1,factor_join_bw,False,False)
+
+print("}\n")  
+
+# print correction factor for latency for each segment
+print("static double smpi_latency_factor(double size)\n{")                                
+for (lb,ub,a,b,factor_bw,factor_lat) in factors:
+       c_code_print(lb,ub,factor_lat,True,True)
+
+print("\n\t /* ..:: inter-segment corrections ::.. */");
+while joinseg:
+       (x0,y0) = joinseg.pop()
+       (x1,y1) = joinseg.pop()
+       # line eq. is y = (y0-y1)/(x0-x1) * x +  (y0 x1 - y1 x0)/(x1-x0)
+       #print("(%f,%f) -> (%f,%f)\n" % (x0,y0,x1,y1))
+       b = 1e-6 * (y0*x1-y1*x0) / (x1-x0)
+       factor_join_lat = b / (latency*links)
+       c_code_print(x0,x1,factor_join_lat,False,False)
+
+print("}\n")  
+
+print("\n/**\n *------------------ <copy/paste C code snippet in surf/network.c> ----------------------\n **/")
diff --git a/contrib/network_model/griffon_skampi_pt2pt.ski.dat b/contrib/network_model/griffon_skampi_pt2pt.ski.dat
new file mode 100644 (file)
index 0000000..42ce879
--- /dev/null
@@ -0,0 +1,158 @@
+# SkaMPI pt2pt test
+# on cluster : griffon (nancy) Grid5000. See Grid5000 website for technical data.
+
+#vendor_id  : GenuineIntel
+#cpu family : 6
+#model      : 23
+#model name : Intel(R) Xeon(R) CPU           L5420  @ 2.50GHz
+#stepping   : 10
+#cpu MHz    : 2493.757
+#cache size : 6144 KB
+
+
+# /home/sgenaud/openmpi.install/bin/mpiexec --mca btl_tcp_if_include eth0 --mca btl_tcp_if_exclude ib0 --mca btl tcp,self -mca orte_base_help_aggregate 0 -mca plm_rsh_agent oarsh -machinefile machinefile -n 2 skampi -i ski_smpi/skampi_pt2pt.ski
+
+# Finished at Fri Jul  9 16:19:24 2010
+# SKaMPI Version 5.0.4 rev. 355
+# Started at Fri Jul  9 16:19:02 2010
+# Total runtime 22 seconds
+# begin result "Pingpong_Send_Recv"
+# duration = 22.49 sec
+# end result "Pingpong_Send_Recv"
+
+count= 1        1     109.2       0.2       32     106.7     107.7
+count= 2        2     109.3       0.3       32     107.6     107.0
+count= 4        4     111.7       0.7       32     107.8     109.7
+count= 8        8     109.0       0.3       32     106.8     107.0
+count= 16       16     109.1       0.4       32     108.0     106.7
+count= 32       32     111.1       0.4       32     110.5     107.4
+count= 64       64     110.2       0.2       32     107.8     108.6
+count= 128      128     118.9       1.2       32     109.9     116.2
+count= 256      256     145.8       0.4       32     138.4     144.9
+count= 512      512     161.7       0.3       32     154.7     161.6
+count= 1024     1024     190.4       0.2       32     182.7     190.4
+count= 1024     1024     193.4       0.3       32     185.9     193.0
+count= 1536     1536     237.3       0.5       32     226.9     237.3
+count= 2048     2048     248.0       0.8       32     238.4     247.9
+count= 2048     2048     249.2       1.0       32     240.1     247.7
+count= 2560     2560     262.9       0.6       32     251.7     262.9
+count= 3072     3072     277.9       0.4       32     272.7     275.0
+count= 3584     3584     285.0       0.5       32     275.0     285.0
+count= 4096     4096     303.0       0.9       32     293.5     298.9
+count= 4096     4096     303.4       0.8       32     297.2     301.6
+count= 4608     4608     310.0       0.8       32     310.0     291.7
+count= 5120     5120     321.4       0.7       32     321.4     291.5
+count= 5632     5632     343.7       0.7       32     343.7     312.0
+count= 6144     6144     320.7       0.5       32     320.7     282.6
+count= 6656     6656     339.4       0.4       32     339.4     296.6
+count= 7168     7168     353.3       0.7       32     353.3     308.5
+count= 7680     7680     386.7       0.8       32     385.3     378.8
+count= 8192     8192     389.1       0.6       32     389.1     373.8
+count= 8192     8192     393.7       0.8       32     391.1     380.4
+count= 16384    16384     627.7       0.7       32     627.7     533.9
+count= 32768    32768    1060.2       0.9       32    1060.2     828.9
+count= 32768    32768    1062.0       1.0       32    1062.0     836.4
+count= 33792    33792    1096.1       0.8       32    1096.1     838.2
+count= 34816    34816    1109.6       0.7       32    1109.6     835.3
+count= 35840    35840    1125.7       1.7       32    1125.7     856.3
+count= 36864    36864    1168.1       1.4       32    1168.1     930.2
+count= 37888    37888    1208.8       0.6       32    1208.8     937.2
+count= 38912    38912    1229.7       1.0       32    1229.7     952.2
+count= 39936    39936    1255.4       1.2       32    1255.4     969.3
+count= 40960    40960    1292.8       0.9       32    1292.8     978.8
+count= 41984    41984    1300.8       1.6       32    1300.8     976.3
+count= 43008    43008    1322.0       1.2       32    1322.0     988.2
+count= 44032    44032    1365.8       1.0       32    1365.8    1064.5
+count= 45056    45056    1400.6       0.8       32    1400.6    1072.9
+count= 46080    46080    1426.9       0.9       32    1426.9    1096.7
+count= 47104    47104    1445.7       0.9       32    1445.7    1101.4
+count= 48128    48128    1489.7       0.9       32    1489.7    1119.3
+count= 49152    49152    1516.2       0.6       32    1516.2    1137.3
+count= 50176    50176    1515.0       0.9       32    1515.0    1124.5
+count= 51200    51200    1558.4       1.4       32    1558.4    1202.6
+count= 52224    52224    1595.4       0.8       32    1595.4    1209.2
+count= 53248    53248    1614.3       1.0       32    1614.3    1219.8
+count= 54272    54272    1647.7       0.8       32    1647.7    1244.3
+count= 55296    55296    1684.2       0.9       32    1684.2    1258.9
+count= 56320    56320    1714.6       0.8       32    1714.6    1281.8
+count= 57344    57344    1710.3       1.4       32    1710.3    1262.5
+count= 58368    58368    1757.1       1.1       32    1757.1    1344.3
+count= 59392    59392    1793.4       1.3       32    1793.4    1350.9
+count= 60416    60416    1817.8       0.7       32    1817.8    1366.0
+count= 61440    61440    1850.5       1.5       32    1850.5    1392.2
+count= 62464    62464    1884.3       1.3       32    1884.3    1398.8
+count= 63488    63488    1896.7       1.2       32    1896.7    1403.7
+count= 64512    64512    1907.1       1.0       32    1907.1    1405.3
+count= 65536    65536    2250.0       1.2       32    2250.0    1648.1
+count= 65536    65536    2253.6       1.8       32    2253.6    1653.3
+count= 66560    66560    2263.2       0.8       32    2263.2    1654.2
+count= 67584    67584    2284.4       1.4       32    2284.4    1655.7
+count= 68608    68608    2308.5       1.7       32    2308.5    1685.1
+count= 69632    69632    2299.3       2.7       32    2299.3    1672.3
+count= 70656    70656    2342.2       2.4       32    2342.2    1708.0
+count= 71680    71680    2385.5       2.4       32    2385.5    1733.6
+count= 72704    72704    2422.9       2.5       32    2422.9    1765.7
+count= 73728    73728    2441.9       1.7       32    2441.9    1783.1
+count= 74752    74752    2465.0       1.9       32    2465.0    1781.5
+count= 75776    75776    2482.6       2.5       32    2482.6    1806.1
+count= 76800    76800    2490.0       2.1       32    2490.0    1808.3
+count= 77824    77824    2503.4       2.8       32    2503.4    1815.1
+count= 78848    78848    2568.6       2.6       32    2568.6    1864.5
+count= 79872    79872    2618.4       2.2       32    2618.4    1897.0
+count= 80896    80896    2615.7       2.6       32    2615.7    1891.0
+count= 81920    81920    2641.5       2.1       32    2641.5    1919.9
+count= 82944    82944    2647.5       2.4       32    2647.5    1919.4
+count= 83968    83968    2662.6       1.8       32    2662.6    1929.4
+count= 84992    84992    2693.4       1.7       32    2693.4    1954.6
+count= 86016    86016    2733.1       2.3       32    2733.1    1974.2
+count= 87040    87040    2784.9       2.0       32    2784.9    2013.4
+count= 88064    88064    2792.3       1.9       32    2792.3    2014.1
+count= 89088    89088    2820.0       1.8       32    2820.0    2032.9
+count= 90112    90112    2833.6       1.7       32    2833.6    2045.1
+count= 91136    91136    2861.4       1.1       32    2861.4    2056.6
+count= 92160    92160    2873.4       1.5       32    2873.4    2071.6
+count= 93184    93184    2926.1       0.8       32    2926.1    2103.4
+count= 94208    94208    2960.6       1.8       32    2960.6    2128.3
+count= 95232    95232    2970.0       1.6       32    2970.0    2145.8
+count= 96256    96256    2993.8       1.7       32    2993.8    2147.2
+count= 97280    97280    3010.7       2.4       32    3010.7    2169.1
+count= 98304    98304    3039.6       1.7       32    3039.6    2180.1
+count= 99328    99328    3048.7       2.0       32    3048.7    2186.0
+count= 100352   100352    3107.2       1.4       32    3107.2    2227.0
+count= 101376   101376    3147.7       1.4       32    3147.7    2258.1
+count= 102400   102400    3145.7       1.8       32    3145.7    2256.1
+count= 103424   103424    3171.8       1.3       32    3171.8    2266.4
+count= 104448   104448    3200.2       2.4       32    3200.2    2300.5
+count= 105472   105472    3219.3       2.7       32    3219.3    2301.5
+count= 106496   106496    3229.6       2.1       32    3229.6    2308.6
+count= 107520   107520    3284.7       2.3       32    3284.7    2344.4
+count= 108544   108544    3311.8       2.2       32    3311.8    2364.9
+count= 109568   109568    3323.4       1.7       32    3323.4    2376.3
+count= 110592   110592    3354.0       2.0       32    3354.0    2399.0
+count= 111616   111616    3376.2       1.7       32    3376.2    2419.3
+count= 112640   112640    3397.4       2.4       32    3397.4    2429.9
+count= 113664   113664    3401.1       1.4       32    3401.1    2430.6
+count= 114688   114688    3458.1       2.7       32    3458.1    2470.8
+count= 115712   115712    3481.2       3.4       32    3481.2    2484.3
+count= 116736   116736    3512.1       2.2       32    3512.1    2502.9
+count= 117760   117760    3532.9       2.1       32    3532.9    2524.1
+count= 118784   118784    3544.9       1.9       32    3544.9    2527.8
+count= 119808   119808    3575.5       1.4       32    3575.5    2544.6
+count= 120832   120832    3584.4       2.2       32    3584.4    2554.0
+count= 121856   121856    3641.5       2.3       32    3641.5    2593.2
+count= 122880   122880    3662.0       1.7       32    3662.0    2608.6
+count= 123904   123904    3695.2       1.7       32    3695.2    2638.5
+count= 124928   124928    3711.6       1.6       32    3711.6    2643.5
+count= 125952   125952    3737.9       1.3       32    3737.9    2659.9
+count= 126976   126976    3750.0       1.8       32    3750.0    2673.3
+count= 128000   128000    3761.6       2.2       32    3761.6    2678.8
+count= 129024   129024    3822.9       1.8       32    3822.9    2725.9
+count= 130048   130048    3838.5       2.3       32    3838.5    2727.5
+count= 131072   131072    3870.2       1.8       32    3870.2    2750.0
+count= 131072   131072    3873.2       1.8       32    3873.2    2757.4
+count= 262144   262144    7121.5       1.0       32    7121.5    4980.9
+count= 524288   524288   10740.7       4.1       32   10740.7    9458.5
+count= 1048576  1048576   19872.8       4.9       32   19872.8   18373.7
+count= 2097152  2097152   37947.8      63.3       32   37947.8   36227.3
+count= 4194304  4194304   73299.4       7.8       32   73299.4   71898.5
+count= 8388608  8388608  144965.0      15.2       32  144965.0  143205.7
diff --git a/contrib/network_model/pingpong-in.dat b/contrib/network_model/pingpong-in.dat
new file mode 100644 (file)
index 0000000..7245687
--- /dev/null
@@ -0,0 +1,7681 @@
+0      98
+1      100
+2      100
+3      100
+4      100
+5      100
+6      100
+7      100
+8      100
+9      100
+10     100
+11     99
+12     97
+13     95
+14     90
+15     83
+16     82
+17     82
+18     82
+19     92
+20     87
+21     82
+22     76
+23     76
+24     89
+25     94
+26     97
+27     100
+28     100
+29     100
+30     100
+31     100
+32     100
+33     100
+34     100
+35     100
+36     100
+37     100
+38     100
+39     99
+40     96
+41     94
+42     89
+43     83
+44     82
+45     86
+46     94
+47     79
+48     76
+49     82
+50     84
+51     92
+52     97
+53     98
+54     100
+55     100
+56     100
+57     100
+58     100
+59     100
+60     100
+61     100
+62     100
+63     100
+64     100
+65     100
+66     99
+67     97
+68     94
+69     86
+70     82
+71     82
+72     91
+73     94
+74     90
+75     88
+76     89
+77     93
+78     97
+79     100
+80     100
+81     100
+82     100
+83     100
+84     100
+85     100
+86     100
+87     100
+88     100
+89     100
+90     100
+91     100
+92     99
+93     97
+94     94
+95     90
+96     82
+97     82
+98     87
+99     94
+100    93
+101    88
+102    90
+103    92
+104    98
+105    99
+106    100
+107    100
+108    100
+109    100
+110    100
+111    100
+112    100
+113    100
+114    100
+115    100
+116    99
+117    100
+118    100
+119    100
+120    99
+121    97
+122    95
+123    92
+124    90
+125    82
+126    82
+127    94
+128    86
+129    85
+130    95
+131    97
+132    99
+133    100
+134    100
+135    100
+136    100
+137    100
+138    100
+139    100
+140    100
+141    100
+142    100
+143    100
+144    100
+145    100
+146    100
+147    100
+148    98
+149    96
+150    94
+151    94
+152    87
+153    88
+154    94
+155    94
+156    92
+157    97
+158    98
+159    100
+160    100
+161    100
+162    100
+163    100
+164    100
+165    100
+166    100
+167    100
+168    100
+169    100
+170    100
+171    100
+172    100
+173    100
+174    100
+175    100
+176    98
+177    103
+178    84
+179    94
+180    87
+181    85
+182    97
+183    97
+184    99
+185    100
+186    100
+187    100
+188    100
+189    100
+190    100
+191    100
+192    100
+193    100
+194    100
+195    100
+196    100
+197    100
+198    100
+199    100
+200    100
+201    100
+202    99
+203    103
+204    93
+205    86
+206    95
+207    82
+208    96
+209    100
+210    98
+211    100
+212    100
+213    100
+214    100
+215    100
+216    100
+217    100
+218    100
+219    100
+220    100
+221    100
+222    100
+223    100
+224    100
+225    100
+226    100
+227    100
+228    100
+229    100
+230    102
+231    107
+232    94
+233    82
+234    94
+235    95
+236    101
+237    102
+238    100
+239    100
+240    100
+241    100
+242    100
+243    100
+244    100
+245    100
+246    100
+247    100
+248    100
+249    100
+250    100
+251    100
+252    100
+253    100
+254    100
+255    91
+256    84
+257    98
+258    103
+259    103
+260    100
+261    101
+262    100
+263    100
+264    100
+265    100
+266    100
+267    100
+268    100
+269    100
+270    100
+271    100
+272    100
+273    100
+274    100
+275    100
+276    100
+277    100
+278    100
+279    100
+280    109
+281    96
+282    99
+283    97
+284    92
+285    101
+286    103
+287    104
+288    102
+289    100
+290    100
+291    100
+292    100
+293    100
+294    100
+295    100
+296    100
+297    100
+298    100
+299    100
+300    100
+301    100
+302    100
+303    100
+304    100
+305    101
+306    103
+307    112
+308    98
+309    101
+310    101
+311    101
+312    104
+313    105
+314    107
+315    104
+316    100
+317    100
+318    100
+319    100
+320    100
+321    100
+322    100
+323    100
+324    100
+325    100
+326    100
+327    100
+328    100
+329    100
+330    100
+331    100
+332    100
+333    112
+334    112
+335    98
+336    108
+337    103
+338    99
+339    104
+340    106
+341    107
+342    106
+343    102
+344    100
+345    100
+346    100
+347    100
+348    100
+349    100
+350    100
+351    100
+352    100
+353    100
+354    100
+355    100
+356    100
+357    100
+358    100
+359    104
+360    111
+361    107
+362    111
+363    104
+364    107
+365    107
+366    104
+367    106
+368    106
+369    106
+370    101
+371    100
+372    100
+373    100
+374    100
+375    100
+376    100
+377    100
+378    100
+379    100
+380    100
+381    100
+382    100
+383    100
+384    100
+385    100
+386    106
+387    100
+388    100
+389    100
+390    110
+391    103
+392    109
+393    106
+394    105
+395    106
+396    107
+397    105
+398    101
+399    100
+400    100
+401    100
+402    100
+403    100
+404    100
+405    100
+406    100
+407    100
+408    100
+409    100
+410    100
+411    100
+412    100
+413    105
+414    112
+415    100
+416    100
+417    100
+418    107
+419    117
+420    114
+421    108
+422    106
+423    106
+424    107
+425    100
+426    100
+427    100
+428    101
+429    100
+430    100
+431    100
+432    100
+433    101
+434    106
+435    112
+436    113
+437    112
+438    113
+439    114
+440    117
+441    116
+442    107
+443    106
+444    107
+445    106
+446    102
+447    100
+448    100
+449    100
+450    100
+451    100
+452    100
+453    100
+454    100
+455    100
+456    100
+457    100
+458    100
+459    101
+460    100
+461    106
+462    113
+463    112
+464    101
+465    113
+466    118
+467    119
+468    116
+469    108
+470    107
+471    107
+472    107
+473    105
+474    100
+475    100
+476    100
+477    100
+478    100
+479    100
+480    100
+481    100
+482    100
+483    100
+484    100
+485    100
+486    100
+487    105
+488    112
+489    100
+490    113
+491    103
+492    119
+493    119
+494    119
+495    114
+496    107
+497    106
+498    106
+499    106
+500    104
+501    100
+502    100
+503    100
+504    100
+505    100
+506    100
+507    100
+508    100
+509    100
+510    100
+511    100
+512    100
+513    102
+514    104
+515    112
+516    112
+517    107
+518    113
+519    117
+520    119
+521    120
+522    120
+523    116
+524    109
+525    107
+526    106
+527    107
+528    104
+529    101
+530    100
+531    100
+532    100
+533    100
+534    100
+535    100
+536    100
+537    100
+538    100
+539    100
+540    100
+541    105
+542    100
+543    113
+544    112
+545    101
+546    115
+547    121
+548    121
+549    123
+550    121
+551    118
+552    112
+553    107
+554    106
+555    107
+556    106
+557    104
+558    100
+559    100
+560    100
+561    100
+562    100
+563    100
+564    100
+565    100
+566    100
+567    102
+568    110
+569    100
+570    112
+571    100
+572    112
+573    118
+574    120
+575    122
+576    123
+577    122
+578    119
+579    112
+580    107
+581    107
+582    107
+583    106
+584    102
+585    101
+586    100
+587    100
+588    100
+589    100
+590    100
+591    100
+592    100
+593    101
+594    101
+595    105
+596    100
+597    116
+598    118
+599    120
+600    121
+601    124
+602    106
+603    107
+604    104
+605    101
+606    100
+607    100
+608    100
+609    100
+610    100
+611    100
+612    101
+613    100
+614    101
+615    110
+616    100
+617    112
+618    112
+619    112
+620    119
+621    122
+622    124
+623    124
+624    122
+625    121
+626    114
+627    108
+628    107
+629    106
+630    106
+631    104
+632    100
+633    100
+634    100
+635    100
+636    100
+637    100
+638    100
+639    100
+640    100
+641    105
+642    111
+643    107
+644    100
+645    112
+646    113
+647    116
+648    121
+649    123
+650    125
+651    124
+652    122
+653    120
+654    114
+655    107
+656    107
+657    108
+658    106
+659    105
+660    102
+661    100
+662    100
+663    100
+664    100
+665    100
+666    100
+667    100
+668    100
+669    103
+670    106
+671    107
+672    106
+673    102
+674    117
+675    121
+676    123
+677    125
+678    125
+679    125
+680    122
+681    119
+682    113
+683    107
+684    106
+685    107
+686    107
+687    104
+688    100
+689    100
+690    101
+691    100
+692    100
+693    100
+694    102
+695    107
+696    111
+697    113
+698    111
+699    111
+700    116
+701    121
+702    122
+703    125
+704    125
+705    125
+706    123
+707    122
+708    115
+709    108
+710    107
+711    107
+712    106
+713    103
+714    100
+715    100
+716    101
+717    100
+718    100
+719    100
+720    102
+721    110
+722    106
+723    112
+724    113
+725    115
+726    120
+727    122
+728    123
+729    124
+730    125
+731    125
+732    123
+733    122
+734    119
+735    109
+736    108
+737    107
+738    106
+739    105
+740    101
+741    100
+742    100
+743    100
+744    100
+745    100
+746    100
+747    108
+748    115
+749    106
+750    110
+751    116
+752    107
+753    120
+754    123
+755    124
+756    125
+757    125
+758    125
+759    125
+760    124
+761    120
+762    121
+763    112
+764    107
+765    110
+766    106
+767    108
+768    100
+769    101
+770    101
+771    113
+772    108
+773    108
+774    106
+775    122
+776    125
+777    125
+778    125
+779    124
+780    124
+781    123
+782    121
+783    118
+784    112
+785    110
+786    107
+787    110
+788    102
+789    102
+790    100
+791    100
+792    100
+793    101
+794    103
+795    100
+796    100
+797    100
+798    113
+799    106
+800    113
+801    120
+802    124
+803    124
+804    125
+805    125
+806    125
+807    125
+808    124
+809    122
+810    123
+811    117
+812    110
+813    108
+814    111
+815    106
+816    106
+817    101
+818    100
+819    100
+820    100
+821    104
+822    100
+823    100
+824    117
+825    101
+826    108
+827    119
+828    120
+829    124
+830    125
+831    125
+832    125
+833    125
+834    125
+835    124
+836    121
+837    121
+838    116
+839    111
+840    104
+841    108
+842    107
+843    106
+844    103
+845    100
+846    101
+847    100
+848    101
+849    106
+850    112
+851    106
+852    106
+853    113
+854    116
+855    121
+856    124
+857    125
+858    125
+859    125
+860    124
+861    125
+862    125
+863    124
+864    123
+865    121
+866    114
+867    108
+868    107
+869    106
+870    107
+871    106
+872    101
+873    101
+874    100
+875    101
+876    108
+877    100
+878    112
+879    100
+880    113
+881    109
+882    121
+883    122
+884    124
+885    124
+886    125
+887    125
+888    124
+889    125
+890    125
+891    124
+892    122
+893    119
+894    114
+895    108
+896    106
+897    107
+898    107
+899    104
+900    100
+901    101
+902    103
+903    100
+904    112
+905    101
+906    106
+907    114
+908    117
+909    119
+910    123
+911    123
+912    125
+913    125
+914    125
+915    125
+916    124
+917    124
+918    125
+919    124
+920    122
+921    122
+922    115
+923    109
+924    107
+925    107
+926    107
+927    105
+928    103
+929    101
+930    101
+931    111
+932    107
+933    113
+934    101
+935    115
+936    118
+937    121
+938    122
+939    125
+940    125
+941    125
+942    125
+943    125
+944    124
+945    122
+946    120
+947    115
+948    110
+949    108
+950    108
+951    107
+952    100
+953    100
+954    112
+955    101
+956    113
+957    120
+958    122
+959    123
+960    125
+961    125
+962    125
+963    125
+964    125
+965    125
+966    125
+967    125
+968    124
+969    124
+970    122
+971    120
+972    114
+973    110
+974    107
+975    106
+976    106
+977    105
+978    106
+979    113
+980    113
+981    100
+982    108
+983    107
+984    119
+985    121
+986    124
+987    125
+988    125
+989    125
+990    124
+991    125
+992    125
+993    125
+994    125
+995    125
+996    124
+997    123
+998    122
+999    120
+1000   112
+1001   108
+1002   107
+1003   107
+1004   106
+1005   109
+1006   101
+1007   113
+1008   108
+1009   114
+1010   102
+1011   117
+1012   121
+1013   123
+1014   125
+1015   125
+1016   125
+1017   125
+1018   125
+1019   125
+1020   125
+1021   125
+1022   125
+1023   124
+1024   125
+1026   123
+1028   122
+1030   118
+1032   109
+1034   107
+1036   107
+1038   107
+1040   108
+1042   109
+1044   101
+1046   113
+1048   107
+1050   102
+1052   111
+1054   115
+1056   120
+1058   124
+1060   125
+1062   125
+1064   125
+1066   125
+1068   125
+1070   125
+1072   125
+1074   125
+1076   125
+1078   125
+1080   125
+1082   125
+1084   125
+1086   125
+1088   123
+1090   121
+1092   116
+1094   107
+1096   108
+1098   106
+1100   112
+1102   118
+1104   100
+1106   107
+1108   114
+1110   119
+1112   122
+1114   123
+1116   125
+1118   125
+1120   125
+1122   124
+1124   125
+1126   125
+1128   125
+1130   125
+1132   125
+1134   125
+1136   125
+1138   125
+1140   125
+1142   125
+1144   123
+1146   122
+1148   118
+1150   112
+1152   109
+1154   116
+1156   113
+1158   119
+1160   114
+1162   114
+1164   112
+1166   119
+1168   122
+1170   124
+1172   125
+1174   125
+1176   125
+1178   125
+1180   125
+1182   125
+1184   125
+1186   125
+1188   125
+1190   125
+1192   124
+1194   125
+1196   125
+1198   125
+1200   124
+1202   124
+1204   121
+1206   120
+1208   117
+1210   119
+1212   119
+1214   108
+1216   120
+1218   119
+1220   120
+1222   125
+1224   125
+1226   125
+1228   125
+1230   125
+1232   125
+1234   125
+1236   125
+1238   125
+1240   125
+1242   124
+1244   123
+1246   122
+1248   119
+1250   120
+1252   108
+1254   115
+1256   113
+1258   117
+1260   121
+1262   123
+1264   124
+1266   125
+1268   124
+1270   125
+1272   125
+1274   125
+1276   125
+1278   125
+1280   125
+1282   125
+1284   125
+1286   125
+1288   125
+1290   125
+1292   125
+1294   125
+1296   125
+1298   124
+1300   125
+1302   131
+1304   116
+1306   123
+1308   120
+1310   115
+1312   120
+1314   126
+1316   126
+1318   126
+1320   125
+1322   125
+1324   125
+1326   125
+1328   125
+1330   124
+1332   125
+1334   124
+1336   125
+1338   125
+1340   125
+1342   125
+1344   125
+1346   125
+1348   125
+1350   125
+1352   125
+1354   134
+1356   123
+1358   121
+1360   128
+1362   123
+1364   121
+1366   128
+1368   129
+1370   128
+1372   126
+1374   125
+1376   125
+1378   125
+1380   125
+1382   125
+1384   125
+1386   125
+1388   125
+1390   125
+1392   125
+1394   125
+1396   125
+1398   125
+1400   125
+1402   125
+1404   125
+1406   125
+1408   128
+1410   125
+1412   136
+1414   135
+1416   119
+1418   127
+1420   127
+1422   129
+1424   130
+1426   100
+1428   100
+1430   101
+1432   96
+1434   100
+1436   101
+1438   100
+1440   101
+1442   99
+1444   101
+1446   101
+1448   97
+1450   99
+1452   98
+1454   100
+1456   99
+1458   99
+1460   98
+1462   100
+1464   100
+1466   100
+1468   101
+1470   100
+1472   100
+1474   100
+1476   100
+1478   100
+1480   100
+1482   100
+1484   100
+1486   100
+1488   101
+1490   100
+1492   104
+1494   102
+1496   99
+1498   98
+1500   94
+1502   100
+1504   101
+1506   101
+1508   100
+1510   100
+1512   99
+1514   101
+1516   100
+1518   100
+1520   97
+1522   101
+1524   100
+1526   100
+1528   100
+1530   100
+1532   100
+1534   100
+1536   101
+1538   100
+1540   100
+1542   100
+1544   100
+1546   100
+1548   101
+1550   101
+1552   101
+1554   101
+1556   99
+1558   99
+1560   100
+1562   97
+1564   103
+1566   99
+1568   100
+1570   100
+1572   99
+1574   102
+1576   99
+1578   99
+1580   100
+1582   100
+1584   100
+1586   100
+1588   100
+1590   100
+1592   101
+1594   99
+1596   96
+1598   99
+1600   95
+1602   100
+1604   96
+1606   102
+1608   102
+1610   97
+1612   96
+1614   98
+1616   99
+1618   101
+1620   101
+1622   100
+1624   100
+1626   100
+1628   100
+1630   100
+1632   100
+1634   100
+1636   100
+1638   100
+1640   100
+1642   100
+1644   100
+1646   100
+1648   100
+1650   100
+1652   98
+1654   98
+1656   101
+1658   101
+1660   100
+1662   100
+1664   101
+1666   97
+1668   101
+1670   99
+1672   95
+1674   98
+1676   98
+1678   101
+1680   99
+1682   98
+1684   101
+1686   100
+1688   100
+1690   100
+1692   100
+1694   100
+1696   100
+1698   100
+1700   100
+1702   100
+1704   100
+1706   100
+1708   101
+1710   99
+1712   98
+1714   100
+1716   100
+1718   103
+1720   100
+1722   103
+1724   100
+1726   102
+1728   97
+1730   100
+1732   99
+1734   101
+1736   103
+1738   101
+1740   101
+1742   101
+1744   100
+1746   100
+1748   100
+1750   100
+1752   100
+1754   101
+1756   100
+1758   100
+1760   100
+1762   100
+1764   100
+1766   102
+1768   103
+1770   98
+1772   101
+1774   103
+1776   100
+1778   104
+1780   96
+1782   101
+1784   99
+1786   103
+1788   102
+1790   102
+1792   98
+1794   102
+1796   102
+1798   100
+1800   100
+1802   100
+1804   100
+1806   100
+1808   100
+1810   100
+1812   100
+1814   100
+1816   100
+1818   101
+1820   100
+1822   102
+1824   100
+1826   99
+1828   99
+1830   104
+1832   103
+1834   104
+1836   104
+1838   104
+1840   100
+1842   105
+1844   101
+1846   103
+1848   103
+1850   102
+1852   102
+1854   102
+1856   101
+1858   100
+1860   100
+1862   100
+1864   101
+1866   100
+1868   101
+1870   100
+1872   100
+1874   100
+1876   100
+1878   100
+1880   100
+1882   101
+1884   104
+1886   106
+1888   102
+1890   101
+1892   106
+1894   105
+1896   103
+1898   106
+1900   106
+1902   104
+1904   104
+1906   105
+1908   104
+1910   102
+1912   103
+1914   101
+1916   100
+1918   101
+1920   100
+1922   100
+1924   100
+1926   100
+1928   100
+1930   100
+1932   100
+1934   100
+1936   100
+1938   101
+1940   100
+1942   101
+1944   100
+1946   105
+1948   103
+1950   106
+1952   107
+1954   106
+1956   104
+1958   105
+1960   105
+1962   103
+1964   106
+1966   105
+1968   102
+1970   101
+1972   101
+1974   100
+1976   100
+1978   100
+1980   100
+1982   100
+1984   101
+1986   101
+1988   101
+1990   101
+1992   101
+1994   101
+1996   102
+1998   100
+2000   105
+2002   109
+2004   105
+2006   104
+2008   105
+2010   105
+2012   106
+2014   106
+2016   108
+2018   106
+2020   104
+2022   102
+2024   103
+2026   103
+2028   102
+2030   100
+2032   101
+2034   101
+2036   101
+2038   100
+2040   101
+2042   100
+2044   101
+2046   100
+2048   100
+2052   101
+2056   101
+2060   105
+2064   106
+2068   102
+2072   109
+2076   107
+2080   108
+2084   107
+2088   107
+2092   108
+2096   104
+2100   108
+2104   107
+2108   109
+2112   105
+2116   105
+2120   101
+2124   103
+2128   101
+2132   102
+2136   100
+2140   100
+2144   100
+2148   100
+2152   100
+2156   101
+2160   100
+2164   100
+2168   106
+2172   108
+2176   107
+2180   108
+2184   109
+2188   111
+2192   108
+2196   107
+2200   107
+2204   112
+2208   108
+2212   106
+2216   104
+2220   102
+2224   101
+2228   100
+2232   100
+2236   101
+2240   101
+2244   101
+2248   100
+2252   101
+2256   101
+2260   102
+2264   103
+2268   101
+2272   101
+2276   107
+2280   103
+2284   109
+2288   110
+2292   112
+2296   108
+2300   111
+2304   112
+2308   111
+2312   109
+2316   112
+2320   110
+2324   111
+2328   107
+2332   105
+2336   104
+2340   101
+2344   101
+2348   102
+2352   102
+2356   101
+2360   101
+2364   101
+2368   101
+2372   100
+2376   102
+2380   101
+2384   101
+2388   101
+2392   103
+2396   107
+2400   109
+2404   111
+2408   107
+2412   112
+2416   108
+2420   111
+2424   113
+2428   113
+2432   112
+2436   114
+2440   107
+2444   112
+2448   113
+2452   109
+2456   103
+2460   101
+2464   100
+2468   103
+2472   101
+2476   101
+2480   101
+2484   101
+2488   100
+2492   101
+2496   105
+2500   101
+2504   107
+2508   103
+2512   111
+2516   112
+2520   111
+2524   108
+2528   113
+2532   112
+2536   116
+2540   116
+2544   114
+2548   115
+2552   112
+2556   113
+2560   113
+2564   111
+2568   109
+2572   109
+2576   102
+2580   102
+2584   101
+2588   104
+2592   101
+2596   100
+2600   101
+2604   104
+2608   101
+2612   101
+2616   106
+2620   108
+2624   112
+2628   112
+2632   116
+2636   115
+2640   115
+2644   117
+2648   113
+2652   114
+2656   112
+2660   114
+2664   111
+2668   106
+2672   102
+2676   102
+2680   102
+2684   103
+2688   102
+2692   102
+2696   101
+2700   101
+2704   101
+2708   101
+2712   101
+2716   103
+2720   109
+2724   112
+2728   112
+2732   113
+2736   117
+2740   118
+2744   113
+2748   118
+2752   115
+2756   114
+2760   117
+2764   114
+2768   115
+2772   113
+2776   113
+2780   111
+2784   108
+2788   103
+2792   101
+2796   104
+2800   102
+2804   105
+2808   101
+2812   107
+2816   106
+2820   106
+2824   102
+2828   104
+2832   108
+2836   112
+2840   111
+2844   116
+2848   114
+2852   118
+2856   118
+2860   119
+2864   118
+2868   117
+2872   118
+2876   124
+2880   126
+2884   119
+2888   124
+2892   118
+2896   121
+2900   114
+2904   118
+2908   123
+2912   116
+2916   116
+2920   123
+2924   121
+2928   120
+2932   121
+2936   125
+2940   105
+2944   126
+2948   111
+2952   129
+2956   116
+2960   111
+2964   116
+2968   129
+2972   128
+2976   119
+2980   128
+2984   123
+2988   127
+2992   130
+2996   129
+3000   118
+3004   128
+3008   122
+3012   115
+3016   127
+3020   114
+3024   119
+3028   118
+3032   119
+3036   126
+3040   102
+3044   111
+3048   103
+3052   111
+3056   104
+3060   109
+3064   104
+3068   109
+3072   131
+3076   131
+3080   114
+3084   117
+3088   129
+3092   127
+3096   127
+3100   128
+3104   125
+3108   127
+3112   124
+3116   127
+3120   121
+3124   128
+3128   117
+3132   122
+3136   113
+3140   121
+3144   112
+3148   126
+3152   104
+3156   105
+3160   114
+3164   102
+3168   114
+3172   124
+3176   127
+3180   109
+3184   131
+3188   117
+3192   115
+3196   129
+3200   129
+3204   122
+3208   121
+3212   122
+3216   129
+3220   129
+3224   126
+3228   127
+3232   127
+3236   126
+3240   124
+3244   120
+3248   119
+3252   125
+3256   112
+3260   121
+3264   106
+3268   125
+3272   126
+3276   121
+3280   117
+3284   126
+3288   126
+3292   131
+3296   111
+3300   105
+3304   117
+3308   116
+3312   116
+3316   120
+3320   130
+3324   129
+3328   126
+3332   128
+3336   129
+3340   127
+3344   121
+3348   125
+3352   115
+3356   127
+3360   126
+3364   127
+3368   111
+3372   121
+3376   131
+3380   118
+3384   111
+3388   131
+3392   132
+3396   132
+3400   130
+3404   128
+3408   127
+3412   129
+3416   128
+3420   125
+3424   127
+3428   129
+3432   126
+3436   120
+3440   125
+3444   126
+3448   116
+3452   131
+3456   124
+3460   129
+3464   117
+3468   130
+3472   130
+3476   133
+3480   102
+3484   133
+3488   135
+3492   115
+3496   131
+3500   120
+3504   120
+3508   123
+3512   124
+3516   126
+3520   129
+3524   132
+3528   129
+3532   129
+3536   127
+3540   130
+3544   123
+3548   129
+3552   132
+3556   127
+3560   129
+3564   129
+3568   121
+3572   131
+3576   117
+3580   135
+3584   121
+3588   131
+3592   112
+3596   121
+3600   136
+3604   119
+3608   123
+3612   119
+3616   121
+3620   132
+3624   131
+3628   129
+3632   127
+3636   132
+3640   128
+3644   131
+3648   127
+3652   129
+3656   130
+3660   128
+3664   133
+3668   124
+3672   125
+3676   122
+3680   128
+3684   120
+3688   116
+3692   114
+3696   127
+3700   112
+3704   125
+3708   127
+3712   114
+3716   136
+3720   136
+3724   135
+3728   133
+3732   133
+3736   134
+3740   133
+3744   128
+3748   129
+3752   127
+3756   129
+3760   131
+3764   132
+3768   129
+3772   129
+3776   131
+3780   134
+3784   128
+3788   123
+3792   126
+3796   126
+3800   115
+3804   128
+3808   127
+3812   133
+3816   136
+3820   114
+3824   138
+3828   122
+3832   128
+3836   140
+3840   116
+3844   127
+3848   134
+3852   136
+3856   131
+3860   129
+3864   128
+3868   129
+3872   132
+3876   131
+3880   128
+3884   130
+3888   131
+3892   132
+3896   131
+3900   127
+3904   130
+3908   127
+3912   134
+3916   123
+3920   129
+3924   135
+3928   128
+3932   118
+3936   117
+3940   142
+3944   132
+3948   124
+3952   138
+3956   139
+3960   136
+3964   131
+3968   132
+3972   132
+3976   127
+3980   130
+3984   130
+3988   129
+3992   129
+3996   132
+4000   132
+4004   132
+4008   130
+4012   133
+4016   132
+4020   136
+4024   128
+4028   131
+4032   121
+4036   130
+4040   138
+4044   142
+4048   121
+4052   132
+4056   123
+4060   130
+4064   123
+4068   134
+4072   135
+4076   135
+4080   134
+4084   132
+4088   131
+4092   131
+4096   131
+4104   136
+4112   131
+4120   137
+4128   135
+4136   128
+4144   128
+4152   131
+4160   120
+4168   143
+4176   144
+4184   143
+4192   143
+4200   126
+4208   139
+4216   138
+4224   136
+4232   133
+4240   133
+4248   137
+4256   132
+4264   135
+4272   133
+4280   135
+4288   132
+4296   134
+4304   131
+4312   131
+4320   131
+4328   143
+4336   148
+4344   141
+4352   140
+4360   136
+4368   137
+4376   138
+4384   136
+4392   142
+4400   139
+4408   140
+4416   136
+4424   140
+4432   141
+4440   133
+4448   140
+4456   138
+4464   146
+4472   139
+4480   139
+4488   141
+4496   138
+4504   139
+4512   138
+4520   136
+4528   140
+4536   146
+4544   146
+4552   145
+4560   145
+4568   143
+4576   139
+4584   140
+4592   141
+4600   141
+4608   146
+4616   146
+4624   140
+4632   137
+4640   144
+4648   138
+4656   140
+4664   139
+4672   140
+4680   143
+4688   144
+4696   142
+4704   142
+4712   140
+4720   142
+4728   141
+4736   137
+4744   139
+4752   140
+4760   141
+4768   141
+4776   142
+4784   145
+4792   146
+4800   140
+4808   146
+4816   138
+4824   141
+4832   144
+4840   136
+4848   142
+4856   146
+4864   143
+4872   147
+4880   140
+4888   143
+4896   146
+4904   146
+4912   144
+4920   145
+4928   142
+4936   142
+4944   139
+4952   143
+4960   139
+4968   140
+4976   142
+4984   144
+4992   145
+5000   139
+5008   145
+5016   147
+5024   140
+5032   146
+5040   148
+5048   140
+5056   140
+5064   144
+5072   142
+5080   143
+5088   143
+5096   145
+5104   146
+5112   144
+5120   147
+5128   142
+5136   146
+5144   147
+5152   143
+5160   141
+5168   142
+5176   140
+5184   137
+5192   140
+5200   144
+5208   144
+5216   143
+5224   143
+5232   144
+5240   147
+5248   143
+5256   146
+5264   140
+5272   146
+5280   146
+5288   142
+5296   2984
+5304   1277
+5312   142
+5320   286
+5328   239
+5336   267
+5344   211
+5352   140
+5360   141
+5368   144
+5376   145
+5384   145
+5392   148
+5400   144
+5408   149
+5416   146
+5424   150
+5432   143
+5440   144
+5448   149
+5456   148
+5464   145
+5472   146
+5480   146
+5488   147
+5496   146
+5504   143
+5512   141
+5520   145
+5528   137
+5536   145
+5544   143
+5552   142
+5560   143
+5568   146
+5576   145
+5584   148
+5592   145
+5600   145
+5608   145
+5616   149
+5624   143
+5632   150
+5640   150
+5648   148
+5656   145
+5664   147
+5672   146
+5680   148
+5688   149
+5696   148
+5704   150
+5712   147
+5720   149
+5728   144
+5736   146
+5744   147
+5752   140
+5760   148
+5768   211
+5776   147
+5784   151
+5792   150
+5800   151
+5808   149
+5816   146
+5824   153
+5832   159
+5840   146
+5848   154
+5856   151
+5864   149
+5872   152
+5880   147
+5888   150
+5896   149
+5904   151
+5912   149
+5920   148
+5928   151
+5936   150
+5944   150
+5952   150
+5960   150
+5968   148
+5976   149
+5984   148
+5992   147
+6000   148
+6008   150
+6016   150
+6024   150
+6032   149
+6040   146
+6048   158
+6056   144
+6064   149
+6072   147
+6080   152
+6088   153
+6096   149
+6104   151
+6112   150
+6120   150
+6128   149
+6136   149
+6144   150
+6152   151
+6160   151
+6168   151
+6176   150
+6184   150
+6192   151
+6200   150
+6208   149
+6216   149
+6224   151
+6232   151
+6240   153
+6248   153
+6256   152
+6264   148
+6272   150
+6280   150
+6288   153
+6296   151
+6304   152
+6312   149
+6320   152
+6328   148
+6336   150
+6344   151
+6352   152
+6360   151
+6368   150
+6376   153
+6384   153
+6392   151
+6400   151
+6408   151
+6416   150
+6424   151
+6432   151
+6440   152
+6448   151
+6456   153
+6464   152
+6472   151
+6480   151
+6488   155
+6496   155
+6504   155
+6512   158
+6520   155
+6528   154
+6536   152
+6544   154
+6552   152
+6560   152
+6568   151
+6576   153
+6584   152
+6592   152
+6600   152
+6608   153
+6616   151
+6624   151
+6632   153
+6640   151
+6648   154
+6656   152
+6664   153
+6672   151
+6680   151
+6688   160
+6696   160
+6704   151
+6712   152
+6720   155
+6728   158
+6736   153
+6744   158
+6752   878
+6760   157
+6768   780
+6776   152
+6784   175
+6792   154
+6800   153
+6808   154
+6816   156
+6824   152
+6832   157
+6840   155
+6848   158
+6856   159
+6864   158
+6872   155
+6880   154
+6888   150
+6896   154
+6904   155
+6912   154
+6920   154
+6928   151
+6936   153
+6944   152
+6952   152
+6960   152
+6968   154
+6976   154
+6984   151
+6992   153
+7000   154
+7008   157
+7016   157
+7024   156
+7032   156
+7040   153
+7048   160
+7056   158
+7064   156
+7072   156
+7080   157
+7088   161
+7096   162
+7104   156
+7112   156
+7120   158
+7128   157
+7136   155
+7144   155
+7152   157
+7160   155
+7168   152
+7176   153
+7184   152
+7192   155
+7200   152
+7208   154
+7216   177
+7224   157
+7232   158
+7240   156
+7248   160
+7256   155
+7264   158
+7272   155
+7280   155
+7288   156
+7296   157
+7304   154
+7312   162
+7320   160
+7328   158
+7336   161
+7344   162
+7352   163
+7360   161
+7368   162
+7376   164
+7384   161
+7392   162
+7400   160
+7408   162
+7416   162
+7424   161
+7432   161
+7440   161
+7448   157
+7456   156
+7464   157
+7472   154
+7480   160
+7488   156
+7496   156
+7504   162
+7512   157
+7520   156
+7528   161
+7536   160
+7544   164
+7552   162
+7560   163
+7568   163
+7576   164
+7584   164
+7592   163
+7600   162
+7608   164
+7616   162
+7624   161
+7632   162
+7640   163
+7648   163
+7656   160
+7664   161
+7672   162
+7680   161
+7688   157
+7696   160
+7704   161
+7712   156
+7720   157
+7728   155
+7736   162
+7744   156
+7752   161
+7760   159
+7768   162
+7776   164
+7784   163
+7792   165
+7800   167
+7808   166
+7816   165
+7824   165
+7832   165
+7840   164
+7848   164
+7856   166
+7864   166
+7872   163
+7880   164
+7888   163
+7896   162
+7904   165
+7912   157
+7920   155
+7928   163
+7936   160
+7944   163
+7952   162
+7960   163
+7968   162
+7976   160
+7984   162
+7992   164
+8000   165
+8008   166
+8016   166
+8024   164
+8032   168
+8040   168
+8048   167
+8056   166
+8064   167
+8072   167
+8080   167
+8088   166
+8096   164
+8104   165
+8112   166
+8120   167
+8128   168
+8136   164
+8144   161
+8152   162
+8160   167
+8168   167
+8176   165
+8184   165
+8192   164
+8208   165
+8224   168
+8240   167
+8256   168
+8272   169
+8288   167
+8304   167
+8320   168
+8336   167
+8352   166
+8368   167
+8384   166
+8400   169
+8416   166
+8432   170
+8448   170
+8464   167
+8480   167
+8496   167
+8512   168
+8528   159
+8544   168
+8560   168
+8576   168
+8592   169
+8608   169
+8624   169
+8640   171
+8656   170
+8672   172
+8688   172
+8704   173
+8720   171
+8736   171
+8752   170
+8768   173
+8784   169
+8800   171
+8816   168
+8832   170
+8848   170
+8864   171
+8880   171
+8896   169
+8912   171
+8928   166
+8944   170
+8960   166
+8976   169
+8992   172
+9008   173
+9024   173
+9040   172
+9056   172
+9072   173
+9088   172
+9104   172
+9120   173
+9136   172
+9152   172
+9168   172
+9184   173
+9200   173
+9216   172
+9232   172
+9248   170
+9264   173
+9280   174
+9296   175
+9312   174
+9328   173
+9344   173
+9360   173
+9376   240
+9392   244
+9408   244
+9424   243
+9440   249
+9456   250
+9472   247
+9488   244
+9504   251
+9520   250
+9536   250
+9552   259
+9568   252
+9584   250
+9600   251
+9616   250
+9632   251
+9648   250
+9664   251
+9680   250
+9696   250
+9712   251
+9728   250
+9744   251
+9760   251
+9776   251
+9792   251
+9808   250
+9824   250
+9840   252
+9856   251
+9872   251
+9888   251
+9904   251
+9920   251
+9936   252
+9952   251
+9968   251
+9984   251
+10000  251
+10016  251
+10032  251
+10048  251
+10064  251
+10080  251
+10096  250
+10112  251
+10128  277
+10144  274
+10160  276
+10176  275
+10192  275
+10208  275
+10224  278
+10240  276
+10256  274
+10272  277
+10288  279
+10304  277
+10320  275
+10336  277
+10352  280
+10368  277
+10384  272
+10400  275
+10416  281
+10432  279
+10448  278
+10464  279
+10480  279
+10496  275
+10512  277
+10528  278
+10544  279
+10560  280
+10576  282
+10592  281
+10608  277
+10624  278
+10640  281
+10656  279
+10672  280
+10688  277
+10704  277
+10720  279
+10736  280
+10752  277
+10768  279
+10784  274
+10800  278
+10816  282
+10832  277
+10848  276
+10864  283
+10880  283
+10896  282
+10912  280
+10928  281
+10944  283
+10960  281
+10976  283
+10992  282
+11008  280
+11024  282
+11040  280
+11056  285
+11072  283
+11088  369
+11104  279
+11120  282
+11136  280
+11152  279
+11168  281
+11184  285
+11200  283
+11216  277
+11232  283
+11248  284
+11264  282
+11280  280
+11296  280
+11312  284
+11328  279
+11344  284
+11360  281
+11376  282
+11392  281
+11408  280
+11424  278
+11440  282
+11456  283
+11472  282
+11488  280
+11504  281
+11520  284
+11536  282
+11552  293
+11568  283
+11584  296
+11600  279
+11616  277
+11632  282
+11648  302
+11664  293
+11680  285
+11696  279
+11712  285
+11728  280
+11744  279
+11760  282
+11776  278
+11792  282
+11808  285
+11824  281
+11840  281
+11856  280
+11872  281
+11888  281
+11904  307
+11920  281
+11936  283
+11952  286
+11968  281
+11984  283
+12000  296
+12016  279
+12032  285
+12048  286
+12064  294
+12080  297
+12096  307
+12112  277
+12128  277
+12144  281
+12160  283
+12176  308
+12192  286
+12208  281
+12224  291
+12240  286
+12256  279
+12272  304
+12288  290
+12304  298
+12320  282
+12336  278
+12352  290
+12368  278
+12384  281
+12400  281
+12416  288
+12432  280
+12448  298
+12464  302
+12480  310
+12496  280
+12512  282
+12528  302
+12544  304
+12560  306
+12576  278
+12592  279
+12608  301
+12624  286
+12640  283
+12656  280
+12672  286
+12688  280
+12704  286
+12720  313
+12736  279
+12752  281
+12768  307
+12784  294
+12800  304
+12816  285
+12832  280
+12848  316
+12864  302
+12880  289
+12896  286
+12912  328
+12928  294
+12944  281
+12960  312
+12976  294
+12992  335
+13008  298
+13024  320
+13040  292
+13056  319
+13072  282
+13088  307
+13104  285
+13120  283
+13136  290
+13152  293
+13168  325
+13184  281
+13200  310
+13216  284
+13232  286
+13248  284
+13264  301
+13280  309
+13296  286
+13312  285
+13328  316
+13344  309
+13360  287
+13376  298
+13392  292
+13408  319
+13424  300
+13440  284
+13456  320
+13472  304
+13488  332
+13504  312
+13520  303
+13536  293
+13552  321
+13568  288
+13584  296
+13600  286
+13616  311
+13632  322
+13648  287
+13664  324
+13680  313
+13696  334
+13712  319
+13728  288
+13744  287
+13760  340
+13776  297
+13792  284
+13808  322
+13824  339
+13840  328
+13856  288
+13872  335
+13888  297
+13904  286
+13920  294
+13936  285
+13952  290
+13968  332
+13984  286
+14000  338
+14016  290
+14032  297
+14048  348
+14064  290
+14080  288
+14096  340
+14112  332
+14128  291
+14144  330
+14160  327
+14176  307
+14192  311
+14208  294
+14224  338
+14240  342
+14256  356
+14272  321
+14288  330
+14304  321
+14320  289
+14336  330
+14352  287
+14368  288
+14384  288
+14400  330
+14416  347
+14432  288
+14448  316
+14464  299
+14480  311
+14496  298
+14512  295
+14528  328
+14544  319
+14560  338
+14576  341
+14592  326
+14608  313
+14624  334
+14640  320
+14656  315
+14672  318
+14688  314
+14704  361
+14720  352
+14736  296
+14752  307
+14768  325
+14784  363
+14800  340
+14816  363
+14832  301
+14848  326
+14864  366
+14880  323
+14896  341
+14912  359
+14928  356
+14944  334
+14960  337
+14976  371
+14992  319
+15008  287
+15024  344
+15040  322
+15056  366
+15072  346
+15088  317
+15104  301
+15120  330
+15136  345
+15152  324
+15168  346
+15184  352
+15200  327
+15216  334
+15232  344
+15248  334
+15264  367
+15280  338
+15296  338
+15312  364
+15328  368
+15344  315
+15360  357
+15376  348
+15392  325
+15408  334
+15424  374
+15440  358
+15456  360
+15472  351
+15488  356
+15504  372
+15520  346
+15536  363
+15552  334
+15568  352
+15584  369
+15600  359
+15616  326
+15632  341
+15648  372
+15664  370
+15680  374
+15696  366
+15712  368
+15728  369
+15744  349
+15760  355
+15776  368
+15792  354
+15808  366
+15824  346
+15840  342
+15856  363
+15872  371
+15888  347
+15904  324
+15920  368
+15936  367
+15952  373
+15968  367
+15984  372
+16000  364
+16016  372
+16032  356
+16048  372
+16064  371
+16080  372
+16096  366
+16112  370
+16128  363
+16144  371
+16160  374
+16176  352
+16192  359
+16208  364
+16224  359
+16240  362
+16256  330
+16272  369
+16288  322
+16304  362
+16320  381
+16336  370
+16352  375
+16368  374
+16384  372
+16416  378
+16448  373
+16480  373
+16512  372
+16544  380
+16576  377
+16608  372
+16640  371
+16672  376
+16704  374
+16736  363
+16768  372
+16800  373
+16832  375
+16864  379
+16896  383
+16928  381
+16960  376
+16992  374
+17024  373
+17056  381
+17088  373
+17120  385
+17152  373
+17184  383
+17216  378
+17248  376
+17280  376
+17312  385
+17344  384
+17376  383
+17408  383
+17440  387
+17472  379
+17504  393
+17536  382
+17568  379
+17600  391
+17632  390
+17664  383
+17696  384
+17728  388
+17760  388
+17792  382
+17824  388
+17856  394
+17888  388
+17920  388
+17952  383
+17984  385
+18016  379
+18048  390
+18080  394
+18112  387
+18144  392
+18176  385
+18208  396
+18240  388
+18272  393
+18304  386
+18336  480
+18368  402
+18400  398
+18432  395
+18464  399
+18496  390
+18528  392
+18560  388
+18592  392
+18624  391
+18656  389
+18688  393
+18720  385
+18752  395
+18784  390
+18816  393
+18848  393
+18880  389
+18912  392
+18944  391
+18976  390
+19008  392
+19040  396
+19072  389
+19104  389
+19136  393
+19168  394
+19200  390
+19232  390
+19264  399
+19296  392
+19328  394
+19360  397
+19392  396
+19424  389
+19456  392
+19488  395
+19520  397
+19552  399
+19584  395
+19616  403
+19648  397
+19680  396
+19712  396
+19744  397
+19776  398
+19808  389
+19840  396
+19872  401
+19904  401
+19936  399
+19968  398
+20000  401
+20032  395
+20064  399
+20096  395
+20128  401
+20160  394
+20192  396
+20224  397
+20256  394
+20288  396
+20320  396
+20352  392
+20384  402
+20416  409
+20448  392
+20480  396
+20512  390
+20544  392
+20576  394
+20608  397
+20640  393
+20672  399
+20704  393
+20736  411
+20768  396
+20800  400
+20832  394
+20864  399
+20896  398
+20928  398
+20960  400
+20992  413
+21024  398
+21056  396
+21088  416
+21120  397
+21152  395
+21184  411
+21216  400
+21248  396
+21280  397
+21312  398
+21344  393
+21376  400
+21408  418
+21440  401
+21472  396
+21504  399
+21536  398
+21568  397
+21600  399
+21632  396
+21664  399
+21696  399
+21728  410
+21760  412
+21792  415
+21824  410
+21856  405
+21888  409
+21920  411
+21952  408
+21984  415
+22016  396
+22048  409
+22080  412
+22112  411
+22144  415
+22176  412
+22208  410
+22240  412
+22272  414
+22304  415
+22336  412
+22368  417
+22400  411
+22432  413
+22464  419
+22496  413
+22528  415
+22560  409
+22592  414
+22624  413
+22656  421
+22688  411
+22720  408
+22752  414
+22784  414
+22816  400
+22848  395
+22880  413
+22912  421
+22944  416
+22976  416
+23008  417
+23040  416
+23072  395
+23104  415
+23136  417
+23168  421
+23200  416
+23232  410
+23264  411
+23296  412
+23328  410
+23360  398
+23392  412
+23424  411
+23456  412
+23488  412
+23520  407
+23552  412
+23584  415
+23616  411
+23648  411
+23680  413
+23712  409
+23744  411
+23776  418
+23808  414
+23840  410
+23872  410
+23904  417
+23936  414
+23968  414
+24000  413
+24032  412
+24064  419
+24096  411
+24128  421
+24160  416
+24192  417
+24224  414
+24256  413
+24288  414
+24320  418
+24352  416
+24384  409
+24416  418
+24448  412
+24480  421
+24512  417
+24544  421
+24576  418
+24608  434
+24640  428
+24672  430
+24704  430
+24736  434
+24768  438
+24800  432
+24832  434
+24864  429
+24896  432
+24928  430
+24960  434
+24992  428
+25024  432
+25056  435
+25088  434
+25120  424
+25152  429
+25184  433
+25216  433
+25248  426
+25280  430
+25312  434
+25344  429
+25376  439
+25408  432
+25440  440
+25472  434
+25504  431
+25536  436
+25568  441
+25600  436
+25632  449
+25664  449
+25696  443
+25728  437
+25760  439
+25792  441
+25824  441
+25856  442
+25888  451
+25920  448
+25952  450
+25984  443
+26016  434
+26048  457
+26080  461
+26112  456
+26144  457
+26176  464
+26208  450
+26240  465
+26272  451
+26304  455
+26336  467
+26368  463
+26400  453
+26432  456
+26464  456
+26496  455
+26528  463
+26560  447
+26592  455
+26624  455
+26656  462
+26688  457
+26720  466
+26752  465
+26784  460
+26816  458
+26848  454
+26880  458
+26912  463
+26944  453
+26976  477
+27008  455
+27040  460
+27072  471
+27104  475
+27136  459
+27168  488
+27200  464
+27232  459
+27264  472
+27296  469
+27328  461
+27360  476
+27392  465
+27424  473
+27456  472
+27488  484
+27520  482
+27552  491
+27584  482
+27616  471
+27648  480
+27680  481
+27712  482
+27744  484
+27776  476
+27808  486
+27840  484
+27872  485
+27904  494
+27936  478
+27968  478
+28000  490
+28032  478
+28064  481
+28096  480
+28128  478
+28160  487
+28192  487
+28224  481
+28256  491
+28288  479
+28320  495
+28352  486
+28384  480
+28416  480
+28448  501
+28480  478
+28512  491
+28544  489
+28576  472
+28608  497
+28640  483
+28672  494
+28704  474
+28736  491
+28768  494
+28800  503
+28832  490
+28864  503
+28896  500
+28928  493
+28960  495
+28992  492
+29024  496
+29056  487
+29088  498
+29120  491
+29152  491
+29184  502
+29216  489
+29248  489
+29280  488
+29312  497
+29344  506
+29376  495
+29408  494
+29440  491
+29472  504
+29504  498
+29536  501
+29568  512
+29600  496
+29632  488
+29664  489
+29696  503
+29728  502
+29760  490
+29792  502
+29824  494
+29856  510
+29888  501
+29920  1673
+29952  506
+29984  490
+30016  504
+30048  497
+30080  491
+30112  509
+30144  489
+30176  495
+30208  500
+30240  502
+30272  508
+30304  498
+30336  527
+30368  517
+30400  514
+30432  509
+30464  524
+30496  520
+30528  527
+30560  520
+30592  510
+30624  525
+30656  524
+30688  509
+30720  518
+30752  533
+30784  525
+30816  515
+30848  520
+30880  525
+30912  519
+30944  502
+30976  516
+31008  510
+31040  518
+31072  526
+31104  533
+31136  513
+31168  519
+31200  513
+31232  519
+31264  518
+31296  535
+31328  519
+31360  549
+31392  527
+31424  527
+31456  518
+31488  544
+31520  527
+31552  518
+31584  515
+31616  527
+31648  510
+31680  525
+31712  539
+31744  519
+31776  532
+31808  516
+31840  560
+31872  534
+31904  575
+31936  555
+31968  547
+32000  526
+32032  515
+32064  545
+32096  551
+32128  543
+32160  532
+32192  522
+32224  524
+32256  565
+32288  520
+32320  527
+32352  525
+32384  548
+32416  537
+32448  514
+32480  545
+32512  536
+32544  527
+32576  551
+32608  549
+32640  573
+32672  525
+32704  537
+32736  545
+32768  524
+32832  538
+32896  538
+32960  534
+33024  563
+33088  528
+33152  567
+33216  528
+33280  566
+33344  574
+33408  569
+33472  549
+33536  572
+33600  571
+33664  520
+33728  585
+33792  570
+33856  582
+33920  544
+33984  581
+34048  551
+34112  572
+34176  578
+34240  571
+34304  590
+34368  581
+34432  585
+34496  582
+34560  568
+34624  584
+34688  587
+34752  591
+34816  591
+34880  584
+34944  581
+35008  586
+35072  562
+35136  573
+35200  587
+35264  593
+35328  594
+35392  600
+35456  568
+35520  589
+35584  586
+35648  591
+35712  591
+35776  595
+35840  589
+35904  600
+35968  608
+36032  600
+36096  612
+36160  599
+36224  612
+36288  602
+36352  611
+36416  607
+36480  602
+36544  606
+36608  605
+36672  603
+36736  591
+36800  608
+36864  612
+36928  610
+36992  604
+37056  615
+37120  613
+37184  619
+37248  613
+37312  607
+37376  611
+37440  615
+37504  611
+37568  626
+37632  618
+37696  619
+37760  623
+37824  618
+37888  630
+37952  615
+38016  622
+38080  624
+38144  622
+38208  616
+38272  629
+38336  623
+38400  616
+38464  625
+38528  614
+38592  626
+38656  635
+38720  624
+38784  624
+38848  623
+38912  615
+38976  622
+39040  629
+39104  635
+39168  623
+39232  639
+39296  634
+39360  629
+39424  642
+39488  637
+39552  637
+39616  637
+39680  648
+39744  640
+39808  647
+39872  636
+39936  632
+40000  645
+40064  638
+40128  645
+40192  640
+40256  644
+40320  635
+40384  629
+40448  641
+40512  647
+40576  648
+40640  646
+40704  640
+40768  643
+40832  657
+40896  638
+40960  647
+41024  648
+41088  649
+41152  644
+41216  642
+41280  644
+41344  648
+41408  648
+41472  663
+41536  646
+41600  666
+41664  651
+41728  656
+41792  650
+41856  647
+41920  653
+41984  667
+42048  664
+42112  672
+42176  670
+42240  660
+42304  667
+42368  673
+42432  659
+42496  674
+42560  675
+42624  670
+42688  673
+42752  662
+42816  666
+42880  670
+42944  664
+43008  673
+43072  675
+43136  680
+43200  680
+43264  672
+43328  671
+43392  678
+43456  680
+43520  689
+43584  683
+43648  697
+43712  699
+43776  685
+43840  675
+43904  680
+43968  685
+44032  681
+44096  683
+44160  688
+44224  681
+44288  702
+44352  705
+44416  685
+44480  689
+44544  694
+44608  692
+44672  688
+44736  688
+44800  694
+44864  708
+44928  702
+44992  700
+45056  707
+45120  704
+45184  707
+45248  707
+45312  702
+45376  707
+45440  709
+45504  710
+45568  710
+45632  710
+45696  714
+45760  710
+45824  701
+45888  709
+45952  712
+46016  706
+46080  714
+46144  712
+46208  711
+46272  716
+46336  715
+46400  724
+46464  726
+46528  720
+46592  713
+46656  713
+46720  710
+46784  719
+46848  716
+46912  715
+46976  725
+47040  725
+47104  715
+47168  725
+47232  718
+47296  719
+47360  725
+47424  728
+47488  715
+47552  721
+47616  718
+47680  712
+47744  735
+47808  727
+47872  737
+47936  742
+48000  736
+48064  738
+48128  740
+48192  728
+48256  732
+48320  729
+48384  743
+48448  736
+48512  733
+48576  739
+48640  741
+48704  742
+48768  741
+48832  742
+48896  735
+48960  735
+49024  740
+49088  738
+49152  737
+49216  747
+49280  739
+49344  740
+49408  744
+49472  749
+49536  756
+49600  744
+49664  733
+49728  748
+49792  744
+49856  743
+49920  752
+49984  748
+50048  750
+50112  741
+50176  752
+50240  745
+50304  751
+50368  741
+50432  748
+50496  742
+50560  751
+50624  751
+50688  747
+50752  764
+50816  749
+50880  759
+50944  752
+51008  757
+51072  760
+51136  759
+51200  755
+51264  759
+51328  748
+51392  758
+51456  760
+51520  747
+51584  755
+51648  761
+51712  764
+51776  763
+51840  761
+51904  782
+51968  766
+52032  764
+52096  761
+52160  759
+52224  772
+52288  773
+52352  764
+52416  768
+52480  779
+52544  770
+52608  757
+52672  779
+52736  773
+52800  769
+52864  778
+52928  773
+52992  786
+53056  778
+53120  772
+53184  771
+53248  771
+53312  771
+53376  772
+53440  776
+53504  800
+53568  792
+53632  791
+53696  783
+53760  801
+53824  798
+53888  795
+53952  786
+54016  796
+54080  783
+54144  792
+54208  788
+54272  802
+54336  787
+54400  782
+54464  779
+54528  794
+54592  794
+54656  785
+54720  789
+54784  791
+54848  808
+54912  798
+54976  799
+55040  805
+55104  791
+55168  803
+55232  812
+55296  805
+55360  812
+55424  814
+55488  802
+55552  810
+55616  798
+55680  806
+55744  807
+55808  803
+55872  811
+55936  814
+56000  807
+56064  799
+56128  804
+56192  816
+56256  805
+56320  805
+56384  820
+56448  821
+56512  823
+56576  808
+56640  810
+56704  809
+56768  826
+56832  831
+56896  812
+56960  823
+57024  825
+57088  820
+57152  812
+57216  822
+57280  809
+57344  832
+57408  811
+57472  824
+57536  810
+57600  821
+57664  821
+57728  817
+57792  819
+57856  835
+57920  833
+57984  838
+58048  823
+58112  826
+58176  830
+58240  844
+58304  828
+58368  828
+58432  821
+58496  825
+58560  839
+58624  850
+58688  829
+58752  838
+58816  826
+58880  838
+58944  835
+59008  828
+59072  830
+59136  838
+59200  847
+59264  829
+59328  851
+59392  847
+59456  837
+59520  838
+59584  835
+59648  842
+59712  846
+59776  849
+59840  854
+59904  848
+59968  856
+60032  859
+60096  838
+60160  848
+60224  849
+60288  858
+60352  846
+60416  849
+60480  848
+60544  855
+60608  847
+60672  870
+60736  857
+60800  858
+60864  882
+60928  862
+60992  853
+61056  857
+61120  851
+61184  866
+61248  848
+61312  872
+61376  873
+61440  881
+61504  864
+61568  878
+61632  880
+61696  871
+61760  877
+61824  863
+61888  879
+61952  861
+62016  867
+62080  877
+62144  876
+62208  884
+62272  866
+62336  860
+62400  882
+62464  874
+62528  865
+62592  867
+62656  886
+62720  875
+62784  877
+62848  872
+62912  861
+62976  899
+63040  870
+63104  885
+63168  889
+63232  863
+63296  876
+63360  868
+63424  866
+63488  879
+63552  885
+63616  869
+63680  878
+63744  885
+63808  884
+63872  878
+63936  882
+64000  889
+64064  878
+64128  895
+64192  875
+64256  889
+64320  882
+64384  880
+64448  889
+64512  883
+64576  886
+64640  879
+64704  892
+64768  880
+64832  890
+64896  908
+64960  919
+65024  882
+65088  896
+65152  895
+65216  894
+65280  891
+65344  889
+65408  891
+65472  1164
+65536  1148
+65664  1172
+65792  1171
+65920  1164
+66048  1162
+66176  1176
+66304  1169
+66432  1184
+66560  1171
+66688  1198
+66816  1176
+66944  1169
+67072  1185
+67200  1180
+67328  1186
+67456  1170
+67584  1191
+67712  1171
+67840  1170
+67968  1194
+68096  1186
+68224  1175
+68352  1188
+68480  1190
+68608  1181
+68736  1195
+68864  1192
+68992  1198
+69120  1195
+69248  1198
+69376  1189
+69504  1196
+69632  1199
+69760  1201
+69888  1209
+70016  1208
+70144  1217
+70272  1213
+70400  1197
+70528  1209
+70656  1215
+70784  1221
+70912  1215
+71040  1218
+71168  1223
+71296  1213
+71424  1257
+71552  1225
+71680  1228
+71808  1207
+71936  1225
+72064  1239
+72192  1213
+72320  1230
+72448  1229
+72576  1229
+72704  1232
+72832  1260
+72960  1218
+73088  1225
+73216  1227
+73344  1231
+73472  1253
+73600  1238
+73728  1242
+73856  1240
+73984  1236
+74112  1245
+74240  1249
+74368  1242
+74496  1226
+74624  1264
+74752  1237
+74880  1257
+75008  1253
+75136  1257
+75264  1258
+75392  1260
+75520  1272
+75648  1263
+75776  1267
+75904  1258
+76032  1275
+76160  1269
+76288  1281
+76416  1271
+76544  1267
+76672  1277
+76800  1264
+76928  1275
+77056  1267
+77184  1272
+77312  1284
+77440  1275
+77568  1305
+77696  1308
+77824  1303
+77952  1284
+78080  1284
+78208  1280
+78336  1314
+78464  1286
+78592  1291
+78720  1278
+78848  1300
+78976  1280
+79104  1272
+79232  1270
+79360  1300
+79488  1323
+79616  1289
+79744  1310
+79872  1298
+80000  1345
+80128  1333
+80256  1302
+80384  1306
+80512  1334
+80640  1318
+80768  1304
+80896  1303
+81024  1347
+81152  1326
+81280  1303
+81408  1323
+81536  1316
+81664  1315
+81792  1335
+81920  1347
+82048  1316
+82176  1328
+82304  1315
+82432  1342
+82560  1338
+82688  1322
+82816  1320
+82944  1329
+83072  1366
+83200  1323
+83328  1356
+83456  1367
+83584  1338
+83712  1369
+83840  1369
+83968  1341
+84096  1343
+84224  1364
+84352  1345
+84480  1349
+84608  1348
+84736  1335
+84864  1337
+84992  1365
+85120  1355
+85248  1361
+85376  1348
+85504  1345
+85632  1329
+85760  1343
+85888  1365
+86016  1367
+86144  1333
+86272  1357
+86400  1349
+86528  1360
+86656  1393
+86784  1364
+86912  1385
+87040  1401
+87168  1368
+87296  1364
+87424  1378
+87552  1354
+87680  1400
+87808  1368
+87936  1372
+88064  1383
+88192  1399
+88320  1376
+88448  1418
+88576  1388
+88704  1382
+88832  1386
+88960  1408
+89088  1377
+89216  1383
+89344  1376
+89472  1389
+89600  1376
+89728  1417
+89856  1380
+89984  1402
+90112  1394
+90240  1389
+90368  1419
+90496  1393
+90624  1386
+90752  1388
+90880  1402
+91008  1382
+91136  1403
+91264  1379
+91392  1431
+91520  1432
+91648  1435
+91776  1404
+91904  1402
+92032  1434
+92160  1431
+92288  1402
+92416  1401
+92544  1412
+92672  1418
+92800  1423
+92928  1389
+93056  1442
+93184  1425
+93312  1428
+93440  1403
+93568  1430
+93696  1452
+93824  1401
+93952  1414
+94080  1415
+94208  1414
+94336  1421
+94464  1444
+94592  1421
+94720  1462
+94848  1457
+94976  1422
+95104  1423
+95232  1432
+95360  1416
+95488  1447
+95616  1442
+95744  1446
+95872  1444
+96000  1443
+96128  1426
+96256  1437
+96384  1442
+96512  1423
+96640  1457
+96768  1464
+96896  1454
+97024  1439
+97152  1464
+97280  1447
+97408  1437
+97536  1417
+97664  1430
+97792  1475
+97920  1446
+98048  1450
+98176  1445
+98304  1421
+98432  1445
+98560  1443
+98688  1441
+98816  1482
+98944  1447
+99072  1466
+99200  1449
+99328  1455
+99456  1467
+99584  1489
+99712  1461
+99840  1452
+99968  1466
+100096 1465
+100224 1458
+100352 1451
+100480 1510
+100608 1448
+100736 1468
+100864 1489
+100992 1480
+101120 1445
+101248 1487
+101376 1476
+101504 1475
+101632 1466
+101760 1455
+101888 1505
+102016 1465
+102144 1462
+102272 1488
+102400 1483
+102528 1514
+102656 1489
+102784 1491
+102912 1478
+103040 1474
+103168 1498
+103296 1497
+103424 1526
+103552 1521
+103680 1461
+103808 1532
+103936 1493
+104064 1469
+104192 1481
+104320 1482
+104448 1522
+104576 1515
+104704 1537
+104832 1504
+104960 1537
+105088 1500
+105216 1478
+105344 1514
+105472 1472
+105600 1483
+105728 1555
+105856 1481
+105984 1504
+106112 1537
+106240 1502
+106368 1530
+106496 1518
+106624 1506
+106752 1517
+106880 1543
+107008 1550
+107136 1506
+107264 1525
+107392 1548
+107520 1564
+107648 1549
+107776 1514
+107904 1526
+108032 1522
+108160 1557
+108288 1532
+108416 1531
+108544 1538
+108672 1544
+108800 1568
+108928 1550
+109056 1540
+109184 1527
+109312 1541
+109440 1519
+109568 1579
+109696 1532
+109824 1598
+109952 1547
+110080 1573
+110208 1545
+110336 1566
+110464 1553
+110592 1547
+110720 1566
+110848 1582
+110976 1568
+111104 1557
+111232 1559
+111360 1590
+111488 1561
+111616 1547
+111744 1574
+111872 1572
+112000 1542
+112128 1611
+112256 1554
+112384 1579
+112512 1581
+112640 1563
+112768 1592
+112896 1593
+113024 1553
+113152 1592
+113280 1590
+113408 1569
+113536 1596
+113664 1606
+113792 1594
+113920 1642
+114048 1570
+114176 1642
+114304 1648
+114432 1570
+114560 1630
+114688 1649
+114816 1581
+114944 1628
+115072 1573
+115200 1628
+115328 1631
+115456 1576
+115584 1635
+115712 1624
+115840 1592
+115968 1634
+116096 1614
+116224 1661
+116352 1609
+116480 1662
+116608 1577
+116736 1662
+116864 1647
+116992 1617
+117120 1627
+117248 1657
+117376 1631
+117504 1598
+117632 1681
+117760 1643
+117888 1634
+118016 1618
+118144 1639
+118272 1651
+118400 1605
+118528 1591
+118656 1655
+118784 1631
+118912 1622
+119040 1624
+119168 1629
+119296 1598
+119424 1665
+119552 1676
+119680 1620
+119808 1616
+119936 1624
+120064 1669
+120192 1673
+120320 1638
+120448 1627
+120576 1611
+120704 1700
+120832 1653
+120960 1715
+121088 1661
+121216 1659
+121344 1640
+121472 1666
+121600 1662
+121728 1680
+121856 1679
+121984 1707
+122112 1640
+122240 1626
+122368 1684
+122496 1666
+122624 1652
+122752 1633
+122880 1674
+123008 1676
+123136 1665
+123264 1687
+123392 1664
+123520 1659
+123648 1643
+123776 1672
+123904 1694
+124032 1641
+124160 1752
+124288 1648
+124416 1658
+124544 1720
+124672 1711
+124800 1723
+124928 1662
+125056 1647
+125184 1772
+125312 1671
+125440 1647
+125568 1719
+125696 1636
+125824 1694
+125952 1648
+126080 1750
+126208 1713
+126336 1771
+126464 1748
+126592 1655
+126720 1720
+126848 1720
+126976 1675
+127104 1662
+127232 1722
+127360 1675
+127488 1667
+127616 1671
+127744 1668
+127872 1659
+128000 1701
+128128 1667
+128256 1731
+128384 1671
+128512 1670
+128640 1675
+128768 1688
+128896 1690
+129024 1714
+129152 1761
+129280 1761
+129408 1684
+129536 1685
+129664 1774
+129792 1751
+129920 1679
+130048 1678
+130176 1712
+130304 1688
+130432 1810
+130560 1756
+130688 1684
+130816 1686
+130944 1688
+131072 1680
+131328 1750
+131584 1683
+131840 1697
+132096 1687
+132352 1694
+132608 1683
+132864 1683
+133120 1760
+133376 1718
+133632 1687
+133888 1707
+134144 1754
+134400 1761
+134656 1705
+134912 1695
+135168 1758
+135424 1697
+135680 1761
+135936 1754
+136192 1730
+136448 1725
+136704 1838
+136960 1743
+137216 1741
+137472 1739
+137728 1798
+137984 1737
+138240 1846
+138496 1744
+138752 1761
+139008 1755
+139264 1837
+139520 1776
+139776 1749
+140032 1832
+140288 1777
+140544 1792
+140800 1839
+141056 1777
+141312 1830
+141568 1787
+141824 1793
+142080 1798
+142336 1779
+142592 1806
+142848 1856
+143104 1804
+143360 1793
+143616 1798
+143872 1810
+144128 1805
+144384 1820
+144640 1808
+144896 1823
+145152 1812
+145408 1810
+145664 1840
+145920 1829
+146176 1826
+146432 1931
+146688 1889
+146944 1892
+147200 1816
+147456 1832
+147712 1873
+147968 1831
+148224 1836
+148480 1856
+148736 1846
+148992 1851
+149248 1902
+149504 1842
+149760 1846
+150016 1849
+150272 1867
+150528 1909
+150784 1846
+151040 1852
+151296 1859
+151552 1891
+151808 1845
+152064 1895
+152320 1857
+152576 1846
+152832 1929
+153088 1850
+153344 1859
+153600 1923
+153856 1868
+154112 1930
+154368 1867
+154624 1873
+154880 1921
+155136 1881
+155392 1879
+155648 1932
+155904 1874
+156160 1867
+156416 1984
+156672 1882
+156928 1872
+157184 1876
+157440 1948
+157696 1893
+157952 1886
+158208 1892
+158464 1890
+158720 1955
+158976 1893
+159232 1901
+159488 1881
+159744 1971
+160000 1891
+160256 1972
+160512 1904
+160768 1982
+161024 1934
+161280 1924
+161536 1925
+161792 1978
+162048 1915
+162304 1944
+162560 1937
+162816 1933
+163072 1929
+163328 2001
+163584 1934
+163840 1947
+164096 1949
+164352 1947
+164608 2008
+164864 1944
+165120 1964
+165376 1960
+165632 1947
+165888 1953
+166144 1971
+166400 2006
+166656 1964
+166912 1970
+167168 1968
+167424 1963
+167680 2001
+167936 1972
+168192 1989
+168448 1980
+168704 1980
+168960 2002
+169216 2061
+169472 1998
+169728 1991
+169984 2017
+170240 2036
+170496 2083
+170752 2016
+171008 2007
+171264 2009
+171520 2023
+171776 2027
+172032 2024
+172288 2022
+172544 2052
+172800 2031
+173056 2039
+173312 2042
+173568 2101
+173824 2042
+174080 2039
+174336 2045
+174592 2048
+174848 2049
+175104 2065
+175360 2056
+175616 2068
+175872 2073
+176128 2062
+176384 2073
+176640 2072
+176896 2061
+177152 2059
+177408 2093
+177664 2085
+177920 2085
+178176 2149
+178432 2084
+178688 2068
+178944 2124
+179200 2074
+179456 2088
+179712 2140
+179968 2088
+180224 2138
+180480 2088
+180736 2094
+180992 2069
+181248 2065
+181504 2084
+181760 2080
+182016 2058
+182272 2078
+182528 2069
+182784 2067
+183040 2084
+183296 2082
+183552 2079
+183808 2075
+184064 2081
+184320 2076
+184576 2092
+184832 2085
+185088 2163
+185344 2083
+185600 2092
+185856 2094
+186112 2091
+186368 2105
+186624 2080
+186880 2115
+187136 2093
+187392 2084
+187648 2170
+187904 2106
+188160 2096
+188416 2116
+188672 2117
+188928 2105
+189184 2109
+189440 2122
+189696 2121
+189952 2103
+190208 2107
+190464 2123
+190720 2123
+190976 2115
+191232 2137
+191488 2129
+191744 2136
+192000 2125
+192256 2135
+192512 2130
+192768 2134
+193024 2141
+193280 2135
+193536 2156
+193792 2142
+194048 2148
+194304 2163
+194560 2154
+194816 2156
+195072 2171
+195328 2233
+195584 2186
+195840 2179
+196096 2171
+196352 2190
+196608 2201
+196864 2216
+197120 2219
+197376 2203
+197632 2211
+197888 2198
+198144 2219
+198400 2222
+198656 2239
+198912 2235
+199168 2224
+199424 2234
+199680 2229
+199936 2218
+200192 2236
+200448 2268
+200704 2284
+200960 2240
+201216 2282
+201472 2252
+201728 2269
+201984 2277
+202240 2264
+202496 2277
+202752 2278
+203008 2279
+203264 2262
+203520 2286
+203776 2299
+204032 2283
+204288 2294
+204544 2283
+204800 2278
+205056 2299
+205312 2298
+205568 2317
+205824 2298
+206080 2311
+206336 2286
+206592 2300
+206848 2306
+207104 2301
+207360 2367
+207616 2308
+207872 2312
+208128 2305
+208384 2327
+208640 2307
+208896 2324
+209152 2312
+209408 2315
+209664 2331
+209920 2317
+210176 2409
+210432 2321
+210688 2322
+210944 2319
+211200 2322
+211456 2319
+211712 2336
+211968 2331
+212224 2323
+212480 2322
+212736 2345
+212992 2334
+213248 2335
+213504 2339
+213760 2344
+214016 2324
+214272 2328
+214528 2343
+214784 2326
+215040 2343
+215296 2345
+215552 2333
+215808 2341
+216064 2353
+216320 2341
+216576 2340
+216832 2346
+217088 2354
+217344 2344
+217600 2351
+217856 2344
+218112 2353
+218368 2350
+218624 2347
+218880 2359
+219136 2360
+219392 2361
+219648 2365
+219904 2359
+220160 2366
+220416 2372
+220672 2369
+220928 2359
+221184 2386
+221440 2389
+221696 2379
+221952 2384
+222208 2382
+222464 2396
+222720 2394
+222976 2402
+223232 2403
+223488 2407
+223744 2400
+224000 2409
+224256 2421
+224512 2427
+224768 2430
+225024 2405
+225280 2420
+225536 2435
+225792 2487
+226048 2449
+226304 2457
+226560 2544
+226816 2462
+227072 2440
+227328 2469
+227584 2456
+227840 2456
+228096 2472
+228352 2483
+228608 2478
+228864 2476
+229120 2473
+229376 2484
+229632 2483
+229888 2495
+230144 2496
+230400 2499
+230656 2505
+230912 2513
+231168 2505
+231424 2510
+231680 2516
+231936 2521
+232192 2509
+232448 2522
+232704 2531
+232960 2509
+233216 2525
+233472 2524
+233728 2525
+233984 2528
+234240 2520
+234496 2547
+234752 2534
+235008 2544
+235264 2532
+235520 2545
+235776 2549
+236032 2537
+236288 2554
+236544 2537
+236800 2539
+237056 2546
+237312 2550
+237568 2559
+237824 2560
+238080 2553
+238336 2549
+238592 2557
+238848 2557
+239104 2556
+239360 2569
+239616 2563
+239872 2557
+240128 2565
+240384 2567
+240640 2557
+240896 2562
+241152 2563
+241408 2584
+241664 2563
+241920 2582
+242176 2568
+242432 2554
+242688 2571
+242944 2586
+243200 2553
+243456 2574
+243712 2589
+243968 2581
+244224 2586
+244480 2581
+244736 2585
+244992 2583
+245248 2595
+245504 2575
+245760 2601
+246016 2606
+246272 2569
+246528 2564
+246784 2565
+247040 2567
+247296 2577
+247552 2584
+247808 2585
+248064 2649
+248320 2590
+248576 2574
+248832 2578
+249088 2592
+249344 2600
+249600 2598
+249856 2612
+250112 2599
+250368 2603
+250624 2602
+250880 2601
+251136 2614
+251392 2620
+251648 2619
+251904 2618
+252160 2636
+252416 2624
+252672 2633
+252928 2619
+253184 2631
+253440 2633
+253696 2647
+253952 2662
+254208 2662
+254464 2668
+254720 2668
+254976 2659
+255232 2681
+255488 2678
+255744 2684
+256000 2691
+256256 2712
+256512 2702
+256768 2693
+257024 2693
+257280 2712
+257536 2709
+257792 2712
+258048 2709
+258304 2723
+258560 2720
+258816 2717
+259072 2734
+259328 2728
+259584 2728
+259840 2739
+260096 2742
+260352 2739
+260608 2747
+260864 2751
+261120 2746
+261376 2742
+261632 2740
+261888 2757
+262144 2754
+262656 2768
+263168 2764
+263680 2773
+264192 2765
+264704 2773
+265216 2779
+265728 2788
+266240 2778
+266752 2788
+267264 2796
+267776 2791
+268288 2800
+268800 2814
+269312 2805
+269824 2808
+270336 2821
+270848 2805
+271360 2813
+271872 2812
+272384 2808
+272896 2816
+273408 2819
+273920 2832
+274432 2842
+274944 2829
+275456 2844
+275968 2850
+276480 2858
+276992 2857
+277504 2862
+278016 2871
+278528 2873
+279040 2883
+279552 2892
+280064 2891
+280576 2890
+281088 2914
+281600 2965
+282112 2929
+282624 2910
+283136 2912
+283648 2924
+284160 2927
+284672 2935
+285184 2945
+285696 2957
+286208 2965
+286720 2966
+287232 2983
+287744 2989
+288256 2979
+288768 2982
+289280 2976
+289792 2991
+290304 3011
+290816 3017
+291328 3018
+291840 3029
+292352 3027
+292864 3014
+293376 3018
+293888 3033
+294400 3025
+294912 3022
+295424 3028
+295936 3064
+296448 3033
+296960 3035
+297472 3037
+297984 3039
+298496 3058
+299008 3037
+299520 3064
+300032 3094
+300544 3065
+301056 3070
+301568 3076
+302080 3060
+302592 3076
+303104 3077
+303616 3076
+304128 3091
+304640 3085
+305152 3092
+305664 3100
+306176 3090
+306688 3113
+307200 3119
+307712 3110
+308224 3133
+308736 3118
+309248 3121
+309760 3152
+310272 3140
+310784 3135
+311296 3140
+311808 3143
+312320 3150
+312832 3149
+313344 3136
+313856 3154
+314368 3166
+314880 3177
+315392 3180
+315904 3192
+316416 3190
+316928 3205
+317440 3212
+317952 3219
+318464 3221
+318976 3217
+319488 3229
+320000 3235
+320512 3239
+321024 3251
+321536 3236
+322048 3239
+322560 3360
+323072 3269
+323584 3252
+324096 3257
+324608 3337
+325120 3280
+325632 3277
+326144 3274
+326656 3310
+327168 3289
+327680 3294
+328192 3299
+328704 3293
+329216 3396
+329728 3299
+330240 3317
+330752 3360
+331264 3320
+331776 3333
+332288 3335
+332800 3327
+333312 3328
+333824 3352
+334336 3353
+334848 3388
+335360 3361
+335872 3354
+336384 3357
+336896 3373
+337408 3423
+337920 3391
+338432 3407
+338944 3409
+339456 3413
+339968 3407
+340480 3402
+340992 3515
+341504 3404
+342016 3425
+342528 3444
+343040 3437
+343552 3435
+344064 3463
+344576 3446
+345088 3481
+345600 3560
+346112 3488
+346624 3484
+347136 3468
+347648 3502
+348160 3485
+348672 3475
+349184 3503
+349696 3498
+350208 3557
+350720 3493
+351232 3511
+351744 3549
+352256 3519
+352768 3499
+353280 3527
+353792 3523
+354304 3568
+354816 3526
+355328 3574
+355840 3648
+356352 3556
+356864 3571
+357376 3614
+357888 3582
+358400 3574
+358912 3543
+359424 3562
+359936 3603
+360448 3595
+360960 3577
+361472 3565
+361984 3600
+362496 3570
+363008 3601
+363520 3590
+364032 3589
+364544 3613
+365056 3668
+365568 3611
+366080 3619
+366592 3626
+367104 3641
+367616 3620
+368128 3654
+368640 3672
+369152 3652
+369664 3675
+370176 3691
+370688 3719
+371200 3671
+371712 3747
+372224 3697
+372736 3679
+373248 3692
+373760 3735
+374272 3750
+374784 3714
+375296 3787
+375808 3711
+376320 3714
+376832 3735
+377344 3746
+377856 3739
+378368 3719
+378880 3741
+379392 3779
+379904 3809
+380416 3768
+380928 3811
+381440 3777
+381952 3763
+382464 3835
+382976 3780
+383488 3780
+384000 3873
+384512 3785
+385024 3785
+385536 3823
+386048 3784
+386560 3796
+387072 3823
+387584 3827
+388096 3824
+388608 3900
+389120 3822
+389632 3886
+390144 3880
+390656 3830
+391168 3928
+391680 3857
+392192 3854
+392704 3943
+393216 3897
+393728 3867
+394240 3850
+394752 3912
+395264 3969
+395776 3880
+396288 3877
+396800 3866
+397312 3889
+397824 3903
+398336 3922
+398848 3935
+399360 3917
+399872 3919
+400384 3941
+400896 3938
+401408 3935
+401920 3936
+402432 3991
+402944 3929
+403456 4009
+403968 4012
+404480 3963
+404992 4051
+405504 3991
+406016 4029
+406528 3987
+407040 4075
+407552 4063
+408064 4041
+408576 4026
+409088 4079
+409600 4005
+410112 4002
+410624 4025
+411136 4006
+411648 4062
+412160 4019
+412672 4037
+413184 4008
+413696 4042
+414208 4047
+414720 4051
+415232 4110
+415744 4088
+416256 4094
+416768 4112
+417280 4155
+417792 4156
+418304 4077
+418816 4140
+419328 4063
+419840 4093
+420352 4114
+420864 4140
+421376 4148
+421888 4116
+422400 4094
+422912 4117
+423424 4087
+423936 4115
+424448 4141
+424960 4122
+425472 4143
+425984 4161
+426496 4141
+427008 4250
+427520 4203
+428032 4191
+428544 4153
+429056 4179
+429568 4264
+430080 4168
+430592 4189
+431104 4217
+431616 4217
+432128 4258
+432640 4193
+433152 4228
+433664 4224
+434176 4210
+434688 4296
+435200 4226
+435712 4293
+436224 4235
+436736 4390
+437248 4369
+437760 4275
+438272 4279
+438784 4281
+439296 4308
+439808 4285
+440320 4272
+440832 4353
+441344 4329
+441856 4307
+442368 4276
+442880 4308
+443392 4289
+443904 4293
+444416 4303
+444928 4300
+445440 4366
+445952 4312
+446464 4399
+446976 4304
+447488 4405
+448000 4355
+448512 4330
+449024 4332
+449536 4408
+450048 4334
+450560 4415
+451072 4360
+451584 4363
+452096 4401
+452608 4342
+453120 4359
+453632 4506
+454144 4385
+454656 4446
+455168 4374
+455680 4451
+456192 4468
+456704 4416
+457216 4400
+457728 4403
+458240 4403
+458752 4402
+459264 4411
+459776 4409
+460288 4428
+460800 4416
+461312 4492
+461824 4432
+462336 4461
+462848 4459
+463360 4451
+463872 4480
+464384 4481
+464896 4559
+465408 4569
+465920 4469
+466432 4498
+466944 4485
+467456 4502
+467968 4481
+468480 4564
+468992 4498
+469504 4530
+470016 4531
+470528 4511
+471040 4582
+471552 4508
+472064 4563
+472576 4537
+473088 4533
+473600 4611
+474112 4530
+474624 4578
+475136 4581
+475648 4554
+476160 4548
+476672 4547
+477184 4643
+477696 4598
+478208 4571
+478720 4626
+479232 4668
+479744 4572
+480256 4610
+480768 4598
+481280 4612
+481792 4676
+482304 4614
+482816 4693
+483328 4697
+483840 4626
+484352 4620
+484864 4645
+485376 4699
+485888 4663
+486400 4653
+486912 4640
+487424 4795
+487936 4687
+488448 4703
+488960 4710
+489472 4698
+489984 4790
+490496 4708
+491008 4748
+491520 4683
+492032 4771
+492544 4782
+493056 4799
+493568 4753
+494080 4741
+494592 4709
+495104 4726
+495616 4713
+496128 4735
+496640 4781
+497152 4788
+497664 4770
+498176 4763
+498688 4799
+499200 4764
+499712 4814
+500224 4824
+500736 4765
+501248 4835
+501760 4787
+502272 4862
+502784 4894
+503296 4855
+503808 4813
+504320 4826
+504832 4817
+505344 4810
+505856 4800
+506368 4888
+506880 4806
+507392 4814
+507904 4875
+508416 4842
+508928 4895
+509440 4876
+509952 4828
+510464 4911
+510976 4908
+511488 4908
+512000 4888
+512512 4881
+513024 4862
+513536 4889
+514048 4925
+514560 4880
+515072 4927
+515584 4874
+516096 4891
+516608 4950
+517120 4975
+517632 4906
+518144 4968
+518656 4944
+519168 4946
+519680 4925
+520192 4917
+520704 4964
+521216 5071
+521728 5075
+522240 5015
+522752 5026
+523264 5012
+523776 4997
+524288 4981
+525312 5057
+526336 4977
+527360 4990
+528384 5117
+529408 5119
+530432 5079
+531456 5086
+532480 5128
+533504 5029
+534528 5157
+535552 5060
+536576 5054
+537600 5049
+538624 5079
+539648 5093
+540672 5132
+541696 5146
+542720 5117
+543744 5128
+544768 5169
+545792 5181
+546816 5171
+547840 5296
+548864 5163
+549888 5211
+550912 5240
+551936 5208
+552960 5407
+553984 5274
+555008 5300
+556032 5382
+557056 5325
+558080 5242
+559104 5310
+560128 5295
+561152 5369
+562176 5294
+563200 5313
+564224 5315
+565248 5310
+566272 5326
+567296 5377
+568320 5376
+569344 5452
+570368 5340
+571392 5413
+572416 5478
+573440 5441
+574464 5477
+575488 5435
+576512 5469
+577536 5476
+578560 5496
+579584 5498
+580608 5531
+581632 5451
+582656 5485
+583680 5559
+584704 5487
+585728 5536
+586752 5572
+587776 5557
+588800 5512
+589824 5559
+590848 5581
+591872 5534
+592896 5714
+593920 5768
+594944 6079
+595968 5834
+596992 5649
+598016 5585
+599040 5638
+600064 5668
+601088 5621
+602112 5645
+603136 5698
+604160 5646
+605184 5676
+606208 5697
+607232 5683
+608256 5774
+609280 5773
+610304 5828
+611328 5792
+612352 5868
+613376 5794
+614400 5781
+615424 5808
+616448 5811
+617472 5814
+618496 5799
+619520 5818
+620544 5876
+621568 5862
+622592 5788
+623616 5935
+624640 5899
+625664 5921
+626688 5895
+627712 5841
+628736 5864
+629760 6007
+630784 5937
+631808 5892
+632832 5983
+633856 5906
+634880 6000
+635904 6005
+636928 5995
+637952 6018
+638976 6042
+640000 5948
+641024 6030
+642048 6051
+643072 6053
+644096 5970
+645120 5991
+646144 6129
+647168 6057
+648192 6173
+649216 6088
+650240 6092
+651264 6037
+652288 6026
+653312 6208
+654336 6090
+655360 6174
+656384 6140
+657408 6124
+658432 6106
+659456 6114
+660480 6114
+661504 6183
+662528 6204
+663552 6257
+664576 6276
+665600 6139
+666624 6243
+667648 6217
+668672 6315
+669696 6280
+670720 6201
+671744 6294
+672768 6294
+673792 6382
+674816 6267
+675840 6303
+676864 6245
+677888 6285
+678912 6279
+679936 6318
+680960 6370
+681984 6371
+683008 6305
+684032 6325
+685056 6300
+686080 6379
+687104 6402
+688128 6456
+689152 6421
+690176 6408
+691200 6367
+692224 6454
+693248 6386
+694272 6385
+695296 6512
+696320 6477
+697344 6444
+698368 6524
+699392 6545
+700416 6665
+701440 6561
+702464 6567
+703488 6595
+704512 6569
+705536 6568
+706560 6595
+707584 6516
+708608 6614
+709632 6599
+710656 6627
+711680 6660
+712704 6642
+713728 6581
+714752 6688
+715776 6675
+716800 6677
+717824 6733
+718848 6614
+719872 6796
+720896 6697
+721920 6747
+722944 6775
+723968 6838
+724992 6770
+726016 6775
+727040 6720
+728064 6789
+729088 6869
+730112 6782
+731136 6785
+732160 6826
+733184 6775
+734208 6846
+735232 6829
+736256 6852
+737280 6949
+738304 6820
+739328 6786
+740352 6881
+741376 6906
+742400 6802
+743424 6864
+744448 6816
+745472 6859
+746496 6902
+747520 6839
+748544 6924
+749568 6969
+750592 6960
+751616 6970
+752640 6953
+753664 6898
+754688 6902
+755712 6930
+756736 6926
+757760 6981
+758784 7012
+759808 7089
+760832 7108
+761856 7017
+762880 7071
+763904 7065
+764928 7063
+765952 7143
+766976 7113
+768000 7131
+769024 7114
+770048 7053
+771072 7097
+772096 7143
+773120 7092
+774144 7088
+775168 7117
+776192 7140
+777216 7117
+778240 7222
+779264 7209
+780288 7221
+781312 7172
+782336 7336
+783360 7239
+784384 7265
+785408 7261
+786432 7332
+787456 7277
+788480 7211
+789504 7350
+790528 7319
+791552 7237
+792576 7289
+793600 7266
+794624 7342
+795648 7337
+796672 7348
+797696 7447
+798720 7367
+799744 7319
+800768 7321
+801792 7342
+802816 7339
+803840 7417
+804864 7346
+805888 7434
+806912 7385
+807936 7500
+808960 7389
+809984 7477
+811008 7484
+812032 7503
+813056 7499
+814080 7433
+815104 7577
+816128 7538
+817152 7549
+818176 7579
+819200 7535
+820224 7580
+821248 7500
+822272 7557
+823296 7610
+824320 7569
+825344 7538
+826368 7549
+827392 7558
+828416 7546
+829440 7674
+830464 7653
+831488 7633
+832512 7665
+833536 7651
+834560 7641
+835584 7695
+836608 7675
+837632 7622
+838656 7692
+839680 7721
+840704 7734
+841728 7702
+842752 7650
+843776 7683
+844800 7724
+845824 7853
+846848 7689
+847872 7718
+848896 7773
+849920 7781
+850944 7791
+851968 7822
+852992 7868
+854016 7833
+855040 7753
+856064 7791
+857088 7875
+858112 7811
+859136 7776
+860160 7855
+861184 7798
+862208 7918
+863232 7846
+864256 7928
+865280 8029
+866304 7870
+867328 7996
+868352 7878
+869376 7874
+870400 7981
+871424 7975
+872448 7918
+873472 7997
+874496 7942
+875520 7953
+876544 8077
+877568 7981
+878592 8030
+879616 8048
+880640 8078
+881664 8105
+882688 8133
+883712 8025
+884736 8176
+885760 8036
+886784 8111
+887808 8136
+888832 8104
+889856 8210
+890880 8178
+891904 8107
+892928 8249
+893952 8192
+894976 8209
+896000 8115
+897024 8127
+898048 8143
+899072 8229
+900096 8259
+901120 8246
+902144 8222
+903168 8329
+904192 8276
+905216 8183
+906240 8307
+907264 8208
+908288 8279
+909312 8220
+910336 8335
+911360 8281
+912384 8250
+913408 8250
+914432 8275
+915456 8267
+916480 8423
+917504 8285
+918528 8282
+919552 8325
+920576 8340
+921600 8411
+922624 8467
+923648 8423
+924672 8379
+925696 8403
+926720 8454
+927744 8369
+928768 8379
+929792 8543
+930816 8396
+931840 8455
+932864 8409
+933888 8503
+934912 8435
+935936 8543
+936960 8455
+937984 8480
+939008 8469
+940032 8594
+941056 8493
+942080 8689
+943104 8512
+944128 8509
+945152 8524
+946176 8553
+947200 8541
+948224 8542
+949248 8554
+950272 8561
+951296 8584
+952320 8583
+953344 8593
+954368 8600
+955392 8622
+956416 8616
+957440 8721
+958464 8649
+959488 8637
+960512 8654
+961536 8669
+962560 8688
+963584 8690
+964608 8715
+965632 8813
+966656 8763
+967680 8829
+968704 8801
+969728 8754
+970752 8778
+971776 8802
+972800 8769
+973824 8792
+974848 8802
+975872 8808
+976896 8909
+977920 8848
+978944 8841
+979968 8953
+980992 8902
+982016 8865
+983040 8878
+984064 8885
+985088 8888
+986112 8897
+987136 8914
+988160 8960
+989184 8922
+990208 8937
+991232 8943
+992256 8986
+993280 8982
+994304 8984
+995328 8976
+996352 8976
+997376 8995
+998400 9005
+999424 9006
+1000448        9021
+1001472        9019
+1002496        9055
+1003520        9059
+1004544        9062
+1005568        9069
+1006592        9127
+1007616        9073
+1008640        9146
+1009664        9084
+1010688        9097
+1011712        9098
+1012736        9101
+1013760        9124
+1014784        9123
+1015808        9129
+1016832        9135
+1017856        9238
+1018880        9204
+1019904        9173
+1020928        9219
+1021952        9192
+1022976        9204
+1024000        9262
+1025024        9220
+1026048        9257
+1027072        9271
+1028096        9332
+1029120        9270
+1030144        9269
+1031168        9380
+1032192        9341
+1033216        9294
+1034240        9334
+1035264        9385
+1036288        9343
+1037312        9363
+1038336        9411
+1039360        9336
+1040384        9363
+1041408        9413
+1042432        9377
+1043456        9356
+1044480        9417
+1045504        9414
+1046528        9392
+1047552        9444
+1048576        9497
+1050624        9501
+1052672        9456
+1054720        9487
+1056768        9553
+1058816        9524
+1060864        9609
+1062912        9643
+1064960        9658
+1067008        9673
+1069056        9597
+1071104        9651
+1073152        9649
+1075200        9663
+1077248        9750
+1079296        9728
+1081344        9819
+1083392        9813
+1085440        9830
+1087488        9823
+1089536        9792
+1091584        9881
+1093632        9793
+1095680        9875
+1097728        9830
+1099776        9927
+1101824        9920
+1103872        9975
+1105920        9888
+1107968        10016
+1110016        9945
+1112064        10008
+1114112        10061
+1116160        9981
+1118208        9999
+1120256        10028
+1122304        10055
+1124352        10140
+1126400        10070
+1128448        10092
+1130496        10116
+1132544        10129
+1134592        10139
+1136640        10168
+1138688        10275
+1140736        10201
+1142784        10311
+1144832        10249
+1146880        10268
+1148928        10295
+1150976        10381
+1153024        10326
+1155072        10332
+1157120        10360
+1159168        10447
+1161216        10375
+1163264        10403
+1165312        10424
+1167360        10434
+1169408        10450
+1171456        10460
+1173504        10574
+1175552        10490
+1177600        10500
+1179648        10529
+1181696        10547
+1183744        10553
+1185792        10580
+1187840        10586
+1189888        10597
+1191936        10625
+1193984        10632
+1196032        10649
+1198080        10679
+1200128        10697
+1202176        10715
+1204224        10735
+1206272        10754
+1208320        10758
+1210368        10769
+1212416        10803
+1214464        10819
+1216512        10828
+1218560        10836
+1220608        10878
+1222656        10879
+1224704        10907
+1226752        10934
+1228800        10964
+1230848        10980
+1232896        10996
+1234944        11025
+1236992        11036
+1239040        11055
+1241088        11072
+1243136        11081
+1245184        11101
+1247232        11131
+1249280        11143
+1251328        11172
+1253376        11183
+1255424        11189
+1257472        11210
+1259520        11217
+1261568        11233
+1263616        11241
+1265664        11292
+1267712        11280
+1269760        11301
+1271808        11311
+1273856        11322
+1275904        11338
+1277952        11385
+1280000        11387
+1282048        11402
+1284096        11419
+1286144        11418
+1288192        11462
+1290240        11477
+1292288        11509
+1294336        11528
+1296384        11550
+1298432        11669
+1300480        11565
+1302528        11574
+1304576        11586
+1306624        11613
+1308672        11646
+1310720        11652
+1312768        11676
+1314816        11700
+1316864        11786
+1318912        11739
+1320960        11742
+1323008        11771
+1325056        11782
+1327104        11805
+1329152        11825
+1331200        11829
+1333248        11876
+1335296        11876
+1337344        11884
+1339392        11938
+1341440        11934
+1343488        11938
+1345536        11950
+1347584        11981
+1349632        12002
+1351680        12012
+1353728        12026
+1355776        12047
+1357824        12068
+1359872        12069
+1361920        12118
+1363968        12116
+1366016        12161
+1368064        12142
+1370112        12159
+1372160        12174
+1374208        12316
+1376256        12230
+1378304        12312
+1380352        12329
+1382400        12262
+1384448        12307
+1386496        12339
+1388544        12315
+1390592        12373
+1392640        12442
+1394688        12346
+1396736        12440
+1398784        12459
+1400832        12451
+1402880        12531
+1404928        12461
+1406976        12465
+1409024        12560
+1411072        12530
+1413120        12542
+1415168        12550
+1417216        12672
+1419264        12634
+1421312        12655
+1423360        12715
+1425408        12736
+1427456        12758
+1429504        12673
+1431552        12773
+1433600        12760
+1435648        12732
+1437696        12825
+1439744        12785
+1441792        12770
+1443840        12791
+1445888        12843
+1447936        12823
+1449984        12892
+1452032        12889
+1454080        12953
+1456128        12936
+1458176        13531
+1460224        12912
+1462272        13011
+1464320        13012
+1466368        13054
+1468416        12992
+1470464        13056
+1472512        13066
+1474560        13048
+1476608        13143
+1478656        13058
+1480704        13082
+1482752        13101
+1484800        13159
+1486848        13138
+1488896        13221
+1490944        13176
+1492992        13208
+1495040        13225
+1497088        13252
+1499136        13360
+1501184        13284
+1503232        13307
+1505280        13385
+1507328        13451
+1509376        13352
+1511424        13388
+1513472        13385
+1515520        13415
+1517568        13540
+1519616        13448
+1521664        13447
+1523712        13468
+1525760        13490
+1527808        13606
+1529856        13556
+1531904        13535
+1533952        13558
+1536000        13558
+1538048        13571
+1540096        13613
+1542144        13605
+1544192        13637
+1546240        13646
+1548288        13654
+1550336        13684
+1552384        13701
+1554432        13724
+1556480        13745
+1558528        13760
+1560576        13773
+1562624        13801
+1564672        13810
+1566720        13815
+1568768        13842
+1570816        13885
+1572864        13901
+1574912        13895
+1576960        13993
+1579008        13931
+1581056        13970
+1583104        13990
+1585152        14002
+1587200        14023
+1589248        14035
+1591296        14150
+1593344        14110
+1595392        14132
+1597440        14193
+1599488        14220
+1601536        14155
+1603584        14199
+1605632        14175
+1607680        14229
+1609728        14211
+1611776        14222
+1613824        14240
+1615872        14263
+1617920        14284
+1619968        14294
+1622016        14293
+1624064        14306
+1626112        14352
+1628160        14337
+1630208        14362
+1632256        14382
+1634304        14384
+1636352        14425
+1638400        14420
+1640448        14460
+1642496        14470
+1644544        14552
+1646592        14498
+1648640        14522
+1650688        14532
+1652736        14572
+1654784        14577
+1656832        14589
+1658880        14649
+1660928        14632
+1662976        14757
+1665024        14763
+1667072        14737
+1669120        14715
+1671168        14849
+1673216        14759
+1675264        14791
+1677312        14812
+1679360        14803
+1681408        14885
+1683456        14837
+1685504        14980
+1687552        14958
+1689600        14905
+1691648        14958
+1693696        14962
+1695744        14953
+1697792        14961
+1699840        14968
+1701888        14990
+1703936        15125
+1705984        15062
+1708032        15060
+1710080        15039
+1712128        15120
+1714176        15193
+1716224        15234
+1718272        15166
+1720320        15179
+1722368        15274
+1724416        15216
+1726464        15241
+1728512        15303
+1730560        15287
+1732608        15372
+1734656        15310
+1736704        15284
+1738752        15364
+1740800        15357
+1742848        15337
+1744896        15420
+1746944        15460
+1748992        15521
+1751040        15518
+1753088        15560
+1755136        15452
+1757184        15456
+1759232        15567
+1761280        15497
+1763328        15607
+1765376        15619
+1767424        15680
+1769472        15642
+1771520        15590
+1773568        15675
+1775616        15716
+1777664        15761
+1779712        15777
+1781760        15795
+1783808        15825
+1785856        15819
+1787904        15798
+1789952        15855
+1792000        15803
+1794048        15862
+1796096        15776
+1798144        15909
+1800192        15871
+1802240        15857
+1804288        15840
+1806336        15848
+1808384        15951
+1810432        15904
+1812480        15920
+1814528        16019
+1816576        15958
+1818624        16075
+1820672        15989
+1822720        16010
+1824768        16032
+1826816        16031
+1828864        16062
+1830912        16063
+1832960        16242
+1835008        16175
+1837056        16134
+1839104        16313
+1841152        16150
+1843200        16191
+1845248        16368
+1847296        16221
+1849344        16359
+1851392        16273
+1853440        16285
+1855488        16299
+1857536        16322
+1859584        16334
+1861632        16360
+1863680        16376
+1865728        16391
+1867776        16398
+1869824        16433
+1871872        16458
+1873920        16466
+1875968        16482
+1878016        16498
+1880064        16498
+1882112        16517
+1884160        16536
+1886208        16535
+1888256        16575
+1890304        16594
+1892352        16592
+1894400        16618
+1896448        16633
+1898496        16662
+1900544        16674
+1902592        16676
+1904640        16703
+1906688        16708
+1908736        16738
+1910784        16750
+1912832        16768
+1914880        16787
+1916928        16813
+1918976        16805
+1921024        16843
+1923072        16855
+1925120        16876
+1927168        16890
+1929216        16903
+1931264        16932
+1933312        16949
+1935360        16960
+1937408        16996
+1939456        17016
+1941504        17042
+1943552        17061
+1945600        17085
+1947648        17102
+1949696        17112
+1951744        17134
+1953792        17138
+1955840        17155
+1957888        17174
+1959936        17192
+1961984        17209
+1964032        17220
+1966080        17245
+1968128        17266
+1970176        17292
+1972224        17297
+1974272        17310
+1976320        17315
+1978368        17323
+1980416        17347
+1982464        17362
+1984512        17400
+1986560        17412
+1988608        17427
+1990656        17423
+1992704        17451
+1994752        17476
+1996800        17527
+1998848        17549
+2000896        17522
+2002944        17537
+2004992        17571
+2007040        17590
+2009088        17596
+2011136        17685
+2013184        17652
+2015232        17652
+2017280        17660
+2019328        17709
+2021376        17750
+2023424        17726
+2025472        17758
+2027520        17792
+2029568        17792
+2031616        17862
+2033664        17881
+2035712        17843
+2037760        17863
+2039808        17909
+2041856        17922
+2043904        17963
+2045952        17982
+2048000        17964
+2050048        17954
+2052096        17982
+2054144        17996
+2056192        18006
+2058240        18085
+2060288        18087
+2062336        18141
+2064384        18061
+2066432        18081
+2068480        18079
+2070528        18220
+2072576        18193
+2074624        18205
+2076672        18184
+2078720        18283
+2080768        18288
+2082816        18224
+2084864        18316
+2086912        18319
+2088960        18280
+2091008        18310
+2093056        18307
+2095104        18429
+2097152        18422
+2101248        18392
+2105344        18478
+2109440        18458
+2113536        18517
+2117632        18554
+2121728        18587
+2125824        18691
+2129920        18648
+2134016        18840
+2138112        18724
+2142208        18819
+2146304        18804
+2150400        18896
+2154496        18904
+2158592        18879
+2162688        18922
+2166784        18939
+2170880        18979
+2174976        19076
+2179072        19136
+2183168        19066
+2187264        19153
+2191360        19264
+2195456        19223
+2199552        19247
+2203648        19274
+2207744        19314
+2211840        19344
+2215936        19378
+2220032        19425
+2224128        19491
+2228224        19469
+2232320        19507
+2236416        19551
+2240512        19577
+2244608        19633
+2248704        19634
+2252800        19685
+2256896        19723
+2260992        19759
+2265088        19774
+2269184        19847
+2273280        19861
+2277376        19957
+2281472        19930
+2285568        20058
+2289664        20033
+2293760        20039
+2297856        20148
+2301952        20202
+2306048        20179
+2310144        20190
+2314240        20211
+2318336        20245
+2322432        20273
+2326528        20376
+2330624        20433
+2334720        20451
+2338816        20401
+2342912        20474
+2347008        20475
+2351104        20582
+2355200        20537
+2359296        20587
+2363392        20661
+2367488        20730
+2371584        20765
+2375680        20863
+2379776        20782
+2383872        20882
+2387968        20994
+2392064        20901
+2396160        20945
+2400256        20947
+2404352        21040
+2408448        21035
+2412544        21101
+2416640        21159
+2420736        21201
+2424832        21165
+2428928        21219
+2433024        21231
+2437120        21346
+2441216        21331
+2445312        21327
+2449408        21368
+2453504        21583
+2457600        21468
+2461696        21622
+2465792        21549
+2469888        21604
+2473984        21664
+2478080        21648
+2482176        21640
+2486272        21707
+2490368        21722
+2494464        21878
+2498560        21841
+2502656        21820
+2506752        21871
+2510848        21908
+2514944        21966
+2519040        21952
+2523136        22027
+2527232        22014
+2531328        22132
+2535424        22083
+2539520        22126
+2543616        22172
+2547712        22224
+2551808        22259
+2555904        22339
+2560000        22404
+2564096        22338
+2568192        22379
+2572288        22466
+2576384        22437
+2580480        22495
+2584576        22515
+2588672        22551
+2592768        22579
+2596864        22599
+2600960        22672
+2605056        22683
+2609152        22728
+2613248        22812
+2617344        22772
+2621440        22804
+2625536        22873
+2629632        22876
+2633728        22931
+2637824        22966
+2641920        22992
+2646016        23031
+2650112        23143
+2654208        23112
+2658304        23156
+2662400        23181
+2666496        23216
+2670592        23310
+2674688        23399
+2678784        23419
+2682880        23432
+2686976        23466
+2691072        23389
+2695168        23469
+2699264        23486
+2703360        23528
+2707456        23561
+2711552        23590
+2715648        23613
+2719744        23650
+2723840        23724
+2727936        23818
+2732032        23785
+2736128        23805
+2740224        23972
+2744320        23883
+2748416        23951
+2752512        23987
+2756608        24052
+2760704        24046
+2764800        24047
+2768896        24153
+2772992        24137
+2777088        24151
+2781184        24275
+2785280        24208
+2789376        24352
+2793472        24297
+2797568        24389
+2801664        24358
+2805760        24408
+2809856        24556
+2813952        24535
+2818048        24554
+2822144        24611
+2826240        24580
+2830336        24644
+2834432        24676
+2838528        24769
+2842624        24787
+2846720        24805
+2850816        24778
+2854912        24832
+2859008        24929
+2863104        24928
+2867200        25037
+2871296        24939
+2875392        25035
+2879488        25115
+2883584        25048
+2887680        25115
+2891776        25177
+2895872        25156
+2899968        25209
+2904064        25303
+2908160        25335
+2912256        25330
+2916352        26120
+2920448        25459
+2924544        25501
+2928640        25514
+2932736        25508
+2936832        25549
+2940928        25557
+2945024        25649
+2949120        25629
+2953216        25699
+2957312        25788
+2961408        25751
+2965504        25778
+2969600        25866
+2973696        25964
+2977792        25853
+2981888        25972
+2985984        25972
+2990080        25980
+2994176        26013
+2998272        26099
+3002368        26099
+3006464        26186
+3010560        26221
+3014656        26279
+3018752        26300
+3022848        26393
+3026944        26365
+3031040        26451
+3035136        26419
+3039232        26484
+3043328        26384
+3047424        26490
+3051520        26576
+3055616        26600
+3059712        26669
+3063808        26633
+3067904        26710
+3072000        26765
+3076096        26766
+3080192        26820
+3084288        26807
+3088384        26846
+3092480        26976
+3096576        26999
+3100672        27065
+3104768        26957
+3108864        27018
+3112960        27099
+3117056        27131
+3121152        27169
+3125248        27101
+3129344        27227
+3133440        27165
+3137536        27273
+3141632        27329
+3145728        27462
+3149824        27395
+3153920        27337
+3158016        27482
+3162112        27401
+3166208        27571
+3170304        27483
+3174400        27526
+3178496        27567
+3182592        27596
+3186688        27635
+3190784        27657
+3194880        27714
+3198976        27744
+3203072        27770
+3207168        27916
+3211264        27832
+3215360        27969
+3219456        27906
+3223552        27921
+3227648        27972
+3231744        28150
+3235840        28032
+3239936        28208
+3244032        28098
+3248128        28147
+3252224        28185
+3256320        28316
+3260416        28263
+3264512        28357
+3268608        28449
+3272704        28361
+3276800        28413
+3280896        28491
+3284992        28494
+3289088        28508
+3293184        28542
+3297280        28579
+3301376        28682
+3305472        28689
+3309568        28765
+3313664        28697
+3317760        28734
+3321856        28764
+3325952        28910
+3330048        28843
+3334144        28895
+3338240        28970
+3342336        28952
+3346432        29095
+3350528        29037
+3354624        29198
+3358720        29146
+3362816        29262
+3366912        29229
+3371008        29210
+3375104        29242
+3379200        29359
+3383296        29338
+3387392        29422
+3391488        29375
+3395584        29482
+3399680        29576
+3403776        29506
+3407872        29556
+3411968        29626
+3416064        29678
+3420160        29837
+3424256        29745
+3428352        29721
+3432448        29813
+3436544        29847
+3440640        29835
+3444736        29929
+3448832        29955
+3452928        29892
+3457024        30063
+3461120        30043
+3465216        30116
+3469312        30032
+3473408        30062
+3477504        30102
+3481600        30326
+3485696        30148
+3489792        30304
+3493888        30230
+3497984        30408
+3502080        30383
+3506176        30338
+3510272        30496
+3514368        30413
+3518464        30453
+3522560        30486
+3526656        30516
+3530752        30564
+3534848        30642
+3538944        30774
+3543040        30658
+3547136        30696
+3551232        30751
+3555328        30835
+3559424        30786
+3563520        30826
+3567616        30851
+3571712        30897
+3575808        30932
+3579904        30957
+3584000        31000
+3588096        31038
+3592192        31062
+3596288        31100
+3600384        31138
+3604480        31168
+3608576        31206
+3612672        31251
+3616768        31287
+3620864        31332
+3624960        31354
+3629056        31400
+3633152        31613
+3637248        31463
+3641344        31511
+3645440        31530
+3649536        31585
+3653632        31754
+3657728        31627
+3661824        31693
+3665920        31767
+3670016        31727
+3674112        31775
+3678208        31807
+3682304        31836
+3686400        31877
+3690496        31906
+3694592        31983
+3698688        32019
+3702784        32051
+3706880        32118
+3710976        32099
+3715072        32150
+3719168        32153
+3723264        32246
+3727360        32242
+3731456        32272
+3735552        32336
+3739648        32340
+3743744        32378
+3747840        32441
+3751936        32473
+3756032        32476
+3760128        32576
+3764224        32524
+3768320        32566
+3772416        32706
+3776512        32695
+3780608        32672
+3784704        32772
+3788800        32752
+3792896        32786
+3796992        32919
+3801088        32863
+3805184        32961
+3809280        33032
+3813376        32962
+3817472        33026
+3821568        33123
+3825664        33074
+3829760        33216
+3833856        33127
+3837952        33151
+3842048        33208
+3846144        33322
+3850240        33269
+3854336        33301
+3858432        33333
+3862528        33366
+3866624        33401
+3870720        33436
+3874816        33471
+3878912        33515
+3883008        33544
+3887104        33581
+3891200        33619
+3895296        33668
+3899392        33695
+3903488        33733
+3907584        33759
+3911680        33790
+3915776        33855
+3919872        33868
+3923968        33884
+3928064        33920
+3932160        33971
+3936256        33998
+3940352        34038
+3944448        34055
+3948544        34106
+3952640        34145
+3956736        34163
+3960832        34236
+3964928        34269
+3969024        34283
+3973120        34321
+3977216        34350
+3981312        34392
+3985408        34483
+3989504        34469
+3993600        34494
+3997696        34558
+4001792        34564
+4005888        34611
+4009984        34645
+4014080        34681
+4018176        34690
+4022272        34749
+4026368        34759
+4030464        34787
+4034560        34869
+4038656        34913
+4042752        34891
+4046848        34962
+4050944        34996
+4055040        35014
+4059136        35069
+4063232        35179
+4067328        35116
+4071424        35231
+4075520        35264
+4079616        35297
+4083712        35258
+4087808        35371
+4091904        35326
+4096000        35422
+4100096        35463
+4104192        35421
+4108288        35520
+4112384        35550
+4116480        35526
+4120576        35632
+4124672        35634
+4128768        35731
+4132864        35766
+4136960        35717
+4141056        35741
+4145152        35780
+4149248        35834
+4153344        35868
+4157440        35893
+4161536        35932
+4165632        35956
+4169728        36094
+4173824        36030
+4177920        36175
+4182016        36082
+4186112        36226
+4190208        36138
+4194304        36181
+4202496        36269
+4210688        36332
+4218880        36487
+4227072        36555
+4235264        36544
+4243456        36627
+4251648        36708
+4259840        36762
+4268032        36823
+4276224        36908
+4284416        37036
+4292608        37039
+4300800        37088
+4308992        37166
+4317184        37336
+4325376        37330
+4333568        37385
+4341760        37469
+4349952        37537
+4358144        37602
+4366336        37667
+4374528        37763
+4382720        37834
+4390912        37944
+4399104        38028
+4407296        38040
+4415488        38112
+4423680        38167
+4431872        38302
+4440064        38298
+4448256        38376
+4456448        38441
+4464640        38598
+4472832        38576
+4481024        38667
+4489216        38757
+4497408        38786
+4505600        38941
+4513792        39008
+4521984        39005
+4530176        39088
+4538368        39186
+4546560        39317
+4554752        39254
+4562944        39343
+4571136        39397
+4579328        39489
+4587520        39603
+4595712        39647
+4603904        39685
+4612096        39778
+4620288        39966
+4628480        39917
+4636672        40109
+4644864        40114
+4653056        40090
+4661248        40341
+4669440        40316
+4677632        40319
+4685824        40420
+4694016        40456
+4702208        40539
+4710400        40625
+4718592        40646
+4726784        40828
+4734976        40786
+4743168        40940
+4751360        41034
+4759552        41072
+4767744        41126
+4775936        41193
+4784128        41333
+4792320        41324
+4800512        41346
+4808704        41487
+4816896        41525
+4825088        41600
+4833280        41830
+4841472        41748
+4849664        41856
+4857856        41909
+4866048        42064
+4874240        42031
+4882432        42148
+4890624        42171
+4898816        42181
+4907008        42330
+4915200        42434
+4923392        42500
+4931584        42475
+4939776        42627
+4947968        42755
+4956160        42677
+4964352        42826
+4972544        42943
+4980736        42974
+4988928        43017
+4997120        43038
+5005312        43194
+5013504        43282
+5021696        43227
+5029888        43320
+5038080        43376
+5046272        43443
+5054464        43537
+5062656        43606
+5070848        43744
+5079040        43803
+5087232        43855
+5095424        43931
+5103616        44021
+5111808        44198
+5120000        44157
+5128192        44207
+5136384        44307
+5144576        44372
+5152768        44557
+5160960        44414
+5169152        44479
+5177344        44551
+5185536        44790
+5193728        44673
+5201920        44763
+5210112        44844
+5218304        44914
+5226496        44968
+5234688        45244
+5242880        45222
+5251072        45205
+5259264        45299
+5267456        45311
+5275648        45389
+5283840        45463
+5292032        45532
+5300224        45605
+5308416        45751
+5316608        45736
+5324800        45848
+5332992        45878
+5341184        46057
+5349376        46007
+5357568        46092
+5365760        46157
+5373952        46228
+5382144        46309
+5390336        46373
+5398528        46451
+5406720        46507
+5414912        46586
+5423104        46662
+5431296        46781
+5439488        46809
+5447680        46975
+5455872        47039
+5464064        46988
+5472256        47098
+5480448        47214
+5488640        47193
+5496832        47272
+5505024        47447
+5513216        47495
+5521408        47534
+5529600        47550
+5537792        47719
+5545984        47685
+5554176        47764
+5562368        47824
+5570560        47899
+5578752        47958
+5586944        48036
+5595136        48115
+5603328        48171
+5611520        48323
+5619712        48306
+5627904        48381
+5636096        48512
+5644288        48534
+5652480        48588
+5660672        48681
+5668864        48740
+5677056        48800
+5685248        48893
+5693440        48971
+5701632        49021
+5709824        49080
+5718016        49226
+5726208        49220
+5734400        49298
+5742592        49370
+5750784        49435
+5758976        49503
+5767168        49619
+5775360        49646
+5783552        49836
+5791744        49871
+5799936        49869
+5808128        49915
+5816320        50040
+5824512        50099
+5832704        50154
+5840896        50229
+5849088        50275
+5857280        50374
+5865472        50494
+5873664        50581
+5881856        50609
+5890048        50671
+5898240        50747
+5906432        50956
+5914624        50933
+5922816        50957
+5931008        51067
+5939200        51193
+5947392        51219
+5955584        51261
+5963776        51268
+5971968        51311
+5980160        51587
+5988352        51564
+5996544        51673
+6004736        51599
+6012928        51769
+6021120        51733
+6029312        51803
+6037504        51888
+6045696        51937
+6053888        52008
+6062080        52093
+6070272        52143
+6078464        52238
+6086656        52306
+6094848        52355
+6103040        52446
+6111232        52529
+6119424        52558
+6127616        52665
+6135808        52698
+6144000        52791
+6152192        52901
+6160384        53014
+6168576        53078
+6176768        53043
+6184960        53127
+6193152        53192
+6201344        53271
+6209536        53388
+6217728        53402
+6225920        53464
+6234112        53649
+6242304        53607
+6250496        53671
+6258688        53738
+6266880        53821
+6275072        54005
+6283264        53971
+6291456        54020
+6299648        54232
+6307840        54161
+6316032        54252
+6324224        54299
+6332416        54372
+6340608        54441
+6348800        54509
+6356992        54595
+6365184        54652
+6373376        54731
+6381568        54795
+6389760        54857
+6397952        54960
+6406144        55015
+6414336        55067
+6422528        55170
+6430720        55203
+6438912        55270
+6447104        55427
+6455296        55439
+6463488        55573
+6471680        55578
+6479872        55636
+6488064        55692
+6496256        55757
+6504448        55877
+6512640        55900
+6520832        56069
+6529024        56044
+6537216        56112
+6545408        56177
+6553600        56265
+6561792        56319
+6569984        56390
+6578176        56455
+6586368        56533
+6594560        56596
+6602752        56668
+6610944        56736
+6619136        56806
+6627328        56885
+6635520        56948
+6643712        57027
+6651904        57092
+6660096        57175
+6668288        57237
+6676480        57315
+6684672        57374
+6692864        57429
+6701056        57596
+6709248        57589
+6717440        57687
+6725632        57720
+6733824        57835
+6742016        58421
+6750208        57959
+6758400        58019
+6766592        58061
+6774784        58167
+6782976        58200
+6791168        58279
+6799360        58451
+6807552        58539
+6815744        58489
+6823936        58548
+6832128        58673
+6840320        58737
+6848512        58788
+6856704        58829
+6864896        58894
+6873088        58989
+6881280        59034
+6889472        59179
+6897664        59197
+6905856        59278
+6914048        59382
+6922240        59427
+6930432        59459
+6938624        59528
+6946816        59577
+6955008        59659
+6963200        59872
+6971392        59846
+6979584        59880
+6987776        60074
+6995968        60140
+7004160        60144
+7012352        60197
+7020544        60250
+7028736        60291
+7036928        60361
+7045120        60466
+7053312        60580
+7061504        60585
+7069696        60671
+7077888        60756
+7086080        60820
+7094272        60847
+7102464        61022
+7110656        61083
+7118848        61077
+7127040        61168
+7135232        61199
+7143424        61286
+7151616        61511
+7159808        61394
+7168000        61571
+7176192        61543
+7184384        61625
+7192576        61701
+7200768        61750
+7208960        61823
+7217152        61928
+7225344        61967
+7233536        62064
+7241728        62128
+7249920        62169
+7258112        62245
+7266304        62309
+7274496        62430
+7282688        62476
+7290880        62516
+7299072        62597
+7307264        62684
+7315456        62763
+7323648        62836
+7331840        62876
+7340032        62967
+7348224        63038
+7356416        63084
+7364608        63181
+7372800        63334
+7380992        63344
+7389184        63410
+7397376        63483
+7405568        63611
+7413760        63586
+7421952        63683
+7430144        63767
+7438336        63904
+7446528        63912
+7454720        64098
+7462912        64003
+7471104        64179
+7479296        64316
+7487488        64268
+7495680        64271
+7503872        64369
+7512064        64491
+7520256        64510
+7528448        64535
+7536640        64610
+7544832        64776
+7553024        64832
+7561216        64854
+7569408        64921
+7577600        64949
+7585792        65096
+7593984        65189
+7602176        65220
+7610368        65257
+7618560        65348
+7626752        65439
+7634944        65547
+7643136        65533
+7651328        65663
+7659520        65758
+7667712        65902
+7675904        66435
+7684096        65998
+7692288        65999
+7700480        66194
+7708672        66211
+7716864        66230
+7725056        66221
+7733248        66303
+7741440        66387
+7749632        66529
+7757824        66514
+7766016        66621
+7774208        66643
+7782400        66687
+7790592        66861
+7798784        66862
+7806976        67003
+7815168        67037
+7823360        67020
+7831552        67118
+7839744        67195
+7847936        67350
+7856128        67324
+7864320        67390
+7872512        67560
+7880704        67523
+7888896        67586
+7897088        67654
+7905280        67749
+7913472        67822
+7921664        67880
+7929856        67938
+7938048        68013
+7946240        68085
+7954432        68153
+7962624        68225
+7970816        68304
+7979008        68361
+7987200        68429
+7995392        68512
+8003584        68591
+8011776        68641
+8019968        68722
+8028160        68788
+8036352        68887
+8044544        69110
+8052736        69085
+8060928        69196
+8069120        69131
+8077312        69237
+8085504        69357
+8093696        69368
+8101888        69643
+8110080        69597
+8118272        69609
+8126464        69648
+8134656        69748
+8142848        69919
+8151040        69898
+8159232        69981
+8167424        70067
+8175616        70028
+8183808        70218
+8192000        70272
+8200192        70357
+8208384        70410
+8216576        70514
+8224768        70503
+8232960        70623
+8241152        70720
+8249344        70659
+8257536        70779
+8265728        70792
+8273920        70978
+8282112        71039
+8290304        71013
+8298496        71213
+8306688        71203
+8314880        71231
+8323072        71298
+8331264        71347
+8339456        71517
+8347648        71609
+8355840        71575
+8364032        71642
+8372224        71709
+8380416        71824
+8388608        71855
index 60f0dc3..6bffd97 100755 (executable)
@@ -1,6 +1,10 @@
 #!/usr/bin/env python
 
 #---------------------------------------------------------------------------------------------------
+# Example invokation:
+# % ./regress.py griffon_skampi_pt2pt.ski.dat 65536 120832
+#
+#
 # Given two vectors of same length n: message size S(.. s_i ..), and communication time T( .. t_i .. )
 # where t_i is the time associated to a mesage size s_i, computes the segmentation of the vectors   
 # in 3 segments such that linear regressions on the 3 segments maximize correlation.
@@ -25,7 +29,7 @@ from math import sqrt,log,exp
 
 if len(sys.argv) != 2 and len(sys.argv) != 4:
        print("Usage : {} datafile".format(sys.argv[0]))
-       print("or    : {} datafile p1 p2".format(sys.argv[0]))
+       print("or    : {0} datafile p1 p2".format(sys.argv[0]))
        print("where : p1 < p2 belongs to sizes in datafiles")
        sys.exit(-1)
 
@@ -119,7 +123,6 @@ def correl_split_weighted_logerr( X , Y , segments ):
                        Z.append( a * X[i] + b )
                # compare real values and computed values
                e = mean_logerr( Y[start:stop+1] , Z )
-               #print("   range [%d,%d] err=%f‰ weight=%f" % (X[start],X[stop],e,(stop-start+1)/len(X))) 
                correl.append( (e, stop-start+1) );   # store correl. coef + number of values (segment length)
                interv.append( (a,b, X[start],X[stop],e) );
        
@@ -296,7 +299,8 @@ if len(sys.argv) == 4:
 
        for k in range(top_n_sol):
                (err,interval) = result[k]
-               print("\n   RANK {}\n-------".format(k))
+               print(k)
+               print("\n   RANK {0}\n-------".format(k))
                print("** overall metric = {0}".format(err))
                for (a,b,i,j,e) in interval:
                        print("** OPT: [{0} .. {1}] segment_metric={2}          slope: {3} x + {4}".format(i,j,e,a,b))
diff --git a/contrib/network_model/regression2.py b/contrib/network_model/regression2.py
new file mode 100755 (executable)
index 0000000..ea9e3a4
--- /dev/null
@@ -0,0 +1,169 @@
+#!/usr/bin/python
+# This script takes the following command line parameters
+# 1) an input file containing 2 columns: message size and 1-way trip time
+# 2) the maximum relative error for a line segment
+# 3) the minimum number of points needed to justify adding a line segment
+# 4) the number of links
+# 5) the latency
+# 6) the bandwidth
+
+import sys
+
+def compute_regression(points):
+    N = len(points)
+
+    if N < 1:
+        return None
+
+    if N < 2:
+        return (0, points[0][1])
+
+    Sx = Sy = Sxx = Syy = Sxy = 0.0
+
+    for x, y in points:
+        Sx  += x
+        Sy  += y
+        Sxx += x*x
+        Syy += y*y
+        Sxy += x*y
+    denom = Sxx * N - Sx * Sx
+    # don't return 0 or negative values as a matter of principle...
+    m = max(sys.float_info.min, (Sxy * N - Sy * Sx) / denom)
+    b = max(sys.float_info.min, (Sxx * Sy - Sx * Sxy) / denom)
+    return (m, b)
+
+def compute_error(m, b, x, y):
+    yp = m*x+b
+    return abs(yp - y) / max(min(yp, y), sys.float_info.min)
+
+def compute_max_error(m, b, points):
+    max_error = 0.0
+    for x, y in points:
+        max_error = max(max_error, compute_error(m, b, x, y))
+    return max_error
+
+def get_max_error_point(m, b, points):
+    max_error_index = -1
+    max_error = 0.0
+
+    i = 0
+    while i < len(points):
+        x, y = points[i]
+        error = compute_error(m, b, x, y)
+        if error > max_error:
+            max_error_index = i
+            max_error = error
+        i += 1
+
+    return (max_error_index, max_error)
+
+infile_name = sys.argv[1]
+error_bound = float(sys.argv[2])
+min_seg_points = int(sys.argv[3])
+links = int(sys.argv[4])
+latency = float(sys.argv[5])
+bandwidth = float(sys.argv[6])
+
+infile = open(infile_name, 'r')
+
+# read datafile
+points = []
+for line in infile:
+    fields = line.split()
+    points.append((int(fields[0]), int(fields[1])))
+infile.close()
+
+# should sort points by x values
+points.sort()
+
+# break points up into segments
+pointsets = []
+lbi = 0
+while lbi < len(points):
+    min_ubi = lbi
+    max_ubi = len(points) - 1
+    while max_ubi - min_ubi > 1:
+        ubi = (min_ubi + max_ubi) / 2
+        m, b = compute_regression(points[lbi:ubi+1])
+        max_error = compute_max_error(m, b, points[lbi:ubi+1])
+        if max_error > error_bound:
+            max_ubi = ubi - 1
+        else:
+            min_ubi = ubi
+    ubi = max_ubi
+    if min_ubi < max_ubi:
+        m, b = compute_regression(points[lbi:max_ubi+1])
+        max_error = compute_max_error(m, b, points[lbi:max_ubi+1])
+        if max_error > error_bound:
+            ubi = min_ubi
+    pointsets.append(points[lbi:ubi+1])
+    lbi = ubi+1
+
+# try to merge larger segments if possible and compute piecewise regression
+i = 0
+segments = []
+notoutliers = 0
+while i < len(pointsets):
+    currpointset = []
+    j = i
+    while j < len(pointsets):
+        newpointset = currpointset + pointsets[j] 
+        # if joining a small segment, we can delete bad points
+        if len(pointsets[j]) < min_seg_points:
+            k = 0
+            while k < len(pointsets[j]):
+                m, b = compute_regression(newpointset)
+                max_error_index, max_error = get_max_error_point(m, b, newpointset)
+                if max_error <= error_bound:
+                    break
+                del newpointset[max_error_index]
+                k += 1
+            # only add new pointset if we had to delete fewer than its length
+            # points
+            if k < len(pointsets[j]):
+                i = j
+                currpointset = newpointset   
+        # otherwise, we just see if it works...
+        else:
+            m, b = compute_regression(newpointset)
+            max_error = compute_max_error(m, b, newpointset)
+            if max_error > error_bound:
+                break
+            i = j
+            currpointset = newpointset   
+        j += 1
+    i += 1
+    # outliers are ignored when constructing the piecewise funciton
+    if len(currpointset) < min_seg_points:
+        continue
+    notoutliers += len(currpointset)
+    m, b = compute_regression(currpointset)
+    lb = min(x for x, y in currpointset)
+    lat_factor = b / (1.0e6 * links * latency)
+    bw_factor = 1.0e6 / (m * bandwidth)
+    segments.append((lb, m, b, lat_factor, bw_factor))
+
+outliers = len(points) - notoutliers
+segments.sort()
+segments.reverse()
+
+print "/**--------- <copy/paste C code snippet in surf/network.c> -------------"
+print "  * produced by:"
+print "  *", " ".join(sys.argv)
+print "  * outliers:", outliers
+print "  * gnuplot: "
+print "    plot \"%s\" using 1:2 with lines title \"data\", \\" % (infile_name)
+for lb, m, b, lat_factor, bw_factor in segments:
+    print "        (x >= %d) ? %g*x+%g : \\" % (lb, m, b)
+print "        1.0 with lines title \"piecewise function\""
+print "  *-------------------------------------------------------------------*/"
+print
+print "static double smpi_bandwidth_factor(double size)\n{\n"
+for lb, m, b, lat_factor, bw_factor in segments:
+    print "    if (size >= %d) return %g;" % (lb, bw_factor)
+print "    return 1.0;\n}\n"
+print "static double smpi_latency_factor(double size)\n{\n"
+for lb, m, b, lat_factor, bw_factor in segments:
+    print "    if (size >= %d) return %g;" % (lb, lat_factor)
+print "    return 1.0;\n}\n"
+print "/**--------- <copy/paste C code snippet in surf/network.c> -----------*/"
diff --git a/contrib/network_model/smpi_calibration.c b/contrib/network_model/smpi_calibration.c
new file mode 100644 (file)
index 0000000..fd67750
--- /dev/null
@@ -0,0 +1,55 @@
+/**--------- <copy/paste C code snippet in surf/network.c> -------------
+  * produced by:
+  * ./regression2.py ./pingpong-in.dat 0.15 30 2 2.4e-5 1.25e8
+  * outliers: 66
+  * gnuplot: 
+    plot "./pingpong-in.dat" using 1:2 with lines title "data", \
+        (x >= 65472) ? 0.00850436*x+558.894 : \
+        (x >= 15424) ? 0.0114635*x+167.446 : \
+        (x >= 9376) ? 0.0136219*x+124.464 : \
+        (x >= 5776) ? 0.00735707*x+105.022 : \
+        (x >= 3484) ? 0.0103235*x+90.2886 : \
+        (x >= 1426) ? 0.0131384*x+77.3159 : \
+        (x >= 732) ? 0.0233927*x+93.6146 : \
+        (x >= 257) ? 0.0236608*x+93.7637 : \
+        (x >= 127) ? 0.0246645*x+94.0447 : \
+        (x >= 64) ? 0.037963*x+93.0877 : \
+        (x >= 0) ? 2.22507e-308*x+98.0633 : \
+        1.0 with lines title "piecewise function"
+  *-------------------------------------------------------------------*/
+
+static double smpi_bandwidth_factor(double size)
+{
+
+    if (size >= 65472) return 0.940694;
+    if (size >= 15424) return 0.697866;
+    if (size >= 9376) return 0.58729;
+    if (size >= 5776) return 1.08739;
+    if (size >= 3484) return 0.77493;
+    if (size >= 1426) return 0.608902;
+    if (size >= 732) return 0.341987;
+    if (size >= 257) return 0.338112;
+    if (size >= 127) return 0.324353;
+    if (size >= 64) return 0.210731;
+    if (size >= 0) return 3.59539e+305;
+    return 1.0;
+}
+
+static double smpi_latency_factor(double size)
+{
+
+    if (size >= 65472) return 11.6436;
+    if (size >= 15424) return 3.48845;
+    if (size >= 9376) return 2.59299;
+    if (size >= 5776) return 2.18796;
+    if (size >= 3484) return 1.88101;
+    if (size >= 1426) return 1.61075;
+    if (size >= 732) return 1.9503;
+    if (size >= 257) return 1.95341;
+    if (size >= 127) return 1.95926;
+    if (size >= 64) return 1.93933;
+    if (size >= 0) return 2.04299;
+    return 1.0;
+}
+
+/**--------- <copy/paste C code snippet in surf/network.c> -----------*/
index c1dd9e6..a99a83b 100644 (file)
@@ -614,6 +614,7 @@ WARN_LOGFILE           =
 # with spaces.
 
 INPUT                  = index.doc \
+                         FAQ.doc \
                                                 installSimgrid.doc \
                          bindings.doc \
                          options.doc \
diff --git a/doc/FAQ.doc b/doc/FAQ.doc
new file mode 100644 (file)
index 0000000..010990b
--- /dev/null
@@ -0,0 +1,1080 @@
+/*! \page FAQ Frequently Asked Questions
+
+\htmlinclude .FAQ.doc.toc
+
+\section faq_simgrid I'm new to SimGrid. I have some questions. Where should I start?
+
+You are at the right  place... Having a look to these
+<a href="http://www.loria.fr/~quinson/blog/2010/06/28/Tutorial_at_HPCS/">the slides of the HPCS'10 tutorial</a>
+(or to these <a href="http://graal.ens-lyon.fr/~alegrand/articles/slides_g5k_simul.pdf">ancient
+slides</a>, or to these
+<a href="http://graal.ens-lyon.fr/~alegrand/articles/Simgrid-Introduction.pdf">"obsolete" slides</a>)
+may give you some insights on what SimGrid can help you to do and what
+are its limitations. Then you definitely should read the \ref
+MSG_examples. The \ref GRAS_tut can also help you.
+
+If you are stuck at any point and if this FAQ cannot help you, please drop us a
+mail to the user mailing list: <simgrid-user@lists.gforge.inria.fr>.
+
+\subsection faq_interfaces What is the difference between MSG, SimDag, and GRAS? Do they serve the same purpose?
+
+It depend on how you define "purpose", I guess ;)
+
+They all allow you to build a prototype of application which you can run
+within the simulator afterward. They all share the same simulation kernel,
+which is the core of the SimGrid project. They differ by the way you express
+your application.
+
+With SimDag, you express your code as a collection of interdependent
+parallel tasks. So, in this model, applications can be seen as a DAG of
+tasks. This is the interface of choice for people wanting to port old
+code designed for SimGrid v1 or v2 to the framework current version.
+
+With both GRAS and MSG, your application is seen as a set of communicating
+processes, exchanging data by the way of messages and performing computation
+on their own.
+
+The difference between both is that MSG is somehow easier to use, but GRAS
+is not limited to the simulator. Once you're done writing your GRAS code,
+you can run your code both in the simulator and on a real platform. For this,
+there are two implementations of the GRAS interface, one for simulation, and one
+for real execution. So, you just have to relink your code to choose one of
+both worlds. 
+
+\subsection faq_visualization Visualizing and analyzing the results
+
+It is sometime convenient to "see" how the agents are behaving. If you
+like colors, you can use <tt>tools/MSG_visualization/colorize.pl </tt>
+as a filter to your MSG outputs. It works directly with INFO. Beware,
+INFO() prints on stderr. Do not forget to redirect if you want to
+filter (e.g. with bash): 
+\verbatim 
+./msg_test small_platform.xml small_deployment.xml 2>&1 | ../../tools/MSG_visualization/colorize.pl
+\endverbatim
+
+We also have a more graphical output. Have a look at section \ref options_tracing.
+
+\subsection faq_C Argh! Do I really have to code in C?
+
+Currently bindings on top of MSG are supported for Java, Ruby and Lua. You can find a few 
+documentation about them on the doc page. Note that bindings are released separately from the main dist
+and so have their own version numbers.
+
+Moreover If you use C++,
+you should be able to use the SimGrid library as a standard C library
+and everything should work fine (simply <i>link</i> against this
+library; recompiling SimGrid with a C++ compiler won't work and it
+wouldn't help if you could).
+
+For now,
+we do not feel a real demand for any other language. But if you think there is one,
+ please speak up!
+
+\section faq_howto Feature related questions
+
+\subsection faq_MIA "Could you please add (your favorite feature here) to SimGrid?"
+
+Here is the deal. The whole SimGrid project (MSG, SURF, GRAS, ...) is
+meant to be kept as simple and generic as possible. We cannot add
+functions for everybody's needs when these functions can easily be
+built from the ones already in the API. Most of the time, it is
+possible and when it was not possible we always have upgraded the API
+accordingly. When somebody asks us a question like "How to do that?
+Is there a function in the API to simply do this?", we're always glad
+to answer and help. However if we don't need this code for our own
+need, there is no chance we're going to write it... it's your job! :)
+The counterpart to our answers is that once you come up with a neat
+implementation of this feature (task duplication, RPC, thread
+synchronization, ...), you should send it to us and we will be glad to
+add it to the distribution. Thus, other people will take advantage of
+it (and we don't have to answer this question again and again ;).
+
+You'll find in this section a few "Missing In Action" features. Many
+people have asked about it and we have given hints on how to simply do
+it with MSG. Feel free to contribute...
+
+\subsection faq_MIA_MSG MSG features
+
+\subsubsection faq_MIA_examples I want some more complex MSG examples!
+
+Many people have come to ask me a more complex example and each time,
+they have realized afterward that the basics were in the previous three
+examples. 
+
+Of course they have often been needing more complex functions like
+MSG_process_suspend(), MSG_process_resume() and
+MSG_process_isSuspended() (to perform synchronization), or
+MSG_task_Iprobe() and MSG_process_sleep() (to avoid blocking
+receptions), or even MSG_process_create() (to design asynchronous
+communications or computations). But the examples are sufficient to
+start.
+
+We know. We should add some more examples, but not really some more
+complex ones... We should add some examples that illustrate some other
+functionalists (like how to simply encode asynchronous
+communications, RPC, process migrations, thread synchronization, ...)
+and we will do it when we will have a little bit more time. We have
+tried to document the examples so that they are understandable. Tell
+us if something is not clear and once again feel free to participate!
+:)
+
+\subsubsection faq_MIA_taskdup Missing in action: MSG Task duplication/replication
+
+There is no task duplication in MSG. When you create a task, you can
+process it or send it somewhere else. As soon as a process has sent
+this task, he doesn't have this task anymore. It's gone. The receiver
+process has got the task. However, you could decide upon receiving to
+create a "copy" of a task but you have to handle by yourself the
+semantic associated to this "duplication".
+
+As we already told, we prefer keeping the API as simple as
+possible. This kind of feature is rather easy to implement by users
+and the semantic you associate really depends on people. Having a
+*generic* task duplication mechanism is not that trivial (in
+particular because of the data field). That is why I would recommend
+that you write it by yourself even if I can give you advice on how to
+do it.
+
+You have the following functions to get information about a task:
+MSG_task_get_name(), MSG_task_get_compute_duration(),
+MSG_task_get_remaining_computation(), MSG_task_get_data_size(),
+and MSG_task_get_data().
+
+You could use a dictionary (#xbt_dict_t) of dynars (#xbt_dynar_t). If
+you still don't see how to do it, please come back to us...
+
+\subsubsection faq_MIA_asynchronous I want to do asynchronous communications in MSG
+
+In the past (version <= 3.4), there was no function to perform asynchronous communications. 
+It could easily be implemented by creating new process when needed though. Since version 3.5, 
+we have introduced the following functions:
+ - MSG_task_isend()
+ - MSG_task_irecv()
+ - MSG_comm_test()
+ - MSG_comm_wait()
+ - MSG_comm_waitall()
+ - MSG_comm_waitany()
+ - MSG_comm_destroy()
+
+We refer you to the description of these functions for more details on their usage as well 
+as to the example section on \ref MSG_ex_asynchronous_communications.
+
+\subsubsection faq_MIA_thread_synchronization I need to synchronize my MSG processes
+
+You obviously cannot use pthread_mutexes of pthread_conds since we handle every 
+scheduling related decision within SimGrid. 
+
+In the past (version <=3.3.4) you could do it by playing with
+MSG_process_suspend() and MSG_process_resume() or with fake communications (using MSG_task_get(),
+MSG_task_put() and MSG_task_Iprobe()).
+
+Since version 3.4, you can use classical synchronization structures. See page \ref XBT_synchro or simply check in
+include/xbt/synchro_core.h.
+
+\subsubsection faq_MIA_host_load Where is the get_host_load function hidden in MSG?
+
+There is no such thing because its semantic wouldn't be really
+clear. Of course, it is something about the amount of host throughput,
+but there is as many definition of "host load" as people asking for
+this function. First, you have to remember that resource availability
+may vary over time, which make any load notion harder to define.
+
+It may be instantaneous value or an average one. Moreover it may be only the
+power of the computer, or may take the background load into account, or may
+even take the currently running tasks into account. In some SURF models,
+communications have an influence on computational power. Should it be taken
+into account too?
+
+First of all, it's near to impossible to predict the load beforehand in the
+simulator since it depends on too much parameters (background load
+variation, bandwidth sharing algorithmic complexity) some of them even being
+not known beforehand (other task starting at the same time). So, getting
+this information is really hard (just like in real life). It's not just that
+we want MSG to be as painful as real life. But as it is in some way
+realistic, we face some of the same problems as we would face in real life.
+
+How would you do it for real? The most common option is to use something
+like NWS that performs active probes. The best solution is probably to do
+the same within MSG, as in next code snippet. It is very close from what you
+would have to do out of the simulator, and thus gives you information that
+you could also get in real settings to not hinder the realism of your
+simulation. 
+
+\verbatim
+double get_host_load() {
+   m_task_t task = MSG_task_create("test", 0.001, 0, NULL);
+   double date = MSG_get_clock();
+
+   MSG_task_execute(task);
+   date = MSG_get_clock() - date;
+   MSG_task_destroy(task);
+   return (0.001/date);
+}
+\endverbatim
+
+Of course, it may not match your personal definition of "host load". In this
+case, please detail what you mean on the mailing list, and we will extend
+this FAQ section to fit your taste if possible.
+
+\subsubsection faq_MIA_communication_time How can I get the *real* communication time?  
+
+Communications are synchronous and thus if you simply get the time
+before and after a communication, you'll only get the transmission
+time and the time spent to really communicate (it will also take into
+account the time spent waiting for the other party to be
+ready). However, getting the *real* communication time is not really
+hard either. The following solution is a good starting point.
+
+\verbatim
+int sender()
+{
+  m_task_t task = MSG_task_create("Task", task_comp_size, task_comm_size, 
+                                  calloc(1,sizeof(double)));
+  *((double*) task->data) = MSG_get_clock();
+  MSG_task_put(task, slaves[i % slaves_count], PORT_22);
+  XBT_INFO("Send completed");
+  return 0;
+}
+int receiver()
+{
+  m_task_t task = NULL;
+  double time1,time2;
+
+  time1 = MSG_get_clock();
+  a = MSG_task_get(&(task), PORT_22);
+  time2 = MSG_get_clock();
+  if(time1<*((double *)task->data))
+     time1 = *((double *) task->data);
+  XBT_INFO("Communication time :  \"%f\" ", time2-time1);
+  free(task->data);
+  MSG_task_destroy(task);
+  return 0;
+}
+\endverbatim
+
+\subsection faq_MIA_SimDag SimDag related questions
+
+\subsubsection faq_SG_comm Implementing communication delays between tasks.
+
+A classic question of SimDag newcomers is about how to express a
+communication delay between tasks. The thing is that in SimDag, both
+computation and communication are seen as tasks.  So, if you want to
+model a data dependency between two DAG tasks t1 and t2, you have to
+create 3 SD_tasks: t1, t2 and c and add dependencies in the following
+way:
+
+\verbatim
+SD_task_dependency_add(NULL, NULL, t1, c);
+SD_task_dependency_add(NULL, NULL, c, t2);
+\endverbatim
+
+This way task t2 cannot start before the termination of communication c
+which in turn cannot start before t1 ends.
+
+When creating task c, you have to associate an amount of data (in bytes)
+corresponding to what has to be sent by t1 to t2.
+
+Finally to schedule the communication task c, you have to build a list
+comprising the workstations on which t1 and t2 are scheduled (w1 and w2
+for example) and build a communication matrix that should look like
+[0;amount ; 0; 0].
+
+\subsubsection faq_SG_DAG How to implement a distributed dynamic scheduler of DAGs.
+
+Distributed is somehow "contagious". If you start making distributed
+decisions, there is no way to handle DAGs directly anymore (unless I
+am missing something). You have to encode your DAGs in term of
+communicating process to make the whole scheduling process
+distributed. Here is an example of how you could do that. Assume T1
+has to be done before T2.
+
+\verbatim
+ int your_agent(int argc, char *argv[] {
+   ...
+   T1 = MSG_task_create(...);
+   T2 = MSG_task_create(...);
+   ...
+   while(1) {
+     ...
+     if(cond) MSG_task_execute(T1);
+     ...
+     if((MSG_task_get_remaining_computation(T1)=0.0) && (you_re_in_a_good_mood))
+        MSG_task_execute(T2)
+     else {
+        /* do something else */
+     }
+   }
+ }
+\endverbatim
+If you decide that the distributed part is not that much important and that
+DAG is really the level of abstraction you want to work with, then you should
+give a try to \ref SD_API.
+
+\subsection faq_MIA_generic Generic features
+
+\subsubsection faq_more_processes Increasing the amount of simulated processes
+
+Here are a few tricks you can apply if you want to increase the amount
+of processes in your simulations.
+
+ - <b>A few thousands of simulated processes</b> (soft tricks)\n
+   SimGrid can use either pthreads library or the UNIX98 contexts. On
+   most systems, the number of pthreads is limited and then your
+   simulation may be limited for a stupid reason. This is especially
+   true with the current linux pthreads, and I cannot get more than
+   2000 simulated processes with pthreads on my box. The UNIX98
+   contexts allow me to raise the limit to 25,000 simulated processes
+   on my laptop.\n\n
+   The <tt>--with-context</tt> option of the <tt>./configure</tt>
+   script allows you to choose between UNIX98 contexts
+   (<tt>--with-context=ucontext</tt>) and the pthread version
+   (<tt>--with-context=pthread</tt>). The default value is ucontext
+   when the script detect a working UNIX98 context implementation. On
+   Windows boxes, the provided value is discarded and an adapted
+   version is picked up.\n\n
+   We experienced some issues with contexts on some rare systems
+   (solaris 8 and lower or old alpha linuxes comes to mind). The main
+   problem is that the configure script detect the contexts as being
+   functional when it's not true. If you happen to use such a system,
+   switch manually to the pthread version, and provide us with a good
+   patch for the configure script so that it is done automatically ;)
+
+ - <b>Hundred thousands of simulated processes</b> (hard-core tricks)\n 
+   As explained above, SimGrid can use UNIX98 contexts to represent
+   and handle the simulated processes. Thanks to this, the main
+   limitation to the number of simulated processes becomes the
+   available memory.\n\n
+   Here are some tricks I had to use in order to run a token ring
+   between 25,000 processes on my laptop (1Gb memory, 1.5Gb swap).\n
+   - First of all, make sure your code runs for a few hundreds
+     processes before trying to push the limit. Make sure it's
+     valgrind-clean, i.e. that valgrind does not report neither memory
+     error nor memory leaks. Indeed, numerous simulated processes
+     result in *fat* simulation hindering debugging.
+   - It was really boring to write 25,000 entries in the deployment
+     file, so I wrote a little script
+     <tt>examples/gras/mutual_exclusion/simple_token/make_deployment.pl</tt>, which you may
+     want to adapt to your case. You could also think about hijacking
+     the SURFXML parser (have look at \ref faq_flexml_bypassing).
+   - The deployment file became quite big, so I had to do what is in
+     the FAQ entry \ref faq_flexml_limit
+   - Each UNIX98 context has its own stack entry. As debugging this is
+     quite hairy, the default value is a bit overestimated so that
+     user doesn't get into trouble about this. You want to tune this
+     size to increase the number of processes. This is the
+     <tt>STACK_SIZE</tt> define in 
+     <tt>src/xbt/xbt_context_sysv.c</tt>, which is 128kb by default.
+     Reduce this as much as you can, but be warned that if this value
+     is too low, you'll get a segfault. The token ring example, which
+     is quite simple, runs with 40kb stacks.     
+   - You may tweak the logs to reduce the stack size further.  When
+     logging something, we try to build the string to display in a
+     char array on the stack. The size of this array is constant (and
+     equal to XBT_LOG_BUFF_SIZE, defined in include/xbt/log/h). If the
+     string is too large to fit this buffer, we move to a dynamically
+     sized buffer. In which case, we have to traverse one time the log
+     event arguments to compute the size we need for the buffer,
+     malloc it, and traverse the argument list again to do the actual
+     job.\n     
+     The idea here is to move XBT_LOG_BUFF_SIZE to 1, forcing the logs
+     to use a dynamic array each time. This allows us to lower further
+     the stack size at the price of some performance loss...\n
+     This allowed me to run the reduce the stack size to ... 4k. Ie,
+     on my 1Gb laptop, I can run more than 250,000 processes!
+
+\subsubsection faq_MIA_batch_scheduler Is there a native support for batch schedulers in SimGrid?
+
+No, there is no native support for batch schedulers and none is
+planned because this is a very specific need (and doing it in a
+generic way is thus very hard). However some people have implemented
+their own batch schedulers. Vincent Garonne wrote one during his PhD
+and put his code in the contrib directory of our SVN so that other can
+keep working on it. You may find inspiring ideas in it.
+
+\subsubsection faq_MIA_checkpointing I need a checkpointing thing
+
+Actually, it depends on whether you want to checkpoint the simulation, or to
+simulate checkpoints. 
+
+The first one could help if your simulation is a long standing process you
+want to keep running even on hardware issues. It could also help to
+<i>rewind</i> the simulation by jumping sometimes on an old checkpoint to
+cancel recent calculations.\n 
+Unfortunately, such thing will probably never exist in SG. One would have to
+duplicate all data structures because doing a rewind at the simulator level
+is very very hard (not talking about the malloc free operations that might
+have been done in between). Instead, you may be interested in the Libckpt
+library (http://www.cs.utk.edu/~plank/plank/www/libckpt.html). This is the
+checkpointing solution used in the condor project, for example. It makes it
+easy to create checkpoints (at the OS level, creating something like core
+files), and rerunning them on need.
+
+If you want to simulate checkpoints instead, it means that you want the
+state of an executing task (in particular, the progress made towards
+completion) to be saved somewhere.  So if a host (and the task executing on
+it) fails (cf. #MSG_HOST_FAILURE), then the task can be restarted
+from the last checkpoint.\n
+
+Actually, such a thing does not exist in SimGrid either, but it's just
+because we don't think it is fundamental and it may be done in the user code
+at relatively low cost. You could for example use a watcher that
+periodically get the remaining amount of things to do (using
+MSG_task_get_remaining_computation()), or fragment the task in smaller
+subtasks.
+
+\subsection faq_platform Platform building and Dynamic resources
+
+\subsubsection faq_platform_example Where can I find SimGrid platform files?
+
+There are several little examples in the archive, in the examples/msg
+directory. From time to time, we are asked for other files, but we
+don't have much at hand right now. 
+
+You should refer to the Platform Description Archive
+(http://pda.gforge.inria.fr) project to see the other platform file we
+have available, as well as the Simulacrum simulator, meant to generate
+SimGrid platforms using all classical generation algorithms.
+
+\subsubsection faq_platform_alnem How can I automatically map an existing platform?
+
+We are working on a project called ALNeM (Application-Level Network
+Mapper) which goal is to automatically discover the topology of an
+existing network. Its output will be a platform description file
+following the SimGrid syntax, so everybody will get the ability to map
+their own lab network (and contribute them to the catalog project).
+This tool is not ready yet, but it move quite fast forward. Just stay
+tuned.
+
+\subsubsection faq_platform_synthetic Generating synthetic but realistic platforms
+
+The third possibility to get a platform file (after manual or
+automatic mapping of real platforms) is to generate synthetic
+platforms. Getting a realistic result is not a trivial task, and
+moreover, nobody is really able to define what "realistic" means when
+speaking of topology files. You can find some more thoughts on this
+topic in these
+<a href="http://graal.ens-lyon.fr/~alegrand/articles/Simgrid-Introduction.pdf">slides</a>.
+
+If you are looking for an actual tool, there we have a little tool to
+annotate Tiers-generated topologies. This perl-script is in
+<tt>tools/platform_generation/</tt> directory of the SVN. Dinda et Al.
+released a very comparable tool, and called it GridG.
+
+\subsubsection faq_SURF_multicore Modeling multi-core resources 
+
+Since version 3.6 of simgrid we can specify the core number of a resource.
+To use this feature use tag 'host' with 'core' attribute. 
+\verbatim
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+    <AS  id="AS0"  routing="Full">
+        <host id="Tremblay" power="98095000" core="6"/>
+    </AS>
+</platform>
+\endverbatim
+
+The specified computing power will be available to up to 6 sequential
+tasks without sharing. If more tasks are placed on this host, the
+resource will be shared accordingly. For example, if you schedule 12
+tasks on the host, each will get half of the computing power. Please
+note that although sound, this model were never scientifically
+assessed. Please keep this fact in mind when using it.
+
+\subsubsection faq_SURF_dynamic Modeling dynamic resource availability 
+
+A nice feature of SimGrid is that it enables you to seamlessly have
+resources whose availability change over time. When you build a
+platform, you generally declare hosts like that:
+
+\verbatim
+  <host id="host A" power="100.00"/>
+\endverbatim 
+
+If you want the availability of "host A" to change over time, the only
+thing you have to do is change this definition like that:
+
+\verbatim
+  <host id="host A" power="100.00" availability_file="trace_A.txt" state_file="trace_A_failure.txt"/>
+\endverbatim
+
+For hosts, availability files are expressed in fraction of available
+power. Let's have a look at what "trace_A.txt" may look like:
+
+\verbatim
+PERIODICITY 1.0
+0.0 1.0
+11.0 0.5
+20.0 0.9
+\endverbatim
+
+At time 0, our host will deliver 100 flop/s. At time 11.0, it will
+deliver only 50 flop/s until time 20.0 where it will start
+delivering 90 flop/s. Last at time 21.0 (20.0 plus the periodicity
+1.0), we'll be back to the beginning and it will deliver 100 flop/s.
+
+Now let's look at the state file:
+\verbatim
+PERIODICITY 10.0
+1.0 -1.0
+2.0 1.0
+\endverbatim
+
+A negative value means "off" while a positive one means "on". At time
+1.0, the host is on. At time 1.0, it is turned off and at time 2.0, it
+is turned on again until time 12 (2.0 plus the periodicity 10.0). It
+will be turned on again at time 13.0 until time 23.0, and so on.
+
+Now, let's look how the same kind of thing can be done for network
+links. A usual declaration looks like:
+
+\verbatim
+  <link id="LinkA" bandwidth="10.0" latency="0.2"/>
+\endverbatim
+
+You have at your disposal the following options: bandwidth_file,
+latency_file and state_file. The only difference with hosts is that
+bandwidth_file and latency_file do not express fraction of available
+power but are expressed directly in bytes per seconds and seconds.
+
+\subsubsection faq_platform_multipath How to express multipath routing in platform files?
+
+It is unfortunately impossible to express the fact that there is more
+than one routing path between two given hosts. Let's consider the
+following platform file:
+
+\verbatim
+<route src="A" dst="B">
+   <link_ctn id="1"/>
+</route>
+<route src="B" dst="C">
+  <link_ctn id="2"/>
+</route>
+<route src="A" dst="C">
+  <link_ctn id="3"/>
+</route>
+\endverbatim
+
+Although it is perfectly valid, it does not mean that data traveling
+from A to C can either go directly (using link 3) or through B (using
+links 1 and 2). It simply means that the routing on the graph is not
+trivial, and that data do not following the shortest path in number of
+hops on this graph. Another way to say it is that there is no implicit
+in these routing descriptions. The system will only use the routes you
+declare (such as &lt;route src="A" dst="C"&gt;&lt;link_ctn
+id="3"/&gt;&lt;/route&gt;), without trying to build new routes by aggregating
+the provided ones.
+  
+You are also free to declare platform where the routing is not
+symmetric. For example, add the following to the previous file:
+
+\verbatim
+<route src="C" dst="A">
+  <link_ctn id="2"/>
+  <link_ctn id="1"/>
+</route>
+\endverbatim
+
+This makes sure that data from C to A go through B where data from A
+to C go directly. Don't worry about realism of such settings since
+we've seen ways more weird situation in real settings (in fact, that's
+the realism of very regular platforms which is questionable, but
+that's another story).
+
+\subsubsection faq_flexml_bypassing Bypassing the XML parser with your own C functions
+
+So you want to bypass the XML files parser, uh? Maybe doing some parameter
+sweep experiments on your simulations or so? This is possible, and
+it's not even really difficult (well. Such a brutal idea could be
+harder to implement). Here is how it goes.
+
+For this, you have to first remember that the XML parsing in SimGrid is done
+using a tool called FleXML. Given a DTD, this gives a flex-based parser. If
+you want to bypass the parser, you need to provide some code mimicking what
+it does and replacing it in its interactions with the SURF code. So, let's
+have a look at these interactions.
+
+FleXML parser are close to classical SAX parsers. It means that a
+well-formed SimGrid platform XML file might result in the following
+"events":
+
+  - start "platform_description" with attribute version="2"
+  - start "host" with attributes id="host1" power="1.0"
+  - end "host"
+  - start "host" with attributes id="host2" power="2.0"
+  - end "host"
+  - start "link" with ...
+  - end "link"
+  - start "route" with ...
+  - start "link_ctn" with ...
+  - end "link_ctn"
+  - end "route"
+  - end "platform_description"
+
+The communication from the parser to the SURF code uses two means:
+Attributes get copied into some global variables, and a surf-provided
+function gets called by the parser for each event. For example, the event
+  - start "host" with attributes id="host1" power="1.0"
+
+let the parser do something roughly equivalent to:
+\verbatim
+  strcpy(A_host_id,"host1");
+  A_host_power = 1.0;
+  STag_host();
+\endverbatim
+
+In SURF, we attach callbacks to the different events by initializing the
+pointer functions to some the right surf functions. Since there can be
+more than one callback attached to the same event (if more than one
+model is in use, for example), they are stored in a dynar. Example in
+workstation_ptask_L07.c:
+\verbatim
+  /* Adding callback functions */
+  surf_parse_reset_parser();
+  surfxml_add_callback(STag_surfxml_host_cb_list, &parse_cpu_init);
+  surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties);
+  surfxml_add_callback(STag_surfxml_link_cb_list, &parse_link_init);
+  surfxml_add_callback(STag_surfxml_route_cb_list, &parse_route_set_endpoints);
+  surfxml_add_callback(ETag_surfxml_link_c_ctn_cb_list, &parse_route_elem);
+  surfxml_add_callback(ETag_surfxml_route_cb_list, &parse_route_set_route);
+                
+  /* Parse the file */
+  surf_parse_open(file);
+  xbt_assert(!surf_parse(), "Parse error in %s", file);
+  surf_parse_close();
+\endverbatim
+    
+So, to bypass the FleXML parser, you need to write your own version of the
+surf_parse function, which should do the following:
+   - Fill the A_<tag>_<attribute> variables with the wanted values
+   - Call the corresponding STag_<tag>_fun function to simulate tag start
+   - Call the corresponding ETag_<tag>_fun function to simulate tag end
+   - (do the same for the next set of values, and loop)
+
+Then, tell SimGrid that you want to use your own "parser" instead of the stock one:
+\verbatim
+  surf_parse = surf_parse_bypass_environment;
+  MSG_create_environment(NULL);
+  surf_parse = surf_parse_bypass_application;
+  MSG_launch_application(NULL);
+\endverbatim
+
+A set of macros are provided at the end of
+include/surf/surfxml_parse.h to ease the writing of the bypass
+functions. An example of this trick is distributed in the file
+examples/msg/masterslave/masterslave_bypass.c
+
+\section faq_troubleshooting Troubleshooting
+
+\subsection faq_trouble_lib_compil SimGrid compilation and installation problems
+
+\subsubsection faq_trouble_lib_config cmake fails!
+
+We know only one reason for the configure to fail:
+
+ - <b>You are using a broken build environment</b>\n
+   If symptom is that the configury magic complains about gcc not being able to build
+   executables, you are probably missing the libc6-dev package. Damn Ubuntu.
+
+If you experience other kind of issue, please get in touch with us. We are
+always interested in improving our portability to new systems.
+
+\subsubsection faq_trouble_distcheck Dude! "ctest" fails on my machine!
+
+Don't assume we never run this target, because we do. Check
+http://cdash.inria.fr/CDash/index.php?project=Simgrid (click on
+previous if there is no result for today: results are produced only by
+11am, French time) and
+https://buildd.debian.org/status/logs.php?pkg=simgrid if you don't believe us. 
+
+If it's failing on your machine in a way not experienced by the
+autobuilders above, please drop us a mail on the mailing list so that
+we can check it out. Make sure to read \ref faq_bugrepport before you
+do so.
+
+\subsection faq_trouble_compil User code compilation problems
+
+\subsubsection faq_trouble_err_logcat "gcc: _simgrid_this_log_category_does_not_exist__??? undeclared (first use in this function)"
+
+This is because you are using the log mecanism, but you didn't created
+any default category in this file. You should refer to \ref XBT_log
+for all the details, but you simply forgot to call one of
+XBT_LOG_NEW_DEFAULT_CATEGORY() or XBT_LOG_NEW_DEFAULT_SUBCATEGORY().
+
+\subsubsection faq_trouble_pthreadstatic "gcc: undefined reference to pthread_key_create"
+
+This indicates that one of the library SimGrid depends on (libpthread
+here) was missing on the linking command line. Dependencies of
+libsimgrid are expressed directly in the dynamic library, so it's
+quite impossible that you see this message when doing dynamic linking. 
+
+If you compile your code statically (and if you use a pthread version
+of SimGrid -- see \ref faq_more_processes), you must absolutely
+specify <tt>-lpthread</tt> on the linker command line. As usual, this should
+come after <tt>-lsimgrid</tt> on this command line.
+
+\subsection faq_trouble_errors Runtime error messages
+
+\subsubsection faq_flexml_limit "surf_parse_lex: Assertion `next limit' failed."
+
+This is because your platform file is too big for the parser. 
+
+Actually, the message comes directly from FleXML, the technology on top of
+which the parser is built. FleXML has the bad idea of fetching the whole
+document in memory before parsing it. And moreover, the memory buffer size
+must be determined at compilation time.
+
+We use a value which seems big enough for our need without bloating the
+simulators footprints. But of course your mileage may vary. In this case,
+just edit src/surf/surfxml.l modify the definition of
+FLEXML_BUFFERSTACKSIZE. E.g.
+
+\verbatim
+#define FLEXML_BUFFERSTACKSIZE 1000000000
+\endverbatim
+
+Then recompile and everything should be fine, provided that your version of
+Flex is recent enough (>= 2.5.31). If not the compilation process should
+warn you.
+
+A while ago, we worked on FleXML to reduce a bit its memory consumption, but
+these issues remain. There is two things we should do:
+
+  - use a dynamic buffer instead of a static one so that the only limit
+    becomes your memory, not a stupid constant fixed at compilation time
+    (maybe not so difficult).
+  - change the parser so that it does not need to get the whole file in
+    memory before parsing
+    (seems quite difficult, but I'm a complete newbe wrt flex stuff).
+
+These are changes to FleXML itself, not SimGrid. But since we kinda hijacked
+the development of FleXML, I can grant you that any patches would be really
+welcome and quickly integrated.
+
+<b>Update:</b> A new version of FleXML (1.7) was released. Most of the work
+was done by William Dowling, who use it in his own work. The good point is
+that it now use a dynamic buffer, and that the memory usage was greatly
+improved. The downside is that William also changed some things internally,
+and it breaks the hack we devised to bypass the parser, as explained in 
+\ref faq_flexml_bypassing. Indeed, this is not a classical usage of the
+parser, and Will didn't imagine that we may have used (and even documented)
+such a crude usage of FleXML. So, we now have to repair the bypassing
+functionality to use the lastest FleXML version and fix the memory usage in
+SimGrid.
+
+\subsubsection faq_trouble_gras_transport GRAS spits networking error messages
+
+Gras, on real platforms, naturally use regular sockets to communicate. They
+are deeply hidden in the gras abstraction, but when&nb