瀏覽代碼

Merge branch 'master' of https://tree.clementinecomputing.com/clementinecomputing/popufare

clementinecomputing 6 年之前
父節點
當前提交
0adad14a5f

+ 6 - 1
aux/create-test-paddle

@@ -17,12 +17,17 @@ print "# Paddle", paddle, "(testing)"
 print "# coodinates in concatinated degree/decimal minute format (dmmc)"
 print "#", "\t".join(["hour", "minute", "latitude", "longitude", "route", "trip", "stop", "name"])
 
+even_odd = 0
+base_route = 1000
+
 idx=0
 for hour in range(24):
   for minute in range(0,60,10):
     trip = int(minute/10) + 1
+    route = int(base_route + (even_odd*10))
+    even_odd = 1 - even_odd
     for stop in range(1,4):
-      v = [str(hour), str(minute+stop), str(dmmc_coord[idx][0]), str(dmmc_coord[idx][1]), str(paddle), str(trip), str(stop), dmmc_name[idx]]
+      v = [str(hour), str(minute+stop), str(dmmc_coord[idx][0]), str(dmmc_coord[idx][1]), str(route), str(trip), str(stop), dmmc_name[idx]]
       print "\t".join(v)
       idx = (idx + 1) % len(dmmc_coord)
 

+ 1 - 1
busunit/client_modules.list

@@ -3,6 +3,6 @@ billdb
 passdb
 avls
 PIU
-DIU
+DIUv2
 paddlemgr
 client_supervisor

+ 154 - 151
busunit/common/common_config.h

@@ -18,34 +18,34 @@
  *
  */
 
-#ifndef	_COMMON_CFG
+#ifndef  _COMMON_CFG
 #define _COMMON_CFG
 
 //-----------------------------------------------------------------
 //------------------------ OPERATIONAL THRESHOLDS AND MAGIC STRINGS
 //-----------------------------------------------------------------
 
-#define MOTION_THRESHOLD	(0.5f)		//we're moving if our velocity exceeds 0.5 m/sec
+#define MOTION_THRESHOLD  (0.5f)    //we're moving if our velocity exceeds 0.5 m/sec
 
-#define ROLLOVER_TIME_WINDOW	(10 * 60)	//We count a stop as an option to roll over to if we're within +/- ROLLOVER_TIME_WINDOW seconds
+#define ROLLOVER_TIME_WINDOW  (10 * 60)  //We count a stop as an option to roll over to if we're within +/- ROLLOVER_TIME_WINDOW seconds
 
-#define ROLLOVER_DISTANCE	(60.0f)		//We count a stop as an option to roll over to if we are also within ROLLOVER_DISTANCE meters of its GPS location
+#define ROLLOVER_DISTANCE  (60.0f)    //We count a stop as an option to roll over to if we are also within ROLLOVER_DISTANCE meters of its GPS location
 
-#define MIN_SATS_FOR_TIME	(3)		//We are willing to set the system clock if we have at least this many GPS satellites in view
+#define MIN_SATS_FOR_TIME  (3)    //We are willing to set the system clock if we have at least this many GPS satellites in view
 
-#define MAX_GPS_CLOCK_DRIFT	(10)		//  We insist in setting the system clock if it has drifted from GPS time by more than 
+#define MAX_GPS_CLOCK_DRIFT  (10)    //  We insist in setting the system clock if it has drifted from GPS time by more than 
                                                 //MAX_GPS_CLOCK_DRIFT seconds (provided we have at least MIN_SATS_FOR_TIME satellites in view).
 
-#define GPS_DATE_CENTURY	(2000)		//  For fuck's sake, NMEA GPS dates are not Y2K compliant and use only two digits.  We 
+#define GPS_DATE_CENTURY  (2000)    //  For fuck's sake, NMEA GPS dates are not Y2K compliant and use only two digits.  We 
                                                 //must assume a century, we'll assume it is the 21st century.
 
-#define GPS_STALE_THRESHOLD	(5)		//If we go five seconds without a GPS update we consider our GPS signal kaput.
+#define GPS_STALE_THRESHOLD  (5)    //If we go five seconds without a GPS update we consider our GPS signal kaput.
 
-#define CLEAR_GPS_ON_STALE			//Define this if we want to clear all GPS values when we make a valid --> stale transition.
+#define CLEAR_GPS_ON_STALE      //Define this if we want to clear all GPS values when we make a valid --> stale transition.
 
-#define ROLLOVER_FORWARD_ONLY			//Define this if you want to prevent rollover to a lesser or equal paddle stop
+#define ROLLOVER_FORWARD_ONLY      //Define this if you want to prevent rollover to a lesser or equal paddle stop
 
-#define ROLLOVER_TO_FURTHEST_STOP		//  Define this if you want the rollover keep hunting after the first match to
+#define ROLLOVER_TO_FURTHEST_STOP    //  Define this if you want the rollover keep hunting after the first match to
                                                 //find the LAST stop in the paddle which meets the time and location criteria.
                                                 //this is desirable if you have a route change where a bus arrives at a stop as
                                                 //one route and turns into another at that stop and you want this corner case to
@@ -58,7 +58,7 @@
 //    This makes the passdb module reject a card offhand (but not put it in the billing log)
 //if there is no driver logged in.  This will also cause the driver's console to beep a reject beep
 //which will serve as a reminder to log in...
-//#define REJECT_IF_NO_DRIVER			
+//#define REJECT_IF_NO_DRIVER      
                                                     
 //    This define makes the passdb module's rule engine enter a debugging mode for the NEXT call of a rule which
 //asserted scheme_error during its last execution.  This debugging mode generates quite verbose debug information (pages)
@@ -73,81 +73,81 @@
 #define TRACE_RULE_CALL_TO_FILE
 
 
-#define MAGIC_DRIVER_NAME	"AdminMode"	//A magic string that appears as the driver name for the driver login that goes to admin mode
-#define MACIC_DRIVER_MENU	"admin"		//The name of the menu to go to when this driver logs in
+#define MAGIC_DRIVER_NAME  "AdminMode"  //A magic string that appears as the driver name for the driver login that goes to admin mode
+#define MACIC_DRIVER_MENU  "admin"    //The name of the menu to go to when this driver logs in
 
-#define PASSENGER_MESSAGE_DURATION	(5)	//How long to leave passenger messages up on the PIU display line 2
+#define PASSENGER_MESSAGE_DURATION  (5)  //How long to leave passenger messages up on the PIU display line 2
 
-#define PIU_DEVICE_ID	"rider_ui"	//Device ID returned in the "/?:" line from the PIU
-#define DIU_DEVICE_ID	"driver_ui"	//Device ID returned in the "/?:" line from the DIU
+#define PIU_DEVICE_ID  "rider_ui"  //Device ID returned in the "/?:" line from the PIU
+#define DIU_DEVICE_ID  "driver_ui"  //Device ID returned in the "/?:" line from the DIU
 
-#define ACCUM_SECONDS	(1)		//Number of seconds to wait for an EOL from a serial port
+#define ACCUM_SECONDS  (1)    //Number of seconds to wait for an EOL from a serial port
                                         //before declaring the line ended (see notes on open_rs232_device()
                                         //in common_defs.h for more details).
 
-#define DEVICE_TEST_TRIES	(3)	//How many times to try asking what a connected device is...
-#define DEVICE_TEST_TIMEOUT	(5000)	//How long to wait for a device ID line (in milliseconds) after sending a "\r" for each try
+#define DEVICE_TEST_TRIES  (3)  //How many times to try asking what a connected device is...
+#define DEVICE_TEST_TIMEOUT  (5000)  //How long to wait for a device ID line (in milliseconds) after sending a "\r" for each try
 
-#define MAX_EQUIPNUM		(9999)	//What is the largest allowable equipment number...
+#define MAX_EQUIPNUM    (9999)  //What is the largest allowable equipment number...
 
 //#define BEEP_WITH_MAGSTRIPE_READER
 
 #ifdef BEEP_WITH_MAGSTRIPE_READER
-	//These are used for the beeping that the driver user interface performs:
-	#define PIU_ACK_BEEP(fd)	if((fd)>=0){write(fd, "/m:7A\r", 6);}
-	#define PIU_ERROR_BEEP(fd)	if((fd)>=0){write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);}
-	#define PIU_CRITICAL_BEEP(fd)	if((fd)>=0){write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);}
+  //These are used for the beeping that the driver user interface performs:
+  #define PIU_ACK_BEEP(fd)  if((fd)>=0){write(fd, "/m:7A\r", 6);}
+  #define PIU_ERROR_BEEP(fd)  if((fd)>=0){write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);}
+  #define PIU_CRITICAL_BEEP(fd)  if((fd)>=0){write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);write(fd, "/m:5A\r", 6); usleep(500000); write(fd, "/m:5A\r", 6);}
 
-	//These are used for the beeping that the driver user interface performs:
-	#define DIU_BUTTON_BEEP(fd)	if((fd)>=0){beep((fd), 440, 25);}
-	#define DIU_ACK_BEEP(fd)	if((fd)>=0){}
-	#define DIU_ERROR_BEEP(fd)	if((fd)>=0){}
-	#define DIU_CRITICAL_BEEP(fd)	if((fd)>=0){}
+  //These are used for the beeping that the driver user interface performs:
+  #define DIU_BUTTON_BEEP(fd)  if((fd)>=0){beep((fd), 440, 25);}
+  #define DIU_ACK_BEEP(fd)  if((fd)>=0){}
+  #define DIU_ERROR_BEEP(fd)  if((fd)>=0){}
+  #define DIU_CRITICAL_BEEP(fd)  if((fd)>=0){}
 
 #else
-	//These are used for the beeping that the driver user interface performs:
-	#define DIU_BUTTON_BEEP(fd)	if((fd)>=0){beep((fd), 0xA50, 25);}
-	#define DIU_ACK_BEEP(fd)	if((fd)>=0){beep((fd), 0xA50, 75);}
-	#define DIU_ERROR_BEEP(fd)	if((fd)>=0){beep((fd), 0xDC0, 250); beep((fd), 0, 50); beep((fd), 0xDC0, 250);}
-	#define DIU_CRITICAL_BEEP(fd)	if((fd)>=0){beep((fd), 0xDC0, 1000); beep((fd), 0, 50); beep((fd), 0xDC0, 1000);}
+  //These are used for the beeping that the driver user interface performs:
+  #define DIU_BUTTON_BEEP(fd)  if((fd)>=0){beep((fd), 0xA50, 25);}
+  #define DIU_ACK_BEEP(fd)  if((fd)>=0){beep((fd), 0xA50, 75);}
+  #define DIU_ERROR_BEEP(fd)  if((fd)>=0){beep((fd), 0xDC0, 250); beep((fd), 0, 50); beep((fd), 0xDC0, 250);}
+  #define DIU_CRITICAL_BEEP(fd)  if((fd)>=0){beep((fd), 0xDC0, 1000); beep((fd), 0, 50); beep((fd), 0xDC0, 1000);}
 #endif
 
 //This is the threshold of time between duplicate driver notifies before which the beep will be supressed
 //(so that bulk-accepting 15 interline fares won't result in an enormous string of accept beeps for instance)
-#define DUP_USEC_BEEP_THRESHOLD		(500000)	// 5/10th of a second
+#define DUP_USEC_BEEP_THRESHOLD    (500000)  // 5/10th of a second
 
 
 //This is the maximum number of times we'll be willing to 
 //catch a SIGINT, SIGTERM, or IPC message exit request before forcing an exit
-#define MAX_POLITE_EXIT_REQUESTS	(2)
+#define MAX_POLITE_EXIT_REQUESTS  (2)
 
-#define APB_ROW_EXPIRE		(30 * 60)	//Expire a passback entry in 30 minutes if it is still in the cache
-#define APB_DIST_EXPIRE		(100.0f)	//Expire the whole passback cache if the bus has moved at least APB_DIST_EXPIRE meters since the last accept
+#define APB_ROW_EXPIRE    (30 * 60)  //Expire a passback entry in 30 minutes if it is still in the cache
+#define APB_DIST_EXPIRE    (100.0f)  //Expire the whole passback cache if the bus has moved at least APB_DIST_EXPIRE meters since the last accept
 
-#define POLL_TIMEOUT		(1000)		//How many milliseconds to wait each time through the poll loop of each module
-#define DEFAULT_CONNECT_RETRY	(60)		//How many seconds to wait before attempting to reconnect to a forwarded port
+#define POLL_TIMEOUT    (1000)    //How many milliseconds to wait each time through the poll loop of each module
+#define DEFAULT_CONNECT_RETRY  (60)    //How many seconds to wait before attempting to reconnect to a forwarded port
 
 #define DEFAULT_BILL_SYNC_RETRY (1 * 60)        //How many seconds before reinitiating data transfer to billing server for any given log entry
 
-#define DEFAULT_PASS_SYNC_RETRY (2 * 60)	//How many seconds before re-querying the buspass server for updates
+#define DEFAULT_PASS_SYNC_RETRY (2 * 60)  //How many seconds before re-querying the buspass server for updates
 
-#define	AVLS_MOTION_INTERVAL	(2 * 60)	//How often to send AVLS chirps when in motion (in seconds) (default, see config)
-#define AVLS_STILL_INTERVAL	(60 * 60)	//How often to send AVLS chirps when still (in seconds)	(default, see config)
+#define  AVLS_MOTION_INTERVAL  (2 * 60)  //How often to send AVLS chirps when in motion (in seconds) (default, see config)
+#define AVLS_STILL_INTERVAL  (60 * 60)  //How often to send AVLS chirps when still (in seconds)  (default, see config)
 
-#define HUB_RETRY_TIME		(3)		//Number of seconds between connection retries if the IPC hub cannot be found.
+#define HUB_RETRY_TIME    (3)    //Number of seconds between connection retries if the IPC hub cannot be found.
 
-#define PADDLE_REQ_TIMEOUT	(15)		//How long to wait for a paddle request to time out.
+#define PADDLE_REQ_TIMEOUT  (15)    //How long to wait for a paddle request to time out.
 
-#define ALPHA_MAX	((unsigned) 255)	//Alpha value representing 100% opaque
-#define ALPHA_DRK	((unsigned) 192)	//Alpha value for dark blendovers
-#define ALPHA_LGT	((unsigned) 128)	//Alpha value for light blendovers
+#define ALPHA_MAX  ((unsigned) 255)  //Alpha value representing 100% opaque
+#define ALPHA_DRK  ((unsigned) 192)  //Alpha value for dark blendovers
+#define ALPHA_LGT  ((unsigned) 128)  //Alpha value for light blendovers
 
-#define SHADOW_OFFSET_UP	(5)		//How many pixels to offset the shadow under a unpressed button.
-#define SHADOW_OFFSET_DOWN	(2)		//How many pixels to offset the shadow under a pressed button.
+#define SHADOW_OFFSET_UP  (5)    //How many pixels to offset the shadow under a unpressed button.
+#define SHADOW_OFFSET_DOWN  (2)    //How many pixels to offset the shadow under a pressed button.
 
-#define TS_CALIB_HOLD_TIME	(15)		//How long the user has to hold down the touchscreen to initiate a calibration
+#define TS_CALIB_HOLD_TIME  (15)    //How long the user has to hold down the touchscreen to initiate a calibration
 
-#define SHELLCALL_VAR_ESC	('~')		//What character brackets variable expansion in shellcall actions
+#define SHELLCALL_VAR_ESC  ('~')    //What character brackets variable expansion in shellcall actions
 
 //-----------------------------------------------------------------
 //------------------------ CONFIGURATION FLAGS
@@ -156,7 +156,7 @@
 //if USE_WATCHDOG_ALARM is defined, the individual modules will
 //use a SIGALRM handler as a watchdog timer.
 
-#define USE_WATCHDOG_ALARM		
+#define USE_WATCHDOG_ALARM    
 
 
 //Define ALLOW_CREDENTIAL_COLLISIONS if you want to allow duplicate credential entries to exist.
@@ -191,39 +191,39 @@
 #ifdef USE_WATCHDOG_ALARM
   //How many seconds can a module go without running through its main 
   //loop (and resetting its watchdog) before it kills itself 
-  #define MODULE_WATCHDOG_VALUE	(60)	
+  #define MODULE_WATCHDOG_VALUE  (60)  
 #endif
 
 
-//	Uncomment this definition if you want to directly write to the frame buffer rather than
+//  Uncomment this definition if you want to directly write to the frame buffer rather than
 //having the UI engine batch changes and present them synchronously when present_framebuffer() is called.
-//	This method saves the RAM taken by a shadow frame buffer at the expense of some perceived display 
+//  This method saves the RAM taken by a shadow frame buffer at the expense of some perceived display 
 //flicker as the framebuffer will often contain (and display) partially drawn widgets for a frame while the
 //UI engine is busy drawing the rest of them.  This method is also slower for read-modify-write type framebuffer
 //operations since the framebuffer is marked non-cacheable so that the DMA controller that scans the framebuffer
 //will always see changes that occur.
 
-//#define FRAMEBUFFER_NO_SOFTWARE_BACKBUFFER	
+//#define FRAMEBUFFER_NO_SOFTWARE_BACKBUFFER  
 
 #ifndef FRAMEBUFFER_NO_SOFTWARE_BACKBUFFER
   #define FRAMEBUFFER_SOFTWARE_BACKBUFFER
 #endif
 
 
-//#define USE_REMOTE_UI	
+//#define USE_REMOTE_UI  
 
 #ifdef USE_REMOTE_UI
 
-  #define FB_SHADOW_TMP		"/tmp/fb_shadow.tmp"
-  #define FB_SHADOW_FILE	"/tmp/fb_shadow"
+  #define FB_SHADOW_TMP    "/tmp/fb_shadow.tmp"
+  #define FB_SHADOW_FILE  "/tmp/fb_shadow"
 
 #endif
 
 
-//	Uncomment this if you want the application to return the video framebuffer's colormap
+//  Uncomment this if you want the application to return the video framebuffer's colormap
 //to the state it was in then the application launched (If we need to be compatible with other 
 //3rd party framebuffer applications that expect a standard VGA palette for instance) after it exits.
-//	Mostly, we are going to run another instance of ourselves, or one of the showmessage programs
+//  Mostly, we are going to run another instance of ourselves, or one of the showmessage programs
 //so there is no harm in keeping the palette the way we like it and it prevents flicker and user
 //confusion.  So, yeah, really, don't uncomment FRAMEBUFFER_RESTORE_PALETTE unless you really mean it.
 
@@ -262,7 +262,7 @@
 
 //If COMMHUB_O_NONBLOCK is defined, the IPC hub will maintain all of its clients in 
 //nonblocking mode and cut anybody loose who doesn't respond.
-#define COMMHUB_O_NONBLOCK	
+#define COMMHUB_O_NONBLOCK  
 
 
 //If TOUCHSCREEN_QUIET is defined we request the touchscreen not send data between making a UI change and flushing it to
@@ -279,11 +279,11 @@
 //done by those buses until somebody can go fix their wiring...
 
 //how many DIU error messages to accept before rate-limiting
-#define DIU_ERROR_BURST_LIMIT	(5)		
+#define DIU_ERROR_BURST_LIMIT  (5)    
 
 //number of seconds before allowing another DIU error message to be logged
 //after exhausting the number allotted by DIU_ERROR_BURST_LIMIT
-#define DIU_ERROR_RATE_LIMIT	(120)		
+#define DIU_ERROR_RATE_LIMIT  (120)    
 
 
 //----------------------------------------------------------------
@@ -295,85 +295,88 @@
 
 //Configuration File Paths
 #ifdef TARGET_DEVEL_DESKTOP
-    #define CONFIG_FILE_PATH	"./"
+    //#define CONFIG_FILE_PATH  "./"
+    #define CONFIG_FILE_PATH  "/home/bus/config/"
 #else
-    #define CONFIG_FILE_PATH	"/mnt/data2/config/"
+    #define CONFIG_FILE_PATH  "/mnt/data2/config/"
 #endif
 
 //Database File Paths
 #ifdef TARGET_DEVEL_DESKTOP
-    #define DATABASE_FILE_PATH	"./"
+    //#define DATABASE_FILE_PATH  "./"
+    #define DATABASE_FILE_PATH  "/home/bus/database/"
 #else
-    #define DATABASE_FILE_PATH	"/mnt/data2/database/"
+    #define DATABASE_FILE_PATH  "/mnt/data2/database/"
 #endif
 
 //Executable File Paths
 #ifdef TARGET_DEVEL_DESKTOP
-    #define EXECUTABLE_FILE_PATH	"./"
+    //#define EXECUTABLE_FILE_PATH  "./"
+    #define EXECUTABLE_FILE_PATH  "/home/bus/bin/"
 #else
-    #define EXECUTABLE_FILE_PATH	"/mnt/data2/bin/"
+    #define EXECUTABLE_FILE_PATH  "/mnt/data2/bin/"
 #endif
 
 
 //Local database files
-#define	BILLING_FILE		(DATABASE_FILE_PATH "billing.mem")
-#define PASSES_FILE		(DATABASE_FILE_PATH "passes.mem")
+#define BILLING_FILE   (DATABASE_FILE_PATH "billing.mem")
+#define PASSES_FILE    (DATABASE_FILE_PATH "passes.mem")
 
 //Local configuration files
-#define DRIVER_MENU_FILE	(CONFIG_FILE_PATH "menu.xml")
-#define DRIVERS_FILE		(CONFIG_FILE_PATH "drivers.txt")
-#define SCHEME_INIT_FILE	(CONFIG_FILE_PATH "init.scm")
-#define RULES_FILE		(CONFIG_FILE_PATH "rules.scm")
-#define EQUIPNUM_FILE		(CONFIG_FILE_PATH "equipnum.txt")
-#define EQUIPNUM_TEMPFILE	(CONFIG_FILE_PATH "equipnum.tmp")
-#define RFID_PATTERN_FILE	(CONFIG_FILE_PATH "rfid_patterns.txt")
+#define DRIVER_MENU_FILE  (CONFIG_FILE_PATH "menu.xml")
+#define DRIVERS_FILE    (CONFIG_FILE_PATH "drivers.txt")
+#define SCHEME_INIT_FILE  (CONFIG_FILE_PATH "init.scm")
+#define RULES_FILE    (CONFIG_FILE_PATH "rules.scm")
+#define EQUIPNUM_FILE    (CONFIG_FILE_PATH "equipnum.txt")
+#define EQUIPNUM_TEMPFILE  (CONFIG_FILE_PATH "equipnum.tmp")
+#define RFID_PATTERN_FILE  (CONFIG_FILE_PATH "rfid_patterns.txt")
 #define TOUCHSCREEN_CALIB_FILE  (CONFIG_FILE_PATH "touchscreen_calib.txt")
-#define AVLS_CONFIG_FILE	(CONFIG_FILE_PATH "avls_freq.txt")
+#define AVLS_CONFIG_FILE  (CONFIG_FILE_PATH "avls_freq.txt")
 
-#define SERVER_LIST_FILE  	(CONFIG_FILE_PATH "server/server_list")
-#define SERVER_DESC_FILE  	(CONFIG_FILE_PATH "server/server_desc")
+#define SERVER_LIST_FILE    (CONFIG_FILE_PATH "server/server_list")
+#define SERVER_DESC_FILE    (CONFIG_FILE_PATH "server/server_desc")
 
 //Network status notification files
-#define TUNNEL_DROPFILE		"/tmp/tunnel-is-up"
-#define GPRS_DROPFILE		"/tmp/network-is-up"
+#define TUNNEL_DROPFILE    "/tmp/tunnel-is-up"
+#define GPRS_DROPFILE    "/tmp/network-is-up"
 
 //Serial port mapping
 #ifdef TARGET_DEVEL_DESKTOP
     //TARGET_DEVEL_DESKTOP is an x86 Linux box w/ a multiport serial board
-    //#define CONSOLE_PORT	"/dev/tty81a"
-    //#define DRIVER_UI_PORT	"/dev/tty81b"
-    //#define PASSENGER_UI_PORT	"/dev/tty81c"
-    //#define MODEM_PORT		"/dev/tty81d"
+    //#define CONSOLE_PORT  "/dev/tty81a"
+    //#define DRIVER_UI_PORT  "/dev/tty81b"
+    //#define PASSENGER_UI_PORT  "/dev/tty81c"
+    //#define MODEM_PORT    "/dev/tty81d"
 
-    #define CONSOLE_PORT	"/dev/ttyCONSOLE"
-    //#define DRIVER_UI_PORT	"/dev/ttyDIU"
-    #define DRIVER_UI_PORT	"/tmp/ttyDIU"
-    #define PASSENGER_UI_PORT	"/dev/ttyPIU"
-    #define MODEM_PORT		"/dev/ttyGPRS"
+    #define CONSOLE_PORT  "/dev/ttyCONSOLE"
+    //#define DRIVER_UI_PORT  "/dev/ttyDIU"
+    #define DRIVER_UI_PORT  "/tmp/ttyDIU"
+    #define PASSENGER_UI_PORT  "/dev/ttyPIU"
+    #define MODEM_PORT    "/dev/ttyGPRS"
 
 #else
     //The real target is an ARM Linux box with real serial ports at the expected locations
-    #define CONSOLE_PORT	"/dev/ttyS0"
-    #define DRIVER_UI_PORT	"/dev/ttyS1"
-    #define PASSENGER_UI_PORT	"/dev/ttyS2"
-    #define MODEM_PORT		"/dev/ttyS3"
+    #define CONSOLE_PORT  "/dev/ttyS0"
+    #define DRIVER_UI_PORT  "/dev/ttyS1"
+    #define PASSENGER_UI_PORT  "/dev/ttyS2"
+    #define MODEM_PORT    "/dev/ttyS3"
 #endif
 
 //Network protocol ports
-#define PASS_SERVER_IP		"127.0.0.1"
-#define PASS_SERVER_PORT	(7277)
+#define PASS_SERVER_IP    "127.0.0.1"
+#define PASS_SERVER_PORT  (7277)
 
-#define BILL_SERVER_IP		"127.0.0.1"
-#define BILL_SERVER_PORT	(2455)
+#define BILL_SERVER_IP    "127.0.0.1"
+#define BILL_SERVER_PORT  (2455)
 
-#define AVLS_SERVER_IP		"127.0.0.1"
-#define AVLS_SERVER_PORT	(2857)
+#define AVLS_SERVER_IP    "127.0.0.1"
+#define AVLS_SERVER_PORT  (2857)
 
-#define HELLO_SERVER_IP		"127.0.0.1"
-#define HELLO_SERVER_PORT	(3556)
+#define HELLO_SERVER_IP    "127.0.0.1"
+#define HELLO_SERVER_PORT  (3556)
 
 //Framebuffer location:
-#define CONFIG_FRAMEBUFFER_PATH	"/dev/fb0"
+#define CONFIG_FRAMEBUFFER_PATH  "/dev/fb0"
 
 //----------------------------------------------------------------
 //------------------------ DATA SIZE CONFIGURATION VALUES
@@ -384,53 +387,53 @@
 //Any sadistic bastard who writes config file lines longer than 1KB (that would be 
 //half a screen-full to the character on a standard 80x25 text screen!) deserves some
 //rude truncation.
-#define LINE_BUFFER_SIZE	(1024)
+#define LINE_BUFFER_SIZE  (1024)
 
 //This is the hardware page size for the mmap()'d data files:
-#define	MEMORY_PAGE_SIZE	(4096)		
+#define  MEMORY_PAGE_SIZE  (4096)    
 
 //This is the maximum size of a command line that can be assembled by the driver UI menu system using the <shellcall/> action.
-#define SHELLCALL_BUFFER_SIZE	(2048)
+#define SHELLCALL_BUFFER_SIZE  (2048)
 
 //This defines the expected size of the pass database and its RAM based index tables:
 
-//#define NUM_STORED_PASSES	(131072)	//A nice round number that multiplies by sizeof(rider_record) to a page boundary
-//#define STORED_PASS_HASH	(131101)	//A prime number larger than NUM_STORED_PASSES
+//#define NUM_STORED_PASSES  (131072)  //A nice round number that multiplies by sizeof(rider_record) to a page boundary
+//#define STORED_PASS_HASH  (131101)  //A prime number larger than NUM_STORED_PASSES
 
-#define NUM_STORED_PASSES	(262144)	//A nice round number that multiplies by sizeof(rider_record) to a page boundary
-#define STORED_PASS_HASH	(262147)	//A prime number larger than NUM_STORED_PASSES
+#define NUM_STORED_PASSES  (262144)  //A nice round number that multiplies by sizeof(rider_record) to a page boundary
+#define STORED_PASS_HASH  (262147)  //A prime number larger than NUM_STORED_PASSES
 
-//#define NUM_STORED_PASSES	(1048576)	//A nice round number that multiplies by sizeof(rider_record) to a page boundary
-//#define STORED_PASS_HASH	(1048583)	//A prime number larger than NUM_STORED_PASSES
+//#define NUM_STORED_PASSES  (1048576)  //A nice round number that multiplies by sizeof(rider_record) to a page boundary
+//#define STORED_PASS_HASH  (1048583)  //A prime number larger than NUM_STORED_PASSES
 
 //This defines the expected size of the billing cache:
 
-#define NUM_BILLING_ENTRIES	(2048)		//A nice round number that multiplies by sizeof(billing_record)
+#define NUM_BILLING_ENTRIES  (2048)    //A nice round number that multiplies by sizeof(billing_record)
                                                 //to be an integer number of MMU pages (for the benefit of efficient and
                                                 //transaction safe msync() calls.
 
-//	Thresholds for high-water-mark warnings on the billing log.  These cause the system to warn the driver
+//  Thresholds for high-water-mark warnings on the billing log.  These cause the system to warn the driver
 //when there are fewer than X free entries in the billing log file.  A prolonged time without connectiviry to
 //the billing log server where rows can be offloaded from the local cache to the main database is usually the
 //underlying cause of this condition.  The goal here is to issue frequent and annoying warnings to the driver
 //when the situation has gotten dangeriously bad such that they will call dispatch and the bus will be serviced.
 //
 
-#define BILLING_HIGH_THRESHOLD		(NUM_BILLING_ENTRIES / 2)	//Warn the driver at the half-way mark
-#define BILLING_CRITICAL_THRESHOLD	(NUM_BILLING_ENTRIES / 4)	//at 3/4 full, start really bitching about it
+#define BILLING_HIGH_THRESHOLD    (NUM_BILLING_ENTRIES / 2)  //Warn the driver at the half-way mark
+#define BILLING_CRITICAL_THRESHOLD  (NUM_BILLING_ENTRIES / 4)  //at 3/4 full, start really bitching about it
 
-#define BILLING_HIGH_FREQUENCY		(60 * 15)			//Warn every fifteen minutes after the half-way mark
-#define BILLING_CRITICAL_FREQUENCY	(60 * 5)			//Warn every 5 minutes at the 3/4 mark
+#define BILLING_HIGH_FREQUENCY    (60 * 15)      //Warn every fifteen minutes after the half-way mark
+#define BILLING_CRITICAL_FREQUENCY  (60 * 5)      //Warn every 5 minutes at the 3/4 mark
 
-#define REJECT_DIAG_DEBUG_THRESHOLD	(BILLING_HIGH_THRESHOLD)	//Reject diagnostic debug messages when log space is more than half full
-#define REJECT_DIAG_WARN_THRESHOLD	(BILLING_CRITICAL_THRESHOLD)	//Reject diagnostic warning messages when log space is more than 3/4 full
-#define REJECT_DIAG_ERROR_THRESHOLD	(BILLING_CRITICAL_THRESHOLD) 	//Reject diagnostic critical messages when log space is more than 3/4 full
+#define REJECT_DIAG_DEBUG_THRESHOLD  (BILLING_HIGH_THRESHOLD)  //Reject diagnostic debug messages when log space is more than half full
+#define REJECT_DIAG_WARN_THRESHOLD  (BILLING_CRITICAL_THRESHOLD)  //Reject diagnostic warning messages when log space is more than 3/4 full
+#define REJECT_DIAG_ERROR_THRESHOLD  (BILLING_CRITICAL_THRESHOLD)   //Reject diagnostic critical messages when log space is more than 3/4 full
 
 //This defines the size of the anti-passback-cache
-#define APB_CACHE_SIZE		(128)
+#define APB_CACHE_SIZE    (128)
 
 //This defines the maximum number of stops in a paddle
-#define MAX_PADDLE_SIZE		(1024)
+#define MAX_PADDLE_SIZE    (1024)
 
 //  This constant defines how deep down the rabbit hole of nested XML tags we will allow our parser to traverse when reading
 //a menu.xml file defining the behavior of the driver facing user interface.  This is NOT how deep the user-facing menu tree
@@ -438,18 +441,18 @@
 //very well may need to be a runtime value that is dynamically allocated after the UI engine analizes the contents of the XML
 //tree.  Alternately, if memory is not too tight, a double-the-reasonable-max type engineering tolerance estimate could produce
 //a statically allocated menu execution tree and thus reduce memory fragmentation and heap thrash.
-#define MENU_STACK_DEPTH	(32)
+#define MENU_STACK_DEPTH  (32)
 
 
 //  This is the size of the buffer used to load the menu.xml file.  It doesn't have to fit the whole file,
 //it just determines how many times we have to go back to the "disk" to fetch and parse the whole file.
 //4K seems like a reasonable block size.
-#define XML_CHUNK_SIZE		(4096)
+#define XML_CHUNK_SIZE    (4096)
 
 //  This is the maximum length of actuall DIU display messages
-#define DIU_MESSAGE_CHARS	(80)
+#define DIU_MESSAGE_CHARS  (80)
 //  This is how many lines to maintain
-#define DIU_MESSAGE_LINES	(25)
+#define DIU_MESSAGE_LINES  (25)
 
 //  This is the number of Raw->site:id mapping schemes supported for RFID decoding
 #define NUM_RFID_PATTERNS       (64)
@@ -462,29 +465,29 @@
 //The superviser checks for this module to be alive and preferentially
 //routes error messages there if it is present and alive, otherwise
 //they get routed to syslog.
-#define SUPERVISOR_SPECIAL_BILLDB		"billdb"
+#define SUPERVISOR_SPECIAL_BILLDB    "billdb"
 
 //The maximum number of modules that may be monitored by the supervisor
-#define SUPERVISOR_MAX_MODULES			(32)
+#define SUPERVISOR_MAX_MODULES      (32)
 
 //    If a spawned process lasts less than SUPERVISOR_RESPAWN_DELAY_THRESHOLD
 //seconds, we want to delay SUPERVISOR_RESPAWN_RATE_LIMIT seconds to avoid driving
 //load too high by thrashing a process that is doomed to fail.
-#define SUPERVISOR_RESPAWN_DELAY_THRESHOLD	(15)
-#define SUPERVISOR_RESPAWN_RATE_LIMIT		(30)
+#define SUPERVISOR_RESPAWN_DELAY_THRESHOLD  (15)
+#define SUPERVISOR_RESPAWN_RATE_LIMIT    (30)
 
 //    The supervisor process will refrain from spawning ANYTHING within
 //SUPERVISOR_GLOBAL_SPAWN_RATE_LIMIT seconds of the last spawn to prevent
 //thrashing the system and driving load too high by trying to start everything
 //all at once.
-#define SUPERVISOR_GLOBAL_SPAWN_RATE_LIMIT	(1)
+#define SUPERVISOR_GLOBAL_SPAWN_RATE_LIMIT  (1)
 
 
-//	These are some useful general math widgets so we don't keep repeating 
+//  These are some useful general math widgets so we don't keep repeating 
 //ourselves, and if we (god forbid) need to adjust the number of microseconds in
 //a second due to the evil decree of some mad scientist...
-#define SEC_TO_USEC(x)	((x) * 1000000)
-#define USEC_TO_SEC(x)	((x) / 1000000)
+#define SEC_TO_USEC(x)  ((x) * 1000000)
+#define USEC_TO_SEC(x)  ((x) / 1000000)
 
 //    The supervisor process will sent a message to MAILBOX_PING every 
 //SUPERVISOR_PING_INTERVAL microseconds.  If any module fails to respond
@@ -493,22 +496,22 @@
 //will be issued a SIGTERM, and if it again fails to respond within 
 //SUPERVISOR_PING_KILL_TIME it will be issued a SIGKILL.  If a PONG comes in
 //at any point, further abuse of the child module will stop.
-#define SUPERVISOR_PING_INTERVAL		SEC_TO_USEC(30)
-#define SUPERVISOR_PING_WARN_TIME		SEC_TO_USEC(60)
-#define SUPERVISOR_PING_TERM_TIME		SEC_TO_USEC(120)
-#define SUPERVISOR_PING_KILL_TIME		SEC_TO_USEC(180)
+#define SUPERVISOR_PING_INTERVAL    SEC_TO_USEC(30)
+#define SUPERVISOR_PING_WARN_TIME    SEC_TO_USEC(60)
+#define SUPERVISOR_PING_TERM_TIME    SEC_TO_USEC(120)
+#define SUPERVISOR_PING_KILL_TIME    SEC_TO_USEC(180)
 
 //How often to check system health parameters
-#define SUPERVISOR_SYSTEM_STAT_INTERVAL		(60)		
+#define SUPERVISOR_SYSTEM_STAT_INTERVAL    (60)    
 
 #ifdef TARGET_DEVEL_DESKTOP
-    #define SUPERVISOR_WARN_LOW_MEM		(4096)		//Warn if free memory goes below this threshold
-    #define SUPERVISOR_WARN_LOAD_AVG		(2.0f)		//Warn if our 5 minute load average goes above this threshold
-    #define SUPERVISOR_WARN_NUM_PROC		(256)		//Warn if there are more than this many processes 
+    #define SUPERVISOR_WARN_LOW_MEM    (4096)    //Warn if free memory goes below this threshold
+    #define SUPERVISOR_WARN_LOAD_AVG    (2.0f)    //Warn if our 5 minute load average goes above this threshold
+    #define SUPERVISOR_WARN_NUM_PROC    (256)    //Warn if there are more than this many processes 
 #else
-    #define SUPERVISOR_WARN_LOW_MEM		(4096)		//Warn if free memory goes below this threshold
-    #define SUPERVISOR_WARN_LOAD_AVG		(2.0f)		//Warn if our 5 minute load average goes above this threshold
-    #define SUPERVISOR_WARN_NUM_PROC		(100)		//Warn if there are more than this many processes 
+    #define SUPERVISOR_WARN_LOW_MEM    (4096)    //Warn if free memory goes below this threshold
+    #define SUPERVISOR_WARN_LOAD_AVG    (2.0f)    //Warn if our 5 minute load average goes above this threshold
+    #define SUPERVISOR_WARN_NUM_PROC    (100)    //Warn if there are more than this many processes 
 #endif
 
 //Which types of log entries should be sent to the server via the billing log?

+ 1 - 1
busunit/passdb/pass_communication.c

@@ -703,7 +703,7 @@ int do_zflush(passdb_context *ctx, void *data, int len)
                     //In fast mode, we apply all of our update to the memory window without calling msync() or write(), and then
                     //(see below) when we're done rewriting the mmap()'d window for the local database, then we make one call
                     //to msync() or write() and splat it all down to flash at once.  This gets us a better compression ratio
-                    //on the large chunks of file (like the Cornell passes) which change infrequently and it produces less
+                    //on the large chunks of file which change infrequently and it produces less
                     //filesystem fragmentation, but it means that it is theoretically possible for a power event to cause a
                     //partial write to corrupt the local database (requiring a new flush).  That being said, when running on
                     //top of JFFS2, this should cause file truncation, which will be easily detectable and trigger another

+ 12 - 0
busunit/passdb/rfid_patterns.txt

@@ -0,0 +1,12 @@
+#Bits	Shift	Mask			Match			SiteShift	SiteMask		IDShift	IdMask
+#xx	xx	xxxxxxxxxxxxxxxx	xxxxxxxxxxxxxxxx	xx		xxxxxxxxxxxxxxxx	xx	xxxxxxxxxxxxxxxx
+
+# Pattern to ignore the high bit of the site ID
+23	15	0000000000000FFF	00000000000001FB	15		0000000000000FFF	01	00000000000FFFFF
+
+# 35 bit (0x23 bit) tag that uses all bits
+23	15	0000000000000000	0000000000000000	15		0000000000001FFF	01	00000000000FFFFF
+
+# Use all bits for a 26 bit (0x1A bit) tag
+1A	11	0000000000000000	0000000000000000	11		00000000000000FF	01	000000000000FFFF
+

+ 26 - 0
busunit/scripts/rc.local

@@ -0,0 +1,26 @@
+#!/bin/sh -e
+#
+# rc.local
+#
+# Copyright (c) 2019 Clementine Computing LLC.
+#
+# This file is part of PopuFare.
+#
+# PopuFare is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# PopuFare is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with PopuFare.  If not, see <https://www.gnu.org/licenses/>.
+#
+
+/home/bus/bin/setup-serial.py 2>&1 >> /tmp/init.log
+/home/bus/bin/get_net_ids.sh 2>&1 >> /tmp/init.log
+
+exit 0

+ 10 - 4
busunit/scripts/update_loop.sh

@@ -34,6 +34,7 @@ checksum_path="$CHECKSUM_AND_VERSION_PATH"
 
 function spawn_supervisor
 {
+
   # If we have a client supervisor binary to run
   #
   if [ -f $BASEDIR/bin/client_supervisor ]; then
@@ -57,7 +58,10 @@ function spawn_supervisor
 #    fi
 
     
-      rm $supervisor_pidfile
+      # If we've gotten here, the client_supervisor process should
+      # be running or is stale, so cleanup and respawn
+      #
+      rm -f $supervisor_pidfile
 
       # then run the whole shebang...
       #
@@ -74,8 +78,6 @@ function spawn_supervisor
     rm -f  $BASEDIR/config/*.tgz.*
     $BASEDIR/bin/showmessage -b "Wait (~ 15 min)"
 
-    echo "..."
-
   fi
 }
 
@@ -94,7 +96,7 @@ function check_update
       echo -en "\t`echo $file | sed -r 's/^.*\/(.*)\.checksum$/\1/'`=`cat $file`"; 
     done; 
     echo;
-  ) | nc localhost $UPDATE_DAEMON_PORT  
+  ) | nc -q1 localhost $UPDATE_DAEMON_PORT
 }
 
 
@@ -119,6 +121,10 @@ while true; do
     (
       while read client_file checksum file_size server_path file_version; do
 
+        ## DEBUG
+        echo "# UPDATES DISABLED TEMPORARILY"
+        break;
+
         # If we've been asked to abort this update, do so before we start downloading if possible
         #
         if [ -f $UPDATE_ABORT_DROPFILE ]; then

+ 432 - 432
busunit/testing/6055.paddle

@@ -1,435 +1,435 @@
 # Paddle 6055 (testing)
 # coodinates in concatinated degree/decimal minute format (dmmc)
 # hour	minute	latitude	longitude	route	trip	stop	name
-0	1	4226.73072	-7630.4356	6055	1	1	test route top
-0	2	4226.69928	-7630.41112	6055	1	2	test route mid
-0	3	4226.664	-7630.38664	6055	1	3	test route bottom
-0	11	4226.73072	-7630.4356	6055	2	1	test route top
-0	12	4226.69928	-7630.41112	6055	2	2	test route mid
-0	13	4226.664	-7630.38664	6055	2	3	test route bottom
-0	21	4226.73072	-7630.4356	6055	3	1	test route top
-0	22	4226.69928	-7630.41112	6055	3	2	test route mid
-0	23	4226.664	-7630.38664	6055	3	3	test route bottom
-0	31	4226.73072	-7630.4356	6055	4	1	test route top
-0	32	4226.69928	-7630.41112	6055	4	2	test route mid
-0	33	4226.664	-7630.38664	6055	4	3	test route bottom
-0	41	4226.73072	-7630.4356	6055	5	1	test route top
-0	42	4226.69928	-7630.41112	6055	5	2	test route mid
-0	43	4226.664	-7630.38664	6055	5	3	test route bottom
-0	51	4226.73072	-7630.4356	6055	6	1	test route top
-0	52	4226.69928	-7630.41112	6055	6	2	test route mid
-0	53	4226.664	-7630.38664	6055	6	3	test route bottom
-1	1	4226.73072	-7630.4356	6055	1	1	test route top
-1	2	4226.69928	-7630.41112	6055	1	2	test route mid
-1	3	4226.664	-7630.38664	6055	1	3	test route bottom
-1	11	4226.73072	-7630.4356	6055	2	1	test route top
-1	12	4226.69928	-7630.41112	6055	2	2	test route mid
-1	13	4226.664	-7630.38664	6055	2	3	test route bottom
-1	21	4226.73072	-7630.4356	6055	3	1	test route top
-1	22	4226.69928	-7630.41112	6055	3	2	test route mid
-1	23	4226.664	-7630.38664	6055	3	3	test route bottom
-1	31	4226.73072	-7630.4356	6055	4	1	test route top
-1	32	4226.69928	-7630.41112	6055	4	2	test route mid
-1	33	4226.664	-7630.38664	6055	4	3	test route bottom
-1	41	4226.73072	-7630.4356	6055	5	1	test route top
-1	42	4226.69928	-7630.41112	6055	5	2	test route mid
-1	43	4226.664	-7630.38664	6055	5	3	test route bottom
-1	51	4226.73072	-7630.4356	6055	6	1	test route top
-1	52	4226.69928	-7630.41112	6055	6	2	test route mid
-1	53	4226.664	-7630.38664	6055	6	3	test route bottom
-2	1	4226.73072	-7630.4356	6055	1	1	test route top
-2	2	4226.69928	-7630.41112	6055	1	2	test route mid
-2	3	4226.664	-7630.38664	6055	1	3	test route bottom
-2	11	4226.73072	-7630.4356	6055	2	1	test route top
-2	12	4226.69928	-7630.41112	6055	2	2	test route mid
-2	13	4226.664	-7630.38664	6055	2	3	test route bottom
-2	21	4226.73072	-7630.4356	6055	3	1	test route top
-2	22	4226.69928	-7630.41112	6055	3	2	test route mid
-2	23	4226.664	-7630.38664	6055	3	3	test route bottom
-2	31	4226.73072	-7630.4356	6055	4	1	test route top
-2	32	4226.69928	-7630.41112	6055	4	2	test route mid
-2	33	4226.664	-7630.38664	6055	4	3	test route bottom
-2	41	4226.73072	-7630.4356	6055	5	1	test route top
-2	42	4226.69928	-7630.41112	6055	5	2	test route mid
-2	43	4226.664	-7630.38664	6055	5	3	test route bottom
-2	51	4226.73072	-7630.4356	6055	6	1	test route top
-2	52	4226.69928	-7630.41112	6055	6	2	test route mid
-2	53	4226.664	-7630.38664	6055	6	3	test route bottom
-3	1	4226.73072	-7630.4356	6055	1	1	test route top
-3	2	4226.69928	-7630.41112	6055	1	2	test route mid
-3	3	4226.664	-7630.38664	6055	1	3	test route bottom
-3	11	4226.73072	-7630.4356	6055	2	1	test route top
-3	12	4226.69928	-7630.41112	6055	2	2	test route mid
-3	13	4226.664	-7630.38664	6055	2	3	test route bottom
-3	21	4226.73072	-7630.4356	6055	3	1	test route top
-3	22	4226.69928	-7630.41112	6055	3	2	test route mid
-3	23	4226.664	-7630.38664	6055	3	3	test route bottom
-3	31	4226.73072	-7630.4356	6055	4	1	test route top
-3	32	4226.69928	-7630.41112	6055	4	2	test route mid
-3	33	4226.664	-7630.38664	6055	4	3	test route bottom
-3	41	4226.73072	-7630.4356	6055	5	1	test route top
-3	42	4226.69928	-7630.41112	6055	5	2	test route mid
-3	43	4226.664	-7630.38664	6055	5	3	test route bottom
-3	51	4226.73072	-7630.4356	6055	6	1	test route top
-3	52	4226.69928	-7630.41112	6055	6	2	test route mid
-3	53	4226.664	-7630.38664	6055	6	3	test route bottom
-4	1	4226.73072	-7630.4356	6055	1	1	test route top
-4	2	4226.69928	-7630.41112	6055	1	2	test route mid
-4	3	4226.664	-7630.38664	6055	1	3	test route bottom
-4	11	4226.73072	-7630.4356	6055	2	1	test route top
-4	12	4226.69928	-7630.41112	6055	2	2	test route mid
-4	13	4226.664	-7630.38664	6055	2	3	test route bottom
-4	21	4226.73072	-7630.4356	6055	3	1	test route top
-4	22	4226.69928	-7630.41112	6055	3	2	test route mid
-4	23	4226.664	-7630.38664	6055	3	3	test route bottom
-4	31	4226.73072	-7630.4356	6055	4	1	test route top
-4	32	4226.69928	-7630.41112	6055	4	2	test route mid
-4	33	4226.664	-7630.38664	6055	4	3	test route bottom
-4	41	4226.73072	-7630.4356	6055	5	1	test route top
-4	42	4226.69928	-7630.41112	6055	5	2	test route mid
-4	43	4226.664	-7630.38664	6055	5	3	test route bottom
-4	51	4226.73072	-7630.4356	6055	6	1	test route top
-4	52	4226.69928	-7630.41112	6055	6	2	test route mid
-4	53	4226.664	-7630.38664	6055	6	3	test route bottom
-5	1	4226.73072	-7630.4356	6055	1	1	test route top
-5	2	4226.69928	-7630.41112	6055	1	2	test route mid
-5	3	4226.664	-7630.38664	6055	1	3	test route bottom
-5	11	4226.73072	-7630.4356	6055	2	1	test route top
-5	12	4226.69928	-7630.41112	6055	2	2	test route mid
-5	13	4226.664	-7630.38664	6055	2	3	test route bottom
-5	21	4226.73072	-7630.4356	6055	3	1	test route top
-5	22	4226.69928	-7630.41112	6055	3	2	test route mid
-5	23	4226.664	-7630.38664	6055	3	3	test route bottom
-5	31	4226.73072	-7630.4356	6055	4	1	test route top
-5	32	4226.69928	-7630.41112	6055	4	2	test route mid
-5	33	4226.664	-7630.38664	6055	4	3	test route bottom
-5	41	4226.73072	-7630.4356	6055	5	1	test route top
-5	42	4226.69928	-7630.41112	6055	5	2	test route mid
-5	43	4226.664	-7630.38664	6055	5	3	test route bottom
-5	51	4226.73072	-7630.4356	6055	6	1	test route top
-5	52	4226.69928	-7630.41112	6055	6	2	test route mid
-5	53	4226.664	-7630.38664	6055	6	3	test route bottom
-6	1	4226.73072	-7630.4356	6055	1	1	test route top
-6	2	4226.69928	-7630.41112	6055	1	2	test route mid
-6	3	4226.664	-7630.38664	6055	1	3	test route bottom
-6	11	4226.73072	-7630.4356	6055	2	1	test route top
-6	12	4226.69928	-7630.41112	6055	2	2	test route mid
-6	13	4226.664	-7630.38664	6055	2	3	test route bottom
-6	21	4226.73072	-7630.4356	6055	3	1	test route top
-6	22	4226.69928	-7630.41112	6055	3	2	test route mid
-6	23	4226.664	-7630.38664	6055	3	3	test route bottom
-6	31	4226.73072	-7630.4356	6055	4	1	test route top
-6	32	4226.69928	-7630.41112	6055	4	2	test route mid
-6	33	4226.664	-7630.38664	6055	4	3	test route bottom
-6	41	4226.73072	-7630.4356	6055	5	1	test route top
-6	42	4226.69928	-7630.41112	6055	5	2	test route mid
-6	43	4226.664	-7630.38664	6055	5	3	test route bottom
-6	51	4226.73072	-7630.4356	6055	6	1	test route top
-6	52	4226.69928	-7630.41112	6055	6	2	test route mid
-6	53	4226.664	-7630.38664	6055	6	3	test route bottom
-7	1	4226.73072	-7630.4356	6055	1	1	test route top
-7	2	4226.69928	-7630.41112	6055	1	2	test route mid
-7	3	4226.664	-7630.38664	6055	1	3	test route bottom
-7	11	4226.73072	-7630.4356	6055	2	1	test route top
-7	12	4226.69928	-7630.41112	6055	2	2	test route mid
-7	13	4226.664	-7630.38664	6055	2	3	test route bottom
-7	21	4226.73072	-7630.4356	6055	3	1	test route top
-7	22	4226.69928	-7630.41112	6055	3	2	test route mid
-7	23	4226.664	-7630.38664	6055	3	3	test route bottom
-7	31	4226.73072	-7630.4356	6055	4	1	test route top
-7	32	4226.69928	-7630.41112	6055	4	2	test route mid
-7	33	4226.664	-7630.38664	6055	4	3	test route bottom
-7	41	4226.73072	-7630.4356	6055	5	1	test route top
-7	42	4226.69928	-7630.41112	6055	5	2	test route mid
-7	43	4226.664	-7630.38664	6055	5	3	test route bottom
-7	51	4226.73072	-7630.4356	6055	6	1	test route top
-7	52	4226.69928	-7630.41112	6055	6	2	test route mid
-7	53	4226.664	-7630.38664	6055	6	3	test route bottom
-8	1	4226.73072	-7630.4356	6055	1	1	test route top
-8	2	4226.69928	-7630.41112	6055	1	2	test route mid
-8	3	4226.664	-7630.38664	6055	1	3	test route bottom
-8	11	4226.73072	-7630.4356	6055	2	1	test route top
-8	12	4226.69928	-7630.41112	6055	2	2	test route mid
-8	13	4226.664	-7630.38664	6055	2	3	test route bottom
-8	21	4226.73072	-7630.4356	6055	3	1	test route top
-8	22	4226.69928	-7630.41112	6055	3	2	test route mid
-8	23	4226.664	-7630.38664	6055	3	3	test route bottom
-8	31	4226.73072	-7630.4356	6055	4	1	test route top
-8	32	4226.69928	-7630.41112	6055	4	2	test route mid
-8	33	4226.664	-7630.38664	6055	4	3	test route bottom
-8	41	4226.73072	-7630.4356	6055	5	1	test route top
-8	42	4226.69928	-7630.41112	6055	5	2	test route mid
-8	43	4226.664	-7630.38664	6055	5	3	test route bottom
-8	51	4226.73072	-7630.4356	6055	6	1	test route top
-8	52	4226.69928	-7630.41112	6055	6	2	test route mid
-8	53	4226.664	-7630.38664	6055	6	3	test route bottom
-9	1	4226.73072	-7630.4356	6055	1	1	test route top
-9	2	4226.69928	-7630.41112	6055	1	2	test route mid
-9	3	4226.664	-7630.38664	6055	1	3	test route bottom
-9	11	4226.73072	-7630.4356	6055	2	1	test route top
-9	12	4226.69928	-7630.41112	6055	2	2	test route mid
-9	13	4226.664	-7630.38664	6055	2	3	test route bottom
-9	21	4226.73072	-7630.4356	6055	3	1	test route top
-9	22	4226.69928	-7630.41112	6055	3	2	test route mid
-9	23	4226.664	-7630.38664	6055	3	3	test route bottom
-9	31	4226.73072	-7630.4356	6055	4	1	test route top
-9	32	4226.69928	-7630.41112	6055	4	2	test route mid
-9	33	4226.664	-7630.38664	6055	4	3	test route bottom
-9	41	4226.73072	-7630.4356	6055	5	1	test route top
-9	42	4226.69928	-7630.41112	6055	5	2	test route mid
-9	43	4226.664	-7630.38664	6055	5	3	test route bottom
-9	51	4226.73072	-7630.4356	6055	6	1	test route top
-9	52	4226.69928	-7630.41112	6055	6	2	test route mid
-9	53	4226.664	-7630.38664	6055	6	3	test route bottom
-10	1	4226.73072	-7630.4356	6055	1	1	test route top
-10	2	4226.69928	-7630.41112	6055	1	2	test route mid
-10	3	4226.664	-7630.38664	6055	1	3	test route bottom
-10	11	4226.73072	-7630.4356	6055	2	1	test route top
-10	12	4226.69928	-7630.41112	6055	2	2	test route mid
-10	13	4226.664	-7630.38664	6055	2	3	test route bottom
-10	21	4226.73072	-7630.4356	6055	3	1	test route top
-10	22	4226.69928	-7630.41112	6055	3	2	test route mid
-10	23	4226.664	-7630.38664	6055	3	3	test route bottom
-10	31	4226.73072	-7630.4356	6055	4	1	test route top
-10	32	4226.69928	-7630.41112	6055	4	2	test route mid
-10	33	4226.664	-7630.38664	6055	4	3	test route bottom
-10	41	4226.73072	-7630.4356	6055	5	1	test route top
-10	42	4226.69928	-7630.41112	6055	5	2	test route mid
-10	43	4226.664	-7630.38664	6055	5	3	test route bottom
-10	51	4226.73072	-7630.4356	6055	6	1	test route top
-10	52	4226.69928	-7630.41112	6055	6	2	test route mid
-10	53	4226.664	-7630.38664	6055	6	3	test route bottom
-11	1	4226.73072	-7630.4356	6055	1	1	test route top
-11	2	4226.69928	-7630.41112	6055	1	2	test route mid
-11	3	4226.664	-7630.38664	6055	1	3	test route bottom
-11	11	4226.73072	-7630.4356	6055	2	1	test route top
-11	12	4226.69928	-7630.41112	6055	2	2	test route mid
-11	13	4226.664	-7630.38664	6055	2	3	test route bottom
-11	21	4226.73072	-7630.4356	6055	3	1	test route top
-11	22	4226.69928	-7630.41112	6055	3	2	test route mid
-11	23	4226.664	-7630.38664	6055	3	3	test route bottom
-11	31	4226.73072	-7630.4356	6055	4	1	test route top
-11	32	4226.69928	-7630.41112	6055	4	2	test route mid
-11	33	4226.664	-7630.38664	6055	4	3	test route bottom
-11	41	4226.73072	-7630.4356	6055	5	1	test route top
-11	42	4226.69928	-7630.41112	6055	5	2	test route mid
-11	43	4226.664	-7630.38664	6055	5	3	test route bottom
-11	51	4226.73072	-7630.4356	6055	6	1	test route top
-11	52	4226.69928	-7630.41112	6055	6	2	test route mid
-11	53	4226.664	-7630.38664	6055	6	3	test route bottom
-12	1	4226.73072	-7630.4356	6055	1	1	test route top
-12	2	4226.69928	-7630.41112	6055	1	2	test route mid
-12	3	4226.664	-7630.38664	6055	1	3	test route bottom
-12	11	4226.73072	-7630.4356	6055	2	1	test route top
-12	12	4226.69928	-7630.41112	6055	2	2	test route mid
-12	13	4226.664	-7630.38664	6055	2	3	test route bottom
-12	21	4226.73072	-7630.4356	6055	3	1	test route top
-12	22	4226.69928	-7630.41112	6055	3	2	test route mid
-12	23	4226.664	-7630.38664	6055	3	3	test route bottom
-12	31	4226.73072	-7630.4356	6055	4	1	test route top
-12	32	4226.69928	-7630.41112	6055	4	2	test route mid
-12	33	4226.664	-7630.38664	6055	4	3	test route bottom
-12	41	4226.73072	-7630.4356	6055	5	1	test route top
-12	42	4226.69928	-7630.41112	6055	5	2	test route mid
-12	43	4226.664	-7630.38664	6055	5	3	test route bottom
-12	51	4226.73072	-7630.4356	6055	6	1	test route top
-12	52	4226.69928	-7630.41112	6055	6	2	test route mid
-12	53	4226.664	-7630.38664	6055	6	3	test route bottom
-13	1	4226.73072	-7630.4356	6055	1	1	test route top
-13	2	4226.69928	-7630.41112	6055	1	2	test route mid
-13	3	4226.664	-7630.38664	6055	1	3	test route bottom
-13	11	4226.73072	-7630.4356	6055	2	1	test route top
-13	12	4226.69928	-7630.41112	6055	2	2	test route mid
-13	13	4226.664	-7630.38664	6055	2	3	test route bottom
-13	21	4226.73072	-7630.4356	6055	3	1	test route top
-13	22	4226.69928	-7630.41112	6055	3	2	test route mid
-13	23	4226.664	-7630.38664	6055	3	3	test route bottom
-13	31	4226.73072	-7630.4356	6055	4	1	test route top
-13	32	4226.69928	-7630.41112	6055	4	2	test route mid
-13	33	4226.664	-7630.38664	6055	4	3	test route bottom
-13	41	4226.73072	-7630.4356	6055	5	1	test route top
-13	42	4226.69928	-7630.41112	6055	5	2	test route mid
-13	43	4226.664	-7630.38664	6055	5	3	test route bottom
-13	51	4226.73072	-7630.4356	6055	6	1	test route top
-13	52	4226.69928	-7630.41112	6055	6	2	test route mid
-13	53	4226.664	-7630.38664	6055	6	3	test route bottom
-14	1	4226.73072	-7630.4356	6055	1	1	test route top
-14	2	4226.69928	-7630.41112	6055	1	2	test route mid
-14	3	4226.664	-7630.38664	6055	1	3	test route bottom
-14	11	4226.73072	-7630.4356	6055	2	1	test route top
-14	12	4226.69928	-7630.41112	6055	2	2	test route mid
-14	13	4226.664	-7630.38664	6055	2	3	test route bottom
-14	21	4226.73072	-7630.4356	6055	3	1	test route top
-14	22	4226.69928	-7630.41112	6055	3	2	test route mid
-14	23	4226.664	-7630.38664	6055	3	3	test route bottom
-14	31	4226.73072	-7630.4356	6055	4	1	test route top
-14	32	4226.69928	-7630.41112	6055	4	2	test route mid
-14	33	4226.664	-7630.38664	6055	4	3	test route bottom
-14	41	4226.73072	-7630.4356	6055	5	1	test route top
-14	42	4226.69928	-7630.41112	6055	5	2	test route mid
-14	43	4226.664	-7630.38664	6055	5	3	test route bottom
-14	51	4226.73072	-7630.4356	6055	6	1	test route top
-14	52	4226.69928	-7630.41112	6055	6	2	test route mid
-14	53	4226.664	-7630.38664	6055	6	3	test route bottom
-15	1	4226.73072	-7630.4356	6055	1	1	test route top
-15	2	4226.69928	-7630.41112	6055	1	2	test route mid
-15	3	4226.664	-7630.38664	6055	1	3	test route bottom
-15	11	4226.73072	-7630.4356	6055	2	1	test route top
-15	12	4226.69928	-7630.41112	6055	2	2	test route mid
-15	13	4226.664	-7630.38664	6055	2	3	test route bottom
-15	21	4226.73072	-7630.4356	6055	3	1	test route top
-15	22	4226.69928	-7630.41112	6055	3	2	test route mid
-15	23	4226.664	-7630.38664	6055	3	3	test route bottom
-15	31	4226.73072	-7630.4356	6055	4	1	test route top
-15	32	4226.69928	-7630.41112	6055	4	2	test route mid
-15	33	4226.664	-7630.38664	6055	4	3	test route bottom
-15	41	4226.73072	-7630.4356	6055	5	1	test route top
-15	42	4226.69928	-7630.41112	6055	5	2	test route mid
-15	43	4226.664	-7630.38664	6055	5	3	test route bottom
-15	51	4226.73072	-7630.4356	6055	6	1	test route top
-15	52	4226.69928	-7630.41112	6055	6	2	test route mid
-15	53	4226.664	-7630.38664	6055	6	3	test route bottom
-16	1	4226.73072	-7630.4356	6055	1	1	test route top
-16	2	4226.69928	-7630.41112	6055	1	2	test route mid
-16	3	4226.664	-7630.38664	6055	1	3	test route bottom
-16	11	4226.73072	-7630.4356	6055	2	1	test route top
-16	12	4226.69928	-7630.41112	6055	2	2	test route mid
-16	13	4226.664	-7630.38664	6055	2	3	test route bottom
-16	21	4226.73072	-7630.4356	6055	3	1	test route top
-16	22	4226.69928	-7630.41112	6055	3	2	test route mid
-16	23	4226.664	-7630.38664	6055	3	3	test route bottom
-16	31	4226.73072	-7630.4356	6055	4	1	test route top
-16	32	4226.69928	-7630.41112	6055	4	2	test route mid
-16	33	4226.664	-7630.38664	6055	4	3	test route bottom
-16	41	4226.73072	-7630.4356	6055	5	1	test route top
-16	42	4226.69928	-7630.41112	6055	5	2	test route mid
-16	43	4226.664	-7630.38664	6055	5	3	test route bottom
-16	51	4226.73072	-7630.4356	6055	6	1	test route top
-16	52	4226.69928	-7630.41112	6055	6	2	test route mid
-16	53	4226.664	-7630.38664	6055	6	3	test route bottom
-17	1	4226.73072	-7630.4356	6055	1	1	test route top
-17	2	4226.69928	-7630.41112	6055	1	2	test route mid
-17	3	4226.664	-7630.38664	6055	1	3	test route bottom
-17	11	4226.73072	-7630.4356	6055	2	1	test route top
-17	12	4226.69928	-7630.41112	6055	2	2	test route mid
-17	13	4226.664	-7630.38664	6055	2	3	test route bottom
-17	21	4226.73072	-7630.4356	6055	3	1	test route top
-17	22	4226.69928	-7630.41112	6055	3	2	test route mid
-17	23	4226.664	-7630.38664	6055	3	3	test route bottom
-17	31	4226.73072	-7630.4356	6055	4	1	test route top
-17	32	4226.69928	-7630.41112	6055	4	2	test route mid
-17	33	4226.664	-7630.38664	6055	4	3	test route bottom
-17	41	4226.73072	-7630.4356	6055	5	1	test route top
-17	42	4226.69928	-7630.41112	6055	5	2	test route mid
-17	43	4226.664	-7630.38664	6055	5	3	test route bottom
-17	51	4226.73072	-7630.4356	6055	6	1	test route top
-17	52	4226.69928	-7630.41112	6055	6	2	test route mid
-17	53	4226.664	-7630.38664	6055	6	3	test route bottom
-18	1	4226.73072	-7630.4356	6055	1	1	test route top
-18	2	4226.69928	-7630.41112	6055	1	2	test route mid
-18	3	4226.664	-7630.38664	6055	1	3	test route bottom
-18	11	4226.73072	-7630.4356	6055	2	1	test route top
-18	12	4226.69928	-7630.41112	6055	2	2	test route mid
-18	13	4226.664	-7630.38664	6055	2	3	test route bottom
-18	21	4226.73072	-7630.4356	6055	3	1	test route top
-18	22	4226.69928	-7630.41112	6055	3	2	test route mid
-18	23	4226.664	-7630.38664	6055	3	3	test route bottom
-18	31	4226.73072	-7630.4356	6055	4	1	test route top
-18	32	4226.69928	-7630.41112	6055	4	2	test route mid
-18	33	4226.664	-7630.38664	6055	4	3	test route bottom
-18	41	4226.73072	-7630.4356	6055	5	1	test route top
-18	42	4226.69928	-7630.41112	6055	5	2	test route mid
-18	43	4226.664	-7630.38664	6055	5	3	test route bottom
-18	51	4226.73072	-7630.4356	6055	6	1	test route top
-18	52	4226.69928	-7630.41112	6055	6	2	test route mid
-18	53	4226.664	-7630.38664	6055	6	3	test route bottom
-19	1	4226.73072	-7630.4356	6055	1	1	test route top
-19	2	4226.69928	-7630.41112	6055	1	2	test route mid
-19	3	4226.664	-7630.38664	6055	1	3	test route bottom
-19	11	4226.73072	-7630.4356	6055	2	1	test route top
-19	12	4226.69928	-7630.41112	6055	2	2	test route mid
-19	13	4226.664	-7630.38664	6055	2	3	test route bottom
-19	21	4226.73072	-7630.4356	6055	3	1	test route top
-19	22	4226.69928	-7630.41112	6055	3	2	test route mid
-19	23	4226.664	-7630.38664	6055	3	3	test route bottom
-19	31	4226.73072	-7630.4356	6055	4	1	test route top
-19	32	4226.69928	-7630.41112	6055	4	2	test route mid
-19	33	4226.664	-7630.38664	6055	4	3	test route bottom
-19	41	4226.73072	-7630.4356	6055	5	1	test route top
-19	42	4226.69928	-7630.41112	6055	5	2	test route mid
-19	43	4226.664	-7630.38664	6055	5	3	test route bottom
-19	51	4226.73072	-7630.4356	6055	6	1	test route top
-19	52	4226.69928	-7630.41112	6055	6	2	test route mid
-19	53	4226.664	-7630.38664	6055	6	3	test route bottom
-20	1	4226.73072	-7630.4356	6055	1	1	test route top
-20	2	4226.69928	-7630.41112	6055	1	2	test route mid
-20	3	4226.664	-7630.38664	6055	1	3	test route bottom
-20	11	4226.73072	-7630.4356	6055	2	1	test route top
-20	12	4226.69928	-7630.41112	6055	2	2	test route mid
-20	13	4226.664	-7630.38664	6055	2	3	test route bottom
-20	21	4226.73072	-7630.4356	6055	3	1	test route top
-20	22	4226.69928	-7630.41112	6055	3	2	test route mid
-20	23	4226.664	-7630.38664	6055	3	3	test route bottom
-20	31	4226.73072	-7630.4356	6055	4	1	test route top
-20	32	4226.69928	-7630.41112	6055	4	2	test route mid
-20	33	4226.664	-7630.38664	6055	4	3	test route bottom
-20	41	4226.73072	-7630.4356	6055	5	1	test route top
-20	42	4226.69928	-7630.41112	6055	5	2	test route mid
-20	43	4226.664	-7630.38664	6055	5	3	test route bottom
-20	51	4226.73072	-7630.4356	6055	6	1	test route top
-20	52	4226.69928	-7630.41112	6055	6	2	test route mid
-20	53	4226.664	-7630.38664	6055	6	3	test route bottom
-21	1	4226.73072	-7630.4356	6055	1	1	test route top
-21	2	4226.69928	-7630.41112	6055	1	2	test route mid
-21	3	4226.664	-7630.38664	6055	1	3	test route bottom
-21	11	4226.73072	-7630.4356	6055	2	1	test route top
-21	12	4226.69928	-7630.41112	6055	2	2	test route mid
-21	13	4226.664	-7630.38664	6055	2	3	test route bottom
-21	21	4226.73072	-7630.4356	6055	3	1	test route top
-21	22	4226.69928	-7630.41112	6055	3	2	test route mid
-21	23	4226.664	-7630.38664	6055	3	3	test route bottom
-21	31	4226.73072	-7630.4356	6055	4	1	test route top
-21	32	4226.69928	-7630.41112	6055	4	2	test route mid
-21	33	4226.664	-7630.38664	6055	4	3	test route bottom
-21	41	4226.73072	-7630.4356	6055	5	1	test route top
-21	42	4226.69928	-7630.41112	6055	5	2	test route mid
-21	43	4226.664	-7630.38664	6055	5	3	test route bottom
-21	51	4226.73072	-7630.4356	6055	6	1	test route top
-21	52	4226.69928	-7630.41112	6055	6	2	test route mid
-21	53	4226.664	-7630.38664	6055	6	3	test route bottom
-22	1	4226.73072	-7630.4356	6055	1	1	test route top
-22	2	4226.69928	-7630.41112	6055	1	2	test route mid
-22	3	4226.664	-7630.38664	6055	1	3	test route bottom
-22	11	4226.73072	-7630.4356	6055	2	1	test route top
-22	12	4226.69928	-7630.41112	6055	2	2	test route mid
-22	13	4226.664	-7630.38664	6055	2	3	test route bottom
-22	21	4226.73072	-7630.4356	6055	3	1	test route top
-22	22	4226.69928	-7630.41112	6055	3	2	test route mid
-22	23	4226.664	-7630.38664	6055	3	3	test route bottom
-22	31	4226.73072	-7630.4356	6055	4	1	test route top
-22	32	4226.69928	-7630.41112	6055	4	2	test route mid
-22	33	4226.664	-7630.38664	6055	4	3	test route bottom
-22	41	4226.73072	-7630.4356	6055	5	1	test route top
-22	42	4226.69928	-7630.41112	6055	5	2	test route mid
-22	43	4226.664	-7630.38664	6055	5	3	test route bottom
-22	51	4226.73072	-7630.4356	6055	6	1	test route top
-22	52	4226.69928	-7630.41112	6055	6	2	test route mid
-22	53	4226.664	-7630.38664	6055	6	3	test route bottom
-23	1	4226.73072	-7630.4356	6055	1	1	test route top
-23	2	4226.69928	-7630.41112	6055	1	2	test route mid
-23	3	4226.664	-7630.38664	6055	1	3	test route bottom
-23	11	4226.73072	-7630.4356	6055	2	1	test route top
-23	12	4226.69928	-7630.41112	6055	2	2	test route mid
-23	13	4226.664	-7630.38664	6055	2	3	test route bottom
-23	21	4226.73072	-7630.4356	6055	3	1	test route top
-23	22	4226.69928	-7630.41112	6055	3	2	test route mid
-23	23	4226.664	-7630.38664	6055	3	3	test route bottom
-23	31	4226.73072	-7630.4356	6055	4	1	test route top
-23	32	4226.69928	-7630.41112	6055	4	2	test route mid
-23	33	4226.664	-7630.38664	6055	4	3	test route bottom
-23	41	4226.73072	-7630.4356	6055	5	1	test route top
-23	42	4226.69928	-7630.41112	6055	5	2	test route mid
-23	43	4226.664	-7630.38664	6055	5	3	test route bottom
-23	51	4226.73072	-7630.4356	6055	6	1	test route top
-23	52	4226.69928	-7630.41112	6055	6	2	test route mid
-23	53	4226.664	-7630.38664	6055	6	3	test route bottom
+0	1	4226.73072	-7630.4356	1000	1	1	test route top
+0	2	4226.69928	-7630.41112	1000	1	2	test route mid
+0	3	4226.664	-7630.38664	1000	1	3	test route bottom
+0	11	4226.73072	-7630.4356	1010	2	1	test route top
+0	12	4226.69928	-7630.41112	1010	2	2	test route mid
+0	13	4226.664	-7630.38664	1010	2	3	test route bottom
+0	21	4226.73072	-7630.4356	1000	3	1	test route top
+0	22	4226.69928	-7630.41112	1000	3	2	test route mid
+0	23	4226.664	-7630.38664	1000	3	3	test route bottom
+0	31	4226.73072	-7630.4356	1010	4	1	test route top
+0	32	4226.69928	-7630.41112	1010	4	2	test route mid
+0	33	4226.664	-7630.38664	1010	4	3	test route bottom
+0	41	4226.73072	-7630.4356	1000	5	1	test route top
+0	42	4226.69928	-7630.41112	1000	5	2	test route mid
+0	43	4226.664	-7630.38664	1000	5	3	test route bottom
+0	51	4226.73072	-7630.4356	1010	6	1	test route top
+0	52	4226.69928	-7630.41112	1010	6	2	test route mid
+0	53	4226.664	-7630.38664	1010	6	3	test route bottom
+1	1	4226.73072	-7630.4356	1000	1	1	test route top
+1	2	4226.69928	-7630.41112	1000	1	2	test route mid
+1	3	4226.664	-7630.38664	1000	1	3	test route bottom
+1	11	4226.73072	-7630.4356	1010	2	1	test route top
+1	12	4226.69928	-7630.41112	1010	2	2	test route mid
+1	13	4226.664	-7630.38664	1010	2	3	test route bottom
+1	21	4226.73072	-7630.4356	1000	3	1	test route top
+1	22	4226.69928	-7630.41112	1000	3	2	test route mid
+1	23	4226.664	-7630.38664	1000	3	3	test route bottom
+1	31	4226.73072	-7630.4356	1010	4	1	test route top
+1	32	4226.69928	-7630.41112	1010	4	2	test route mid
+1	33	4226.664	-7630.38664	1010	4	3	test route bottom
+1	41	4226.73072	-7630.4356	1000	5	1	test route top
+1	42	4226.69928	-7630.41112	1000	5	2	test route mid
+1	43	4226.664	-7630.38664	1000	5	3	test route bottom
+1	51	4226.73072	-7630.4356	1010	6	1	test route top
+1	52	4226.69928	-7630.41112	1010	6	2	test route mid
+1	53	4226.664	-7630.38664	1010	6	3	test route bottom
+2	1	4226.73072	-7630.4356	1000	1	1	test route top
+2	2	4226.69928	-7630.41112	1000	1	2	test route mid
+2	3	4226.664	-7630.38664	1000	1	3	test route bottom
+2	11	4226.73072	-7630.4356	1010	2	1	test route top
+2	12	4226.69928	-7630.41112	1010	2	2	test route mid
+2	13	4226.664	-7630.38664	1010	2	3	test route bottom
+2	21	4226.73072	-7630.4356	1000	3	1	test route top
+2	22	4226.69928	-7630.41112	1000	3	2	test route mid
+2	23	4226.664	-7630.38664	1000	3	3	test route bottom
+2	31	4226.73072	-7630.4356	1010	4	1	test route top
+2	32	4226.69928	-7630.41112	1010	4	2	test route mid
+2	33	4226.664	-7630.38664	1010	4	3	test route bottom
+2	41	4226.73072	-7630.4356	1000	5	1	test route top
+2	42	4226.69928	-7630.41112	1000	5	2	test route mid
+2	43	4226.664	-7630.38664	1000	5	3	test route bottom
+2	51	4226.73072	-7630.4356	1010	6	1	test route top
+2	52	4226.69928	-7630.41112	1010	6	2	test route mid
+2	53	4226.664	-7630.38664	1010	6	3	test route bottom
+3	1	4226.73072	-7630.4356	1000	1	1	test route top
+3	2	4226.69928	-7630.41112	1000	1	2	test route mid
+3	3	4226.664	-7630.38664	1000	1	3	test route bottom
+3	11	4226.73072	-7630.4356	1010	2	1	test route top
+3	12	4226.69928	-7630.41112	1010	2	2	test route mid
+3	13	4226.664	-7630.38664	1010	2	3	test route bottom
+3	21	4226.73072	-7630.4356	1000	3	1	test route top
+3	22	4226.69928	-7630.41112	1000	3	2	test route mid
+3	23	4226.664	-7630.38664	1000	3	3	test route bottom
+3	31	4226.73072	-7630.4356	1010	4	1	test route top
+3	32	4226.69928	-7630.41112	1010	4	2	test route mid
+3	33	4226.664	-7630.38664	1010	4	3	test route bottom
+3	41	4226.73072	-7630.4356	1000	5	1	test route top
+3	42	4226.69928	-7630.41112	1000	5	2	test route mid
+3	43	4226.664	-7630.38664	1000	5	3	test route bottom
+3	51	4226.73072	-7630.4356	1010	6	1	test route top
+3	52	4226.69928	-7630.41112	1010	6	2	test route mid
+3	53	4226.664	-7630.38664	1010	6	3	test route bottom
+4	1	4226.73072	-7630.4356	1000	1	1	test route top
+4	2	4226.69928	-7630.41112	1000	1	2	test route mid
+4	3	4226.664	-7630.38664	1000	1	3	test route bottom
+4	11	4226.73072	-7630.4356	1010	2	1	test route top
+4	12	4226.69928	-7630.41112	1010	2	2	test route mid
+4	13	4226.664	-7630.38664	1010	2	3	test route bottom
+4	21	4226.73072	-7630.4356	1000	3	1	test route top
+4	22	4226.69928	-7630.41112	1000	3	2	test route mid
+4	23	4226.664	-7630.38664	1000	3	3	test route bottom
+4	31	4226.73072	-7630.4356	1010	4	1	test route top
+4	32	4226.69928	-7630.41112	1010	4	2	test route mid
+4	33	4226.664	-7630.38664	1010	4	3	test route bottom
+4	41	4226.73072	-7630.4356	1000	5	1	test route top
+4	42	4226.69928	-7630.41112	1000	5	2	test route mid
+4	43	4226.664	-7630.38664	1000	5	3	test route bottom
+4	51	4226.73072	-7630.4356	1010	6	1	test route top
+4	52	4226.69928	-7630.41112	1010	6	2	test route mid
+4	53	4226.664	-7630.38664	1010	6	3	test route bottom
+5	1	4226.73072	-7630.4356	1000	1	1	test route top
+5	2	4226.69928	-7630.41112	1000	1	2	test route mid
+5	3	4226.664	-7630.38664	1000	1	3	test route bottom
+5	11	4226.73072	-7630.4356	1010	2	1	test route top
+5	12	4226.69928	-7630.41112	1010	2	2	test route mid
+5	13	4226.664	-7630.38664	1010	2	3	test route bottom
+5	21	4226.73072	-7630.4356	1000	3	1	test route top
+5	22	4226.69928	-7630.41112	1000	3	2	test route mid
+5	23	4226.664	-7630.38664	1000	3	3	test route bottom
+5	31	4226.73072	-7630.4356	1010	4	1	test route top
+5	32	4226.69928	-7630.41112	1010	4	2	test route mid
+5	33	4226.664	-7630.38664	1010	4	3	test route bottom
+5	41	4226.73072	-7630.4356	1000	5	1	test route top
+5	42	4226.69928	-7630.41112	1000	5	2	test route mid
+5	43	4226.664	-7630.38664	1000	5	3	test route bottom
+5	51	4226.73072	-7630.4356	1010	6	1	test route top
+5	52	4226.69928	-7630.41112	1010	6	2	test route mid
+5	53	4226.664	-7630.38664	1010	6	3	test route bottom
+6	1	4226.73072	-7630.4356	1000	1	1	test route top
+6	2	4226.69928	-7630.41112	1000	1	2	test route mid
+6	3	4226.664	-7630.38664	1000	1	3	test route bottom
+6	11	4226.73072	-7630.4356	1010	2	1	test route top
+6	12	4226.69928	-7630.41112	1010	2	2	test route mid
+6	13	4226.664	-7630.38664	1010	2	3	test route bottom
+6	21	4226.73072	-7630.4356	1000	3	1	test route top
+6	22	4226.69928	-7630.41112	1000	3	2	test route mid
+6	23	4226.664	-7630.38664	1000	3	3	test route bottom
+6	31	4226.73072	-7630.4356	1010	4	1	test route top
+6	32	4226.69928	-7630.41112	1010	4	2	test route mid
+6	33	4226.664	-7630.38664	1010	4	3	test route bottom
+6	41	4226.73072	-7630.4356	1000	5	1	test route top
+6	42	4226.69928	-7630.41112	1000	5	2	test route mid
+6	43	4226.664	-7630.38664	1000	5	3	test route bottom
+6	51	4226.73072	-7630.4356	1010	6	1	test route top
+6	52	4226.69928	-7630.41112	1010	6	2	test route mid
+6	53	4226.664	-7630.38664	1010	6	3	test route bottom
+7	1	4226.73072	-7630.4356	1000	1	1	test route top
+7	2	4226.69928	-7630.41112	1000	1	2	test route mid
+7	3	4226.664	-7630.38664	1000	1	3	test route bottom
+7	11	4226.73072	-7630.4356	1010	2	1	test route top
+7	12	4226.69928	-7630.41112	1010	2	2	test route mid
+7	13	4226.664	-7630.38664	1010	2	3	test route bottom
+7	21	4226.73072	-7630.4356	1000	3	1	test route top
+7	22	4226.69928	-7630.41112	1000	3	2	test route mid
+7	23	4226.664	-7630.38664	1000	3	3	test route bottom
+7	31	4226.73072	-7630.4356	1010	4	1	test route top
+7	32	4226.69928	-7630.41112	1010	4	2	test route mid
+7	33	4226.664	-7630.38664	1010	4	3	test route bottom
+7	41	4226.73072	-7630.4356	1000	5	1	test route top
+7	42	4226.69928	-7630.41112	1000	5	2	test route mid
+7	43	4226.664	-7630.38664	1000	5	3	test route bottom
+7	51	4226.73072	-7630.4356	1010	6	1	test route top
+7	52	4226.69928	-7630.41112	1010	6	2	test route mid
+7	53	4226.664	-7630.38664	1010	6	3	test route bottom
+8	1	4226.73072	-7630.4356	1000	1	1	test route top
+8	2	4226.69928	-7630.41112	1000	1	2	test route mid
+8	3	4226.664	-7630.38664	1000	1	3	test route bottom
+8	11	4226.73072	-7630.4356	1010	2	1	test route top
+8	12	4226.69928	-7630.41112	1010	2	2	test route mid
+8	13	4226.664	-7630.38664	1010	2	3	test route bottom
+8	21	4226.73072	-7630.4356	1000	3	1	test route top
+8	22	4226.69928	-7630.41112	1000	3	2	test route mid
+8	23	4226.664	-7630.38664	1000	3	3	test route bottom
+8	31	4226.73072	-7630.4356	1010	4	1	test route top
+8	32	4226.69928	-7630.41112	1010	4	2	test route mid
+8	33	4226.664	-7630.38664	1010	4	3	test route bottom
+8	41	4226.73072	-7630.4356	1000	5	1	test route top
+8	42	4226.69928	-7630.41112	1000	5	2	test route mid
+8	43	4226.664	-7630.38664	1000	5	3	test route bottom
+8	51	4226.73072	-7630.4356	1010	6	1	test route top
+8	52	4226.69928	-7630.41112	1010	6	2	test route mid
+8	53	4226.664	-7630.38664	1010	6	3	test route bottom
+9	1	4226.73072	-7630.4356	1000	1	1	test route top
+9	2	4226.69928	-7630.41112	1000	1	2	test route mid
+9	3	4226.664	-7630.38664	1000	1	3	test route bottom
+9	11	4226.73072	-7630.4356	1010	2	1	test route top
+9	12	4226.69928	-7630.41112	1010	2	2	test route mid
+9	13	4226.664	-7630.38664	1010	2	3	test route bottom
+9	21	4226.73072	-7630.4356	1000	3	1	test route top
+9	22	4226.69928	-7630.41112	1000	3	2	test route mid
+9	23	4226.664	-7630.38664	1000	3	3	test route bottom
+9	31	4226.73072	-7630.4356	1010	4	1	test route top
+9	32	4226.69928	-7630.41112	1010	4	2	test route mid
+9	33	4226.664	-7630.38664	1010	4	3	test route bottom
+9	41	4226.73072	-7630.4356	1000	5	1	test route top
+9	42	4226.69928	-7630.41112	1000	5	2	test route mid
+9	43	4226.664	-7630.38664	1000	5	3	test route bottom
+9	51	4226.73072	-7630.4356	1010	6	1	test route top
+9	52	4226.69928	-7630.41112	1010	6	2	test route mid
+9	53	4226.664	-7630.38664	1010	6	3	test route bottom
+10	1	4226.73072	-7630.4356	1000	1	1	test route top
+10	2	4226.69928	-7630.41112	1000	1	2	test route mid
+10	3	4226.664	-7630.38664	1000	1	3	test route bottom
+10	11	4226.73072	-7630.4356	1010	2	1	test route top
+10	12	4226.69928	-7630.41112	1010	2	2	test route mid
+10	13	4226.664	-7630.38664	1010	2	3	test route bottom
+10	21	4226.73072	-7630.4356	1000	3	1	test route top
+10	22	4226.69928	-7630.41112	1000	3	2	test route mid
+10	23	4226.664	-7630.38664	1000	3	3	test route bottom
+10	31	4226.73072	-7630.4356	1010	4	1	test route top
+10	32	4226.69928	-7630.41112	1010	4	2	test route mid
+10	33	4226.664	-7630.38664	1010	4	3	test route bottom
+10	41	4226.73072	-7630.4356	1000	5	1	test route top
+10	42	4226.69928	-7630.41112	1000	5	2	test route mid
+10	43	4226.664	-7630.38664	1000	5	3	test route bottom
+10	51	4226.73072	-7630.4356	1010	6	1	test route top
+10	52	4226.69928	-7630.41112	1010	6	2	test route mid
+10	53	4226.664	-7630.38664	1010	6	3	test route bottom
+11	1	4226.73072	-7630.4356	1000	1	1	test route top
+11	2	4226.69928	-7630.41112	1000	1	2	test route mid
+11	3	4226.664	-7630.38664	1000	1	3	test route bottom
+11	11	4226.73072	-7630.4356	1010	2	1	test route top
+11	12	4226.69928	-7630.41112	1010	2	2	test route mid
+11	13	4226.664	-7630.38664	1010	2	3	test route bottom
+11	21	4226.73072	-7630.4356	1000	3	1	test route top
+11	22	4226.69928	-7630.41112	1000	3	2	test route mid
+11	23	4226.664	-7630.38664	1000	3	3	test route bottom
+11	31	4226.73072	-7630.4356	1010	4	1	test route top
+11	32	4226.69928	-7630.41112	1010	4	2	test route mid
+11	33	4226.664	-7630.38664	1010	4	3	test route bottom
+11	41	4226.73072	-7630.4356	1000	5	1	test route top
+11	42	4226.69928	-7630.41112	1000	5	2	test route mid
+11	43	4226.664	-7630.38664	1000	5	3	test route bottom
+11	51	4226.73072	-7630.4356	1010	6	1	test route top
+11	52	4226.69928	-7630.41112	1010	6	2	test route mid
+11	53	4226.664	-7630.38664	1010	6	3	test route bottom
+12	1	4226.73072	-7630.4356	1000	1	1	test route top
+12	2	4226.69928	-7630.41112	1000	1	2	test route mid
+12	3	4226.664	-7630.38664	1000	1	3	test route bottom
+12	11	4226.73072	-7630.4356	1010	2	1	test route top
+12	12	4226.69928	-7630.41112	1010	2	2	test route mid
+12	13	4226.664	-7630.38664	1010	2	3	test route bottom
+12	21	4226.73072	-7630.4356	1000	3	1	test route top
+12	22	4226.69928	-7630.41112	1000	3	2	test route mid
+12	23	4226.664	-7630.38664	1000	3	3	test route bottom
+12	31	4226.73072	-7630.4356	1010	4	1	test route top
+12	32	4226.69928	-7630.41112	1010	4	2	test route mid
+12	33	4226.664	-7630.38664	1010	4	3	test route bottom
+12	41	4226.73072	-7630.4356	1000	5	1	test route top
+12	42	4226.69928	-7630.41112	1000	5	2	test route mid
+12	43	4226.664	-7630.38664	1000	5	3	test route bottom
+12	51	4226.73072	-7630.4356	1010	6	1	test route top
+12	52	4226.69928	-7630.41112	1010	6	2	test route mid
+12	53	4226.664	-7630.38664	1010	6	3	test route bottom
+13	1	4226.73072	-7630.4356	1000	1	1	test route top
+13	2	4226.69928	-7630.41112	1000	1	2	test route mid
+13	3	4226.664	-7630.38664	1000	1	3	test route bottom
+13	11	4226.73072	-7630.4356	1010	2	1	test route top
+13	12	4226.69928	-7630.41112	1010	2	2	test route mid
+13	13	4226.664	-7630.38664	1010	2	3	test route bottom
+13	21	4226.73072	-7630.4356	1000	3	1	test route top
+13	22	4226.69928	-7630.41112	1000	3	2	test route mid
+13	23	4226.664	-7630.38664	1000	3	3	test route bottom
+13	31	4226.73072	-7630.4356	1010	4	1	test route top
+13	32	4226.69928	-7630.41112	1010	4	2	test route mid
+13	33	4226.664	-7630.38664	1010	4	3	test route bottom
+13	41	4226.73072	-7630.4356	1000	5	1	test route top
+13	42	4226.69928	-7630.41112	1000	5	2	test route mid
+13	43	4226.664	-7630.38664	1000	5	3	test route bottom
+13	51	4226.73072	-7630.4356	1010	6	1	test route top
+13	52	4226.69928	-7630.41112	1010	6	2	test route mid
+13	53	4226.664	-7630.38664	1010	6	3	test route bottom
+14	1	4226.73072	-7630.4356	1000	1	1	test route top
+14	2	4226.69928	-7630.41112	1000	1	2	test route mid
+14	3	4226.664	-7630.38664	1000	1	3	test route bottom
+14	11	4226.73072	-7630.4356	1010	2	1	test route top
+14	12	4226.69928	-7630.41112	1010	2	2	test route mid
+14	13	4226.664	-7630.38664	1010	2	3	test route bottom
+14	21	4226.73072	-7630.4356	1000	3	1	test route top
+14	22	4226.69928	-7630.41112	1000	3	2	test route mid
+14	23	4226.664	-7630.38664	1000	3	3	test route bottom
+14	31	4226.73072	-7630.4356	1010	4	1	test route top
+14	32	4226.69928	-7630.41112	1010	4	2	test route mid
+14	33	4226.664	-7630.38664	1010	4	3	test route bottom
+14	41	4226.73072	-7630.4356	1000	5	1	test route top
+14	42	4226.69928	-7630.41112	1000	5	2	test route mid
+14	43	4226.664	-7630.38664	1000	5	3	test route bottom
+14	51	4226.73072	-7630.4356	1010	6	1	test route top
+14	52	4226.69928	-7630.41112	1010	6	2	test route mid
+14	53	4226.664	-7630.38664	1010	6	3	test route bottom
+15	1	4226.73072	-7630.4356	1000	1	1	test route top
+15	2	4226.69928	-7630.41112	1000	1	2	test route mid
+15	3	4226.664	-7630.38664	1000	1	3	test route bottom
+15	11	4226.73072	-7630.4356	1010	2	1	test route top
+15	12	4226.69928	-7630.41112	1010	2	2	test route mid
+15	13	4226.664	-7630.38664	1010	2	3	test route bottom
+15	21	4226.73072	-7630.4356	1000	3	1	test route top
+15	22	4226.69928	-7630.41112	1000	3	2	test route mid
+15	23	4226.664	-7630.38664	1000	3	3	test route bottom
+15	31	4226.73072	-7630.4356	1010	4	1	test route top
+15	32	4226.69928	-7630.41112	1010	4	2	test route mid
+15	33	4226.664	-7630.38664	1010	4	3	test route bottom
+15	41	4226.73072	-7630.4356	1000	5	1	test route top
+15	42	4226.69928	-7630.41112	1000	5	2	test route mid
+15	43	4226.664	-7630.38664	1000	5	3	test route bottom
+15	51	4226.73072	-7630.4356	1010	6	1	test route top
+15	52	4226.69928	-7630.41112	1010	6	2	test route mid
+15	53	4226.664	-7630.38664	1010	6	3	test route bottom
+16	1	4226.73072	-7630.4356	1000	1	1	test route top
+16	2	4226.69928	-7630.41112	1000	1	2	test route mid
+16	3	4226.664	-7630.38664	1000	1	3	test route bottom
+16	11	4226.73072	-7630.4356	1010	2	1	test route top
+16	12	4226.69928	-7630.41112	1010	2	2	test route mid
+16	13	4226.664	-7630.38664	1010	2	3	test route bottom
+16	21	4226.73072	-7630.4356	1000	3	1	test route top
+16	22	4226.69928	-7630.41112	1000	3	2	test route mid
+16	23	4226.664	-7630.38664	1000	3	3	test route bottom
+16	31	4226.73072	-7630.4356	1010	4	1	test route top
+16	32	4226.69928	-7630.41112	1010	4	2	test route mid
+16	33	4226.664	-7630.38664	1010	4	3	test route bottom
+16	41	4226.73072	-7630.4356	1000	5	1	test route top
+16	42	4226.69928	-7630.41112	1000	5	2	test route mid
+16	43	4226.664	-7630.38664	1000	5	3	test route bottom
+16	51	4226.73072	-7630.4356	1010	6	1	test route top
+16	52	4226.69928	-7630.41112	1010	6	2	test route mid
+16	53	4226.664	-7630.38664	1010	6	3	test route bottom
+17	1	4226.73072	-7630.4356	1000	1	1	test route top
+17	2	4226.69928	-7630.41112	1000	1	2	test route mid
+17	3	4226.664	-7630.38664	1000	1	3	test route bottom
+17	11	4226.73072	-7630.4356	1010	2	1	test route top
+17	12	4226.69928	-7630.41112	1010	2	2	test route mid
+17	13	4226.664	-7630.38664	1010	2	3	test route bottom
+17	21	4226.73072	-7630.4356	1000	3	1	test route top
+17	22	4226.69928	-7630.41112	1000	3	2	test route mid
+17	23	4226.664	-7630.38664	1000	3	3	test route bottom
+17	31	4226.73072	-7630.4356	1010	4	1	test route top
+17	32	4226.69928	-7630.41112	1010	4	2	test route mid
+17	33	4226.664	-7630.38664	1010	4	3	test route bottom
+17	41	4226.73072	-7630.4356	1000	5	1	test route top
+17	42	4226.69928	-7630.41112	1000	5	2	test route mid
+17	43	4226.664	-7630.38664	1000	5	3	test route bottom
+17	51	4226.73072	-7630.4356	1010	6	1	test route top
+17	52	4226.69928	-7630.41112	1010	6	2	test route mid
+17	53	4226.664	-7630.38664	1010	6	3	test route bottom
+18	1	4226.73072	-7630.4356	1000	1	1	test route top
+18	2	4226.69928	-7630.41112	1000	1	2	test route mid
+18	3	4226.664	-7630.38664	1000	1	3	test route bottom
+18	11	4226.73072	-7630.4356	1010	2	1	test route top
+18	12	4226.69928	-7630.41112	1010	2	2	test route mid
+18	13	4226.664	-7630.38664	1010	2	3	test route bottom
+18	21	4226.73072	-7630.4356	1000	3	1	test route top
+18	22	4226.69928	-7630.41112	1000	3	2	test route mid
+18	23	4226.664	-7630.38664	1000	3	3	test route bottom
+18	31	4226.73072	-7630.4356	1010	4	1	test route top
+18	32	4226.69928	-7630.41112	1010	4	2	test route mid
+18	33	4226.664	-7630.38664	1010	4	3	test route bottom
+18	41	4226.73072	-7630.4356	1000	5	1	test route top
+18	42	4226.69928	-7630.41112	1000	5	2	test route mid
+18	43	4226.664	-7630.38664	1000	5	3	test route bottom
+18	51	4226.73072	-7630.4356	1010	6	1	test route top
+18	52	4226.69928	-7630.41112	1010	6	2	test route mid
+18	53	4226.664	-7630.38664	1010	6	3	test route bottom
+19	1	4226.73072	-7630.4356	1000	1	1	test route top
+19	2	4226.69928	-7630.41112	1000	1	2	test route mid
+19	3	4226.664	-7630.38664	1000	1	3	test route bottom
+19	11	4226.73072	-7630.4356	1010	2	1	test route top
+19	12	4226.69928	-7630.41112	1010	2	2	test route mid
+19	13	4226.664	-7630.38664	1010	2	3	test route bottom
+19	21	4226.73072	-7630.4356	1000	3	1	test route top
+19	22	4226.69928	-7630.41112	1000	3	2	test route mid
+19	23	4226.664	-7630.38664	1000	3	3	test route bottom
+19	31	4226.73072	-7630.4356	1010	4	1	test route top
+19	32	4226.69928	-7630.41112	1010	4	2	test route mid
+19	33	4226.664	-7630.38664	1010	4	3	test route bottom
+19	41	4226.73072	-7630.4356	1000	5	1	test route top
+19	42	4226.69928	-7630.41112	1000	5	2	test route mid
+19	43	4226.664	-7630.38664	1000	5	3	test route bottom
+19	51	4226.73072	-7630.4356	1010	6	1	test route top
+19	52	4226.69928	-7630.41112	1010	6	2	test route mid
+19	53	4226.664	-7630.38664	1010	6	3	test route bottom
+20	1	4226.73072	-7630.4356	1000	1	1	test route top
+20	2	4226.69928	-7630.41112	1000	1	2	test route mid
+20	3	4226.664	-7630.38664	1000	1	3	test route bottom
+20	11	4226.73072	-7630.4356	1010	2	1	test route top
+20	12	4226.69928	-7630.41112	1010	2	2	test route mid
+20	13	4226.664	-7630.38664	1010	2	3	test route bottom
+20	21	4226.73072	-7630.4356	1000	3	1	test route top
+20	22	4226.69928	-7630.41112	1000	3	2	test route mid
+20	23	4226.664	-7630.38664	1000	3	3	test route bottom
+20	31	4226.73072	-7630.4356	1010	4	1	test route top
+20	32	4226.69928	-7630.41112	1010	4	2	test route mid
+20	33	4226.664	-7630.38664	1010	4	3	test route bottom
+20	41	4226.73072	-7630.4356	1000	5	1	test route top
+20	42	4226.69928	-7630.41112	1000	5	2	test route mid
+20	43	4226.664	-7630.38664	1000	5	3	test route bottom
+20	51	4226.73072	-7630.4356	1010	6	1	test route top
+20	52	4226.69928	-7630.41112	1010	6	2	test route mid
+20	53	4226.664	-7630.38664	1010	6	3	test route bottom
+21	1	4226.73072	-7630.4356	1000	1	1	test route top
+21	2	4226.69928	-7630.41112	1000	1	2	test route mid
+21	3	4226.664	-7630.38664	1000	1	3	test route bottom
+21	11	4226.73072	-7630.4356	1010	2	1	test route top
+21	12	4226.69928	-7630.41112	1010	2	2	test route mid
+21	13	4226.664	-7630.38664	1010	2	3	test route bottom
+21	21	4226.73072	-7630.4356	1000	3	1	test route top
+21	22	4226.69928	-7630.41112	1000	3	2	test route mid
+21	23	4226.664	-7630.38664	1000	3	3	test route bottom
+21	31	4226.73072	-7630.4356	1010	4	1	test route top
+21	32	4226.69928	-7630.41112	1010	4	2	test route mid
+21	33	4226.664	-7630.38664	1010	4	3	test route bottom
+21	41	4226.73072	-7630.4356	1000	5	1	test route top
+21	42	4226.69928	-7630.41112	1000	5	2	test route mid
+21	43	4226.664	-7630.38664	1000	5	3	test route bottom
+21	51	4226.73072	-7630.4356	1010	6	1	test route top
+21	52	4226.69928	-7630.41112	1010	6	2	test route mid
+21	53	4226.664	-7630.38664	1010	6	3	test route bottom
+22	1	4226.73072	-7630.4356	1000	1	1	test route top
+22	2	4226.69928	-7630.41112	1000	1	2	test route mid
+22	3	4226.664	-7630.38664	1000	1	3	test route bottom
+22	11	4226.73072	-7630.4356	1010	2	1	test route top
+22	12	4226.69928	-7630.41112	1010	2	2	test route mid
+22	13	4226.664	-7630.38664	1010	2	3	test route bottom
+22	21	4226.73072	-7630.4356	1000	3	1	test route top
+22	22	4226.69928	-7630.41112	1000	3	2	test route mid
+22	23	4226.664	-7630.38664	1000	3	3	test route bottom
+22	31	4226.73072	-7630.4356	1010	4	1	test route top
+22	32	4226.69928	-7630.41112	1010	4	2	test route mid
+22	33	4226.664	-7630.38664	1010	4	3	test route bottom
+22	41	4226.73072	-7630.4356	1000	5	1	test route top
+22	42	4226.69928	-7630.41112	1000	5	2	test route mid
+22	43	4226.664	-7630.38664	1000	5	3	test route bottom
+22	51	4226.73072	-7630.4356	1010	6	1	test route top
+22	52	4226.69928	-7630.41112	1010	6	2	test route mid
+22	53	4226.664	-7630.38664	1010	6	3	test route bottom
+23	1	4226.73072	-7630.4356	1000	1	1	test route top
+23	2	4226.69928	-7630.41112	1000	1	2	test route mid
+23	3	4226.664	-7630.38664	1000	1	3	test route bottom
+23	11	4226.73072	-7630.4356	1010	2	1	test route top
+23	12	4226.69928	-7630.41112	1010	2	2	test route mid
+23	13	4226.664	-7630.38664	1010	2	3	test route bottom
+23	21	4226.73072	-7630.4356	1000	3	1	test route top
+23	22	4226.69928	-7630.41112	1000	3	2	test route mid
+23	23	4226.664	-7630.38664	1000	3	3	test route bottom
+23	31	4226.73072	-7630.4356	1010	4	1	test route top
+23	32	4226.69928	-7630.41112	1010	4	2	test route mid
+23	33	4226.664	-7630.38664	1010	4	3	test route bottom
+23	41	4226.73072	-7630.4356	1000	5	1	test route top
+23	42	4226.69928	-7630.41112	1000	5	2	test route mid
+23	43	4226.664	-7630.38664	1000	5	3	test route bottom
+23	51	4226.73072	-7630.4356	1010	6	1	test route top
+23	52	4226.69928	-7630.41112	1010	6	2	test route mid
+23	53	4226.664	-7630.38664	1010	6	3	test route bottom

+ 1 - 0
busunit/testing/config/config.tgz.checksum

@@ -0,0 +1 @@
+0

+ 1 - 0
busunit/testing/config/config.tgz.version

@@ -0,0 +1 @@
+0.0

+ 1 - 0
busunit/testing/config/equipnum.txt

@@ -0,0 +1 @@
+9999

+ 1 - 0
busunit/testing/config/firmware.tgz.version

@@ -0,0 +1 @@
+0

+ 1 - 0
busunit/testing/config/serial.txt

@@ -0,0 +1 @@
+9090