More between points work + mobile UI work:
More between points work + mobile UI work:

file:b/OpenStreetMap.js (new)
  /**
  * Namespace: Util.OSM
  */
  OpenLayers.Util.OSM = {};
 
  /**
  * Constant: MISSING_TILE_URL
  * {String} URL of image to display for missing tiles
  */
  OpenLayers.Util.OSM.MISSING_TILE_URL = "/404.php";
 
  /**
  * Property: originalOnImageLoadError
  * {Function} Original onImageLoadError function.
  */
  OpenLayers.Util.OSM.originalOnImageLoadError = OpenLayers.Util.onImageLoadError;
 
  /**
  * Function: onImageLoadError
  */
  OpenLayers.Util.onImageLoadError = function() {
  if (this.src.match(/^http:\/\/[abc]\.[a-z]+\.openstreetmap\.org\//)) {
  this.src = OpenLayers.Util.OSM.MISSING_TILE_URL;
  } else if (this.src.match(/^http:\/\/[def]\.tah\.openstreetmap\.org\//)) {
  // do nothing - this layer is transparent
  } else {
  OpenLayers.Util.OSM.originalOnImageLoadError;
  }
  };
 
  /**
  * Class: OpenLayers.Layer.OSM.Mapnik
  *
  * Inherits from:
  * - <OpenLayers.Layer.OSM>
  */
  OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, {
  /**
  * Constructor: OpenLayers.Layer.OSM.Mapnik
  *
  * Parameters:
  * name - {String}
  * options - {Object} Hashtable of extra options to tag onto the layer
  */
  initialize: function(name, options) {
  var url = [
  "http://a.tiles.bigtincan.com/${z}/${x}/${y}.png",
  "http://b.tiles.bigtincan.com/${z}/${x}/${y}.png",
  "http://c.tiles.bigtincan.com/${z}/${x}/${y}.png"
  ];
  options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options);
  var newArguments = [name, url, options];
  OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
  },
 
  CLASS_NAME: "OpenLayers.Layer.OSM.Mapnik"
  });
 
  OpenLayers.Layer.OSM.NearMap = OpenLayers.Class(OpenLayers.Layer.OSM, {
  /**
  * Constructor: OpenLayers.Layer.OSM.Mapnik
  *
  * Parameters:
  * name - {String}
  * options - {Object} Hashtable of extra options to tag onto the layer
  */
  initialize: function(name, options) {
  var url = [
  "http://nearmap:findreality@web0.nearmap.com/maps/hl=en&nml=Vert&x=${x}&y=${y}&z=${z}",
  "http://nearmap:findreality@web1.nearmap.com/maps/hl=en&nml=Vert&x=${x}&y=${y}&z=${z}",
  "http://nearmap:findreality@web2.nearmap.com/maps/hl=en&nml=Vert&x=${x}&y=${y}&z=${z}",
  "http://nearmap:findreality@web3.nearmap.com/maps/hl=en&nml=Vert&x=${x}&y=${y}&z=${z}"
  ];
  options = OpenLayers.Util.extend({ numZoomLevels: 22 }, options);
  var newArguments = [name, url, options];
  OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
  },
 
  CLASS_NAME: "OpenLayers.Layer.OSM.NearMap"
  });
 
  /**
  * Class: OpenLayers.Layer.OSM.Osmarender
  *
  * Inherits from:
  * - <OpenLayers.Layer.OSM>
  */
  OpenLayers.Layer.OSM.Osmarender = OpenLayers.Class(OpenLayers.Layer.OSM, {
  /**
  * Constructor: OpenLayers.Layer.OSM.Osmarender
  *
  * Parameters:
  * name - {String}
  * options - {Object} Hashtable of extra options to tag onto the layer
  */
  initialize: function(name, options) {
  var url = [
  "http://a.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png",
  "http://b.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png",
  "http://c.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png"
  ];
  options = OpenLayers.Util.extend({ numZoomLevels: 18 }, options);
  var newArguments = [name, url, options];
  OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
  },
 
  CLASS_NAME: "OpenLayers.Layer.OSM.Osmarender"
  });
 
  /**
  * Class: OpenLayers.Layer.OSM.CycleMap
  *
  * Inherits from:
  * - <OpenLayers.Layer.OSM>
  */
  OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, {
  /**
  * Constructor: OpenLayers.Layer.OSM.CycleMap
  *
  * Parameters:
  * name - {String}
  * options - {Object} Hashtable of extra options to tag onto the layer
  */
  initialize: function(name, options) {
  var url = [
  "http://a.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png",
  "http://b.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png",
  "http://c.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png"
  ];
  options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options);
  var newArguments = [name, url, options];
  OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
  },
 
  CLASS_NAME: "OpenLayers.Layer.OSM.CycleMap"
  });
 
  /**
  * Class: OpenLayers.Layer.OSM.Maplint
  *
  * Inherits from:
  * - <OpenLayers.Layer.OSM>
  */
  OpenLayers.Layer.OSM.Maplint = OpenLayers.Class(OpenLayers.Layer.OSM, {
  /**
  * Constructor: OpenLayers.Layer.OSM.Maplint
  *
  * Parameters:
  * name - {String}
  * options - {Object} Hashtable of extra options to tag onto the layer
  */
  initialize: function(name, options) {
  var url = [
  "http://d.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png",
  "http://e.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png",
  "http://f.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png"
  ];
  options = OpenLayers.Util.extend({ numZoomLevels: 18, isBaseLayer: false, visibility: false }, options);
  var newArguments = [name, url, options];
  OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
  },
 
  CLASS_NAME: "OpenLayers.Layer.OSM.Maplint"
  });
 
  <?php
  /*
  * GeoPo Encode in PHP
  * @author : Shintaro Inagaki
  * @param $location (Array)
  * @return $geopo (String)
  */
  function geopoEncode($lat, $lng) {
  // 64characters (number + big and small letter + hyphen + underscore)
  $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
 
  $geopo = "";
  $scale = 7;
 
  // Change a degree measure to a decimal number
  $lat = ($lat + 90) / 180 * pow(8, 10);
  $lng = ($lng + 180) / 360 * pow(8, 10);
  // Compute a GeoPo code from head and concatenate
  for($i = 0; $i < $scale; $i++) {
  $geopo .= substr($chars, floor($lat / pow(8, 9 - $i) % 8) + floor($lng / pow(8, 9 - $i) % 8) * 8, 1);
  }
  return $geopo;
  }
 
  /*
  * GeoPo Decode in PHP
  * @author : Shintaro Inagaki
  * @param $geopo (String)
  * @return $location (Array)
  */
  function geopoDecode($geopo) {
  // 64characters (number + big and small letter + hyphen + underscore)
  $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
  // Array for geolocation
  $location = array ();
 
  for ($i = 0; $i < strlen($geopo); $i++) {
  // What number of character that equal to a GeoPo code (0-63)
  $order = strpos($chars, substr($geopo, $i, 1));
  // Lat/Lng plus geolocation value of scale
  $location['lat'] = $location['lat'] + floor($order % 8) * pow(8, 9 - $i);
  $location['lng'] = $location['lng'] + floor($order / 8) * pow(8, 9 - $i);
  }
 
  // Change a decimal number to a degree measure, and plus revised value that shift center of area
  $location['lat'] = $location['lat'] * 180 / pow(8, 10) + 180 / pow(8, strlen($geopo)) / 2 - 90;
  $location['lng'] = $location['lng'] * 360 / pow(8, 10) + 360 / pow(8, strlen($geopo)) / 2 - 180;
  $location['scale'] = strlen($geopo);
 
  return $location;
  }
 
  $conn = pg_connect("dbname=bus user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $xml = simplexml_load_file("04-locatebetweenpoints.osm");
 
  /* Access the <rating> nodes of the first movie.
  * Output the rating scale, too. */
  foreach ($xml->node as $node) {
  $geoPo = geopoEncode((float)$node['lat'],(float)$node['lon']);
  $node['lat'] = (int) ((float)$node['lat']*10000000);
  $node['lon'] = (int) ((float)$node['lon']*10000000);
  echo($node['lat'].",".$node['lon']."=$geoPo<br>");
  $sql = "INSERT INTO stops (geohash, lat, lng) VALUES('$geoPo','{$node['lat']}','{$node['lon']}')";
  $result = pg_query($conn, $sql);
  if (!$result) {
  echo("Error in SQL query: " . pg_last_error() ."<br>\n");
  }
  flush();
 
  }
  ?>
 
file:b/betweenpoint.php (new)
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <script src="openlayers/OpenLayers.js"></script>
  <SCRIPT TYPE="text/javascript" SRC="OpenStreetMap.js"></SCRIPT>
  <script type="text/javascript" src="jquery.1.3.2.min.js"></script>
  <script type="text/javascript">
 
  function init()
  {
  // create the ol map object
  var map = new OpenLayers.Map('map');
 
  var osmtiles = new OpenLayers.Layer.OSM("local", "http://127.0.0.1/Maps/OSM/${z}/${x}/${y}.png")
  // use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles
  markers = new OpenLayers.Layer.Markers("Between Stop Markers");
 
 
  <?php
  $conn = pg_connect("dbname=bus user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $result_stops = pg_query($conn, "Select * FROM stops");
 
  while ($stop = pg_fetch_assoc($result_stops)) {
  echo 'marker = new OpenLayers.Marker(new OpenLayers.LonLat('.($stop['lng']/10000000).",".($stop['lat']/10000000).')
  .transform(
  new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
  new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
  ));';
 
  echo '
  marker.id="'.$stop['geohash'].'";
  markers.addMarker(marker);
  marker.events.register("mousedown", marker, function() {
  document.getElementById("between_points").innerHTML += this.id+";";
  });
  ';
  }
  ?>
  var timeicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png",new OpenLayers.Size(32,32));
  var timepoints = new OpenLayers.Layer.GeoRSS("Timing Points", "displaytimepoints.georss.php", { icon: timeicon });
 
  map.addLayers([osmtiles, markers,timepoints]);
  map.addControl(new OpenLayers.Control.LayerSwitcher());
  map.zoomToExtent(markers.getDataExtent());
  }
 
  function submit(){
  $.ajax({
  type: "POST",
  url: "betweenpoint.submit.php",
  data: "reverse=" + document.getElementById("reverse").value +
  "&from=" + document.getElementById("from").value +
  "&to=" + document.getElementById("to").value +
  "&routes=" + document.getElementById("routes").value +
  "&between_points=" + document.getElementById("between_points").value,
  success: function(html){
  $("#response").html(html);
  clearForms();
  }
  });
 
  }
  <!--
  function OnChange(dropdown)
  {
  var myindex = dropdown.selectedIndex
  var selValue = dropdown.options[myindex].value
  alert(selValue);
  return true;
  }
  //-->
 
  // function will clear input elements on each form
  function clearForms(){
  document.getElementById("between_points").innerHTML = "";
  // declare element type
  var type = null;
  // loop through forms on HTML page
  for (var x=0; x<document.forms.length; x++){
  // loop through each element on form
  for (var y=0; y<document.forms[x].elements.length; y++){
  // define element type
  type = document.forms[x].elements[y].type
  // alert before erasing form element
  //alert('form='+x+' element='+y+' type='+type);
  // switch on element type
  switch(type){
  case "text":
  case "textarea":
  case "password":
  //case "hidden":
  document.forms[x].elements[y].value = "";
  break;
  case "radio":
  case "checkbox":
  document.forms[x].elements[y].checked = "";
  break;
  case "select-one":
  document.forms[x].elements[y].options[0].selected = true;
  break;
  case "select-multiple":
  for (z=0; z<document.forms[x].elements[y].options.length; z++){
  document.forms[x].elements[y].options[z].selected = false;
  }
  break;
  }
  }
  }
  }
  </script>
 
  </head>
  <body onload="init()">
  <div id="inputpane"><form id="inputform">
  <select name=selectPair onchange='OnChange(this.form.selectPair);'>
  <option>Select a from/to pair...</option>
  <?php
  include('spyc/spyc.php');
  //$timetable = Spyc::YAMLLoad('../spyc.yaml');
  $path = "maxious-canberra-transit-feed/output/";
  $dhandle = opendir("maxious-canberra-transit-feed/output/");
  // define an array to hold the files
  $files = array();
  $paths = array();
 
  if ($dhandle) {
  // loop through all of the files
  while (false !== ($fname = readdir($dhandle))) {
  if (($fname != '.') && ($fname != '..')) {
  $timetable = Spyc::YAMLLoad("maxious-canberra-transit-feed/output/".$fname);
  for ($i = 0; $i < sizeof($timetable["time_points"]) -1 ; $i++)
  {
  @$paths[$timetable["time_points"][$i]."->".$timetable["time_points"][$i+1]] .= $timetable["short_name"].";";
  }
  }
  }
  }
  $completedPaths = Array("Cameron Ave Bus Station->Lathlain St Bus Station",
  "Lathlain St Bus Station->Cohen St Bus Station",
  "Cohen St Bus Station->Lathlain St Bus Station",
  "Lathlain St Bus Station->Cameron Ave Bus Station",
  "Lathlain St Bus Station - Platform 1->Cameron Ave Bus Station - Platform 1",
  "Lathlain St Bus Station - Platform 2->Cameron Ave Bus Station - Platform 1",
  "Lathlain St Bus Station - Platform 2->Cameron Ave Bus Station - Platform 2",
  "Lathlain St Bus Station - Platform 3->Cameron Ave Bus Station - Platform 2",
  "Lathlain St Bus Station - Platform 3->Cameron Ave Bus Station - Platform 3",
  "Lathlain St Bus Station - Platform 4->Cohen St Bus Station - Platform 4",
  "Lathlain St Bus Station - Platform 4->Cohen St Bus Station - Platform 6",
  "Lathlain St Bus Station - Platform 5->Cohen St Bus Station - Platform 5",
  "Lathlain St Bus Station - Platform 6->Cohen St Bus Station - Platform 5",
  "Cohen St Bus Station - Platform 1->Lathlain St Bus Station - Platform 2",
  "Cohen St Bus Station - Platform 1->Lathlain St Bus Station - Platform 3",
  "Cohen St Bus Station - Platform 2->Lathlain St Bus Station - Platform 1",
  "Cohen St Bus Station - Platform 2->Lathlain St Bus Station - Platform 2",
  "Cohen St Bus Station - Platform 2->Lathlain St Bus Station - Platform 3",
  "Cohen St Bus Station - Platform 3->Lathlain St Bus Station - Platform 1",
  "Cameron Ave Bus Station - Platform 4->Lathlain St Bus Station - Platform 4",
  "Cameron Ave Bus Station - Platform 5->Lathlain St Bus Station - Platform 5",
  "Cameron Ave Bus Station - Platform 5->Lathlain St Bus Station - Platform 6"
  );
  ksort($paths);
  foreach ($paths as $path => $routes)
  {
  if (!in_array($path,$completedPaths)) echo "<option value=\"$routes:$path\">".sizeof(explode(";",$routes))." $path</option>\n";
  }
  ?>
  </select>
  from <input type="text" id="from"/>
  to <input type="text" id="to"/>
  <br>
  on routes <input type="text" id="routes"/>
  Reverse? <input type="checkbox" name="reverse" id="reverse" value="true"/>
  <input type="button" onclick="javascript:submit()" name="mysubmit" value="Submit!">
  <input type="button" value="Clear" onclick="javascript:clearForms()" title="Start clearForms() JavaScript function">
  <br>
  <textarea id="between_points" rows="1" cols="120"></textarea>
  </form>
  <br><div id="response">
  <!-- Our message will be echoed out here -->
  </div>
  </div>
  <div id="map" width="100%" height="100%"></div>
  </body>
  </html>
 
 
  <?php
  /*
  * GeoPo Encode in PHP
  * @author : Shintaro Inagaki
  * @param $location (Array)
  * @return $geopo (String)
  */
  function geopoEncode($lat, $lng) {
  // 64characters (number + big and small letter + hyphen + underscore)
  $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
 
  $geopo = "";
  $scale = 7;
 
  // Change a degree measure to a decimal number
  $lat = ($lat + 90) / 180 * pow(8, 10);
  $lng = ($lng + 180) / 360 * pow(8, 10);
  // Compute a GeoPo code from head and concatenate
  for($i = 0; $i < $scale; $i++) {
  $geopo .= substr($chars, floor($lat / pow(8, 9 - $i) % 8) + floor($lng / pow(8, 9 - $i) % 8) * 8, 1);
  }
  return $geopo;
  }
 
  /*
  * GeoPo Decode in PHP
  * @author : Shintaro Inagaki
  * @param $geopo (String)
  * @return $location (Array)
  */
  function geopoDecode($geopo) {
  // 64characters (number + big and small letter + hyphen + underscore)
  $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
  // Array for geolocation
  $location = array ();
 
  for ($i = 0; $i < strlen($geopo); $i++) {
  // What number of character that equal to a GeoPo code (0-63)
  $order = strpos($chars, substr($geopo, $i, 1));
  // Lat/Lng plus geolocation value of scale
  $location['lat'] = $location['lat'] + floor($order % 8) * pow(8, 9 - $i);
  $location['lng'] = $location['lng'] + floor($order / 8) * pow(8, 9 - $i);
  }
 
  // Change a decimal number to a degree measure, and plus revised value that shift center of area
  $location['lat'] = $location['lat'] * 180 / pow(8, 10) + 180 / pow(8, strlen($geopo)) / 2 - 90;
  $location['lng'] = $location['lng'] * 360 / pow(8, 10) + 360 / pow(8, strlen($geopo)) / 2 - 180;
  $location['scale'] = strlen($geopo);
 
  return $location;
  }
 
  $conn = pg_connect("dbname=bus user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $xml = simplexml_load_file("04-locatebetweenpoints.osm");
 
  /* Access the <rating> nodes of the first movie.
  * Output the rating scale, too. */
  foreach ($xml->node as $node) {
  $geoPo = geopoEncode((float)$node['lat'],(float)$node['lon']);
  $node['lat'] = (int) ((float)$node['lat']*10000000);
  $node['lon'] = (int) ((float)$node['lon']*10000000);
  echo($node['lat'].",".$node['lon']."=$geoPo<br>");
  $sql = "INSERT INTO stops (geohash, lat, lng) VALUES('$geoPo','{$node['lat']}','{$node['lon']}')";
  $result = pg_query($conn, $sql);
  if (!$result) {
  echo("Error in SQL query: " . pg_last_error() ."<br>\n");
  }
  flush();
 
  }
  ?>
 
  <?php
  date_default_timezone_set('Australia/ACT');
  $APIurl = "http://localhost:8765";
 
  function isDebug()
  {
  return true;
  }
 
  function isFastDevice() {
  return true;
  }
 
  function include_header($pageTitle) {
  // if (isDebug()) // set php error level high
  echo '
  <!DOCTYPE html>
  <html>
  <head>
  <title>bus.lambdacomplex.org - '.$pageTitle.'</title>
  <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.css" />
  <script src="http://code.jquery.com/jquery-1.4.3.min.js"></script><script type="text/javascript"
  src="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.js"></script>
  <script type="text/javascript" src="docs/docs.js"></script>
  </head>
  <body>
 
  <div data-role="page">
 
  <div data-role="header">
  <h1>'.$pageTitle.'</h1>
  </div><!-- /header -->
  <div data-role="content"> ';
  }
 
  function include_footer()
  {
  echo '</div>';
  }
 
  function service_period()
  {
  switch (date('w')){
 
  case 0:
  return 'sunday';
  case 6:
  return 'saturday';
  default:
  return 'weekday';
  }
  }
 
  function midnight_seconds()
  {
  // from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html
  $secs = (date("G") * 3600) + (date("i") * 60) + date("s");
  return $secs;
  }
 
  function midnight_seconds_to_time($seconds)
  {
  $midnight = mktime (0, 0, 0, date("n"), date("j"), date("Y"));
  return date("h:ia",$midnight+$seconds);
  }
  function getPage($url)
  {
  $ch = curl_init($url);
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt( $ch, CURLOPT_HEADER, 0 );
  $page = curl_exec($ch);
  curl_close($ch);
  return $page;
  }
  function array_flatten($a,$f=array()){
  if(!$a||!is_array($a))return '';
  foreach($a as $k=>$v){
  if(is_array($v))$f=array_flatten($v,$f);
  else $f[$k]=$v;
  }
  return $f;
  }
  ?>
 
file:b/busui/index.php (new)
  <?php
  include('common.inc.php');
  ?>
  <!doctype html>
  <html>
  <head>
  <meta charset="UTF-8" />
  <title>bus.lambdacomplex.org</title>
  <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.css" />
  <script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
  <script src="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.js"></script>
  <!-- <script src="jqtouch/extensions/jqt.location.js" type="application/x-javascript" charset="utf-8"></script> -->
 
  <!-- <script type="text/javascript" charset="utf-8">
  $(function(){
  function setDisplay(text) {
  $('.latlng').empty().append(text)
  }
 
  // We pass "updateLocation" a callback function,
  // to run once we have the coordinates.
  // We also set it to a variable, so we can know
  // right away if it's working or not
  var lookup = jQT.updateLocation(function(coords){
  if (coords) {
  setDisplay('Latitude: ' + coords.latitude + '<br />Longitude: ' + coords.longitude);
  $('.nearby').empty().append('<a href="list.php?lat=' + coords.latitude + '&lng=' + coords.longitude + '">Nearby List</a>');
  } else {
  setDisplay('Device not capable of geo-location.');
  }
  });
 
  if (lookup) {
  setDisplay('Looking up location&hellip;');
  }
  });
  </script> -->
  </head>
  <body>
  <div data-role="page" data-theme="b" id="jqm-home">
  <div id="jqm-homeheader">
  <p>bus.lambdacomplex.org</p>
  </div>
  <div data-role="content">
  <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
  <li data-role="list-divider">Stops</li>
  <li><a href="stopList.php">All stops List</a></li>
  <li class="nearby"><a href="">Nearby List</a></li>
  <li><a href="stopList.php">Favourites List</a></li>
  </ul>
  <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
  <li data-role="list-divider">Routes</li>
  <li><a href="routeList.php">All Routes List</a></li>
  <li class="nearby"><a href="">Nearby List</a></li>
  <li><a href="routeList.php">Favourites List</a></li>
  </ul>
  <div class="info">
  <p class="latlng"></p>
  Time: <?php echo date("H:m"); ?> <br>
  Service Period: <?php echo ucwords(service_period()); ?>
  </div>
  </div>
  </div>
  </body>
  </html>
 
file:b/busui/list.php (new)
  <div id="get">
  <div class="toolbar">
  <h1>GET Example</h1>
  <a class="back" href="#">AJAX</a>
  </div>
  <div class="info">
  This page was loaded via AJAX.
  </div>
  <ul class="rounded">
  <li><a href="#livetest">Test live events</a></li>
  </ul>
  </div>
  <div id="livetest">
  <div class="toolbar">
  <h1>Events test</h1>
  <a class="back" href="#">AJAX</a>
  <a class="button goback" href="#home">Home</a>
  </div>
  <div class="info">
  This is a test of live events.
  </div>
  </div>
file:b/busui/readme.txt (new)
  # input location (via GPS or favourites or search) and destination (via searchable list, optional)
  # http://10.0.1.153:8765/json/boundboxstops?n=-35.27568499917103&e=149.1346514225006&s=-35.279495003493516
  &w=149.12622928619385&limit=50
  # http://10.0.1.153:8765/json/stoptrips?stop=43&time=64440 # recursively call to show all services nearby, sort by distance, need to filter by service period
  # Hey, can pick destination again from a list filtered to places these stops go if you're curious!
  # http://10.0.1.153:8765/json/tripstoptimes?trip=2139 # Can recursively call and parse based on intended destination to show ETA
  # http://10.0.1.153:8765/json/triprows?trip=2139 # For pretty maps
 
  have to do
  /usr/sbin/setsebool -P httpd_can_network_connect=1
  on fedora
 
  might need http://forum.jquery.com/topic/google-maps-inside-jquery-mobile
 
  some extras
  /json/routes = all routes
  /json/neareststops?lat/lng/number
  TODO
  Destinations
  Favourites
  OOP stops/routes
  Stop sorting/search-filter
 
file:b/busui/route.php (new)
 
  <?php
  include('common.inc.php');
  include_header("Routes");
  /* data-filter="true">';
  echo "<script> $('#routeList').listnav({prefixes: ['to'] }); </script>";*/
  echo ' <ul data-role="listview">';
  $url = $APIurl."/json/routes";
 
  $contents = json_decode(getPage($url));
  foreach ($contents as $key => $row) {
  $routeDestinations[$row[2]][] = $row;
  }
  foreach ($routeDestinations as $destination => $routes)
  {
  echo '<li>'.$destination."... <ul>\n";
  foreach($routes as $row) {
  echo '<li>'.$row[1].' <a href="route.php?routeid='.$row[0].'">'.$row[2]."</a></li>\n";
  }
  echo "</ul></li>\n";
  }
  echo "</ul>\n";
  /*
  <div data-role="footer" data-id="foo1" data-position="fixed">
  <div data-role="navbar">
  <ul>
  <li><a href="footer-persist-a.html" class="ui-btn-active">Friends</a></li>
  <li><a href="footer-persist-b.html">Albums</a></li>
  <li><a href="footer-persist-c.html">Emails</a></li>
  </ul>
  </div><!-- /navbar -->
  */
  include_footer();
  ?>
 
  #!/usr/bin/python2.5
 
  # Copyright (C) 2007 Google Inc.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  # http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
 
  """
  An example application that uses the transitfeed module.
 
  You must provide a Google Maps API key.
  """
 
 
  import BaseHTTPServer, sys, urlparse
  import bisect
  from gtfsscheduleviewer.marey_graph import MareyGraph
  import gtfsscheduleviewer
  import mimetypes
  import os.path
  import re
  import signal
  import simplejson
  import socket
  import time
  import transitfeed
  from transitfeed import util
  import urllib
 
 
  # By default Windows kills Python with Ctrl+Break. Instead make Ctrl+Break
  # raise a KeyboardInterrupt.
  if hasattr(signal, 'SIGBREAK'):
  signal.signal(signal.SIGBREAK, signal.default_int_handler)
 
 
  mimetypes.add_type('text/plain', '.vbs')
 
 
  class ResultEncoder(simplejson.JSONEncoder):
  def default(self, obj):
  try:
  iterable = iter(obj)
  except TypeError:
  pass
  else:
  return list(iterable)
  return simplejson.JSONEncoder.default(self, obj)
 
  # Code taken from
  # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/425210/index_txt
  # An alternate approach is shown at
  # http://mail.python.org/pipermail/python-list/2003-July/212751.html
  # but it requires multiple threads. A sqlite object can only be used from one
  # thread.
  class StoppableHTTPServer(BaseHTTPServer.HTTPServer):
  def server_bind(self):
  BaseHTTPServer.HTTPServer.server_bind(self)
  self.socket.settimeout(1)
  self._run = True
 
  def get_request(self):
  while self._run:
  try:
  sock, addr = self.socket.accept()
  sock.settimeout(None)
  return (sock, addr)
  except socket.timeout:
  pass
 
  def stop(self):
  self._run = False
 
  def serve(self):
  while self._run:
  self.handle_request()
 
 
  def StopToTuple(stop):
  """Return tuple as expected by javascript function addStopMarkerFromList"""
  return (stop.stop_id, stop.stop_name, float(stop.stop_lat),
  float(stop.stop_lon), stop.location_type)
 
 
  class ScheduleRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
  def do_GET(self):
  scheme, host, path, x, params, fragment = urlparse.urlparse(self.path)
  parsed_params = {}
  for k in params.split('&'):
  k = urllib.unquote(k)
  if '=' in k:
  k, v = k.split('=', 1)
  parsed_params[k] = unicode(v, 'utf8')
  else:
  parsed_params[k] = ''
 
  if path == '/':
  return self.handle_GET_home()
 
  m = re.match(r'/json/([a-z]{1,64})', path)
  if m:
  handler_name = 'handle_json_GET_%s' % m.group(1)
  handler = getattr(self, handler_name, None)
  if callable(handler):
  return self.handle_json_wrapper_GET(handler, parsed_params)
 
  # Restrict allowable file names to prevent relative path attacks etc
  m = re.match(r'/file/([a-z0-9_-]{1,64}\.?[a-z0-9_-]{1,64})$', path)
  if m and m.group(1):
  try:
  f, mime_type = self.OpenFile(m.group(1))
  return self.handle_static_file_GET(f, mime_type)
  except IOError, e:
  print "Error: unable to open %s" % m.group(1)
  # Ignore and treat as 404
 
  m = re.match(r'/([a-z]{1,64})', path)
  if m:
  handler_name = 'handle_GET_%s' % m.group(1)
  handler = getattr(self, handler_name, None)
  if callable(handler):
  return handler(parsed_params)
 
  return self.handle_GET_default(parsed_params, path)
 
  def OpenFile(self, filename):
  """Try to open filename in the static files directory of this server.
  Return a tuple (file object, string mime_type) or raise an exception."""
  (mime_type, encoding) = mimetypes.guess_type(filename)
  assert mime_type
  # A crude guess of when we should use binary mode. Without it non-unix
  # platforms may corrupt binary files.
  if mime_type.startswith('text/'):
  mode = 'r'
  else:
  mode = 'rb'
  return open(os.path.join(self.server.file_dir, filename), mode), mime_type
 
  def handle_GET_default(self, parsed_params, path):
  self.send_error(404)
 
  def handle_static_file_GET(self, fh, mime_type):
  content = fh.read()
  self.send_response(200)
  self.send_header('Content-Type', mime_type)
  self.send_header('Content-Length', str(len(content)))
  self.end_headers()
  self.wfile.write(content)
 
  def AllowEditMode(self):
  return False
 
  def handle_GET_home(self):
  schedule = self.server.schedule
  (min_lat, min_lon, max_lat, max_lon) = schedule.GetStopBoundingBox()
  forbid_editing = ('true', 'false')[self.AllowEditMode()]
 
  agency = ', '.join(a.agency_name for a in schedule.GetAgencyList()).encode('utf-8')
 
  key = self.server.key
  host = self.server.host
 
  # A very simple template system. For a fixed set of values replace [xxx]
  # with the value of local variable xxx
  f, _ = self.OpenFile('index.html')
  content = f.read()
  for v in ('agency', 'min_lat', 'min_lon', 'max_lat', 'max_lon', 'key',
  'host', 'forbid_editing'):
  content = content.replace('[%s]' % v, str(locals()[v]))
 
  self.send_response(200)
  self.send_header('Content-Type', 'text/html')
  self.send_header('Content-Length', str(len(content)))
  self.end_headers()
  self.wfile.write(content)
 
  def handle_json_GET_routepatterns(self, params):
  """Given a route_id generate a list of patterns of the route. For each
  pattern include some basic information and a few sample trips."""
  schedule = self.server.schedule
  route = schedule.GetRoute(params.get('route', None))
  if not route:
  self.send_error(404)
  return
  time = int(params.get('time', 0))
  sample_size = 10 # For each pattern return the start time for this many trips
 
  pattern_id_trip_dict = route.GetPatternIdTripDict()
  patterns = []
 
  for pattern_id, trips in pattern_id_trip_dict.items():
  time_stops = trips[0].GetTimeStops()
  if not time_stops:
  continue
  has_non_zero_trip_type = False;
  for trip in trips:
  if trip['trip_type'] and trip['trip_type'] != '0':
  has_non_zero_trip_type = True
  name = u'%s to %s, %d stops' % (time_stops[0][2].stop_name, time_stops[-1][2].stop_name, len(time_stops))
  transitfeed.SortListOfTripByTime(trips)
 
  num_trips = len(trips)
  if num_trips <= sample_size:
  start_sample_index = 0
  num_after_sample = 0
  else:
  # Will return sample_size trips that start after the 'time' param.
 
  # Linear search because I couldn't find a built-in way to do a binary
  # search with a custom key.
  start_sample_index = len(trips)
  for i, trip in enumerate(trips):
  if trip.GetStartTime() >= time:
  start_sample_index = i
  break
 
  num_after_sample = num_trips - (start_sample_index + sample_size)
  if num_after_sample < 0:
  # Less than sample_size trips start after 'time' so return all the
  # last sample_size trips.
  num_after_sample = 0
  start_sample_index = num_trips - sample_size
 
  sample = []
  for t in trips[start_sample_index:start_sample_index + sample_size]:
  sample.append( (t.GetStartTime(), t.trip_id) )
 
  patterns.append((name, pattern_id, start_sample_index, sample,
  num_after_sample, (0,1)[has_non_zero_trip_type]))
 
  patterns.sort()
  return patterns
 
  def handle_json_wrapper_GET(self, handler, parsed_params):
  """Call handler and output the return value in JSON."""
  schedule = self.server.schedule
  result = handler(parsed_params)
  content = ResultEncoder().encode(result)
  self.send_response(200)
  self.send_header('Content-Type', 'text/plain')
  self.send_header('Content-Length', str(len(content)))
  self.end_headers()
  self.wfile.write(content)
 
  def handle_json_GET_routes(self, params):
  """Return a list of all routes."""
  schedule = self.server.schedule
  result = []
  for r in schedule.GetRouteList():
  result.append( (r.route_id, r.route_short_name, r.route_long_name) )
  result.sort(key = lambda x: x[1:3])
  return result
 
  def handle_json_GET_routerow(self, params):
  schedule = self.server.schedule
  route = schedule.GetRoute(params.get('route', None))
  return [transitfeed.Route._FIELD_NAMES, route.GetFieldValuesTuple()]
 
  def handle_json_GET_triprows(self, params):
  """Return a list of rows from the feed file that are related to this
  trip."""
  schedule = self.server.schedule
  try:
  trip = schedule.GetTrip(params.get('trip', None))
  except KeyError:
  # if a non-existent trip is searched for, the return nothing
  return
  route = schedule.GetRoute(trip.route_id)
  trip_row = dict(trip.iteritems())
  route_row = dict(route.iteritems())
  return [['trips.txt', trip_row], ['routes.txt', route_row]]
 
  def handle_json_GET_tripstoptimes(self, params):
  schedule = self.server.schedule
  try:
  trip = schedule.GetTrip(params.get('trip'))
  except KeyError:
  # if a non-existent trip is searched for, the return nothing
  return
  time_stops = trip.GetTimeStops()
  stops = []
  times = []
  for arr,dep,stop in time_stops:
  stops.append(StopToTuple(stop))
  times.append(arr)
  return [stops, times]
 
  def handle_json_GET_tripshape(self, params):
  schedule = self.server.schedule
  try:
  trip = schedule.GetTrip(params.get('trip'))
  except KeyError:
  # if a non-existent trip is searched for, the return nothing
  return
  points = []
  if trip.shape_id:
  shape = schedule.GetShape(trip.shape_id)
  for (lat, lon, dist) in shape.points:
  points.append((lat, lon))
  else:
  time_stops = trip.GetTimeStops()
  for arr,dep,stop in time_stops:
  points.append((stop.stop_lat, stop.stop_lon))
  return points
 
  def handle_json_GET_neareststops(self, params):
  """Return a list of the nearest 'limit' stops to 'lat', 'lon'"""
  schedule = self.server.schedule
  lat = float(params.get('lat'))
  lon = float(params.get('lon'))
  limit = int(params.get('limit'))
  stops = schedule.GetNearestStops(lat=lat, lon=lon, n=limit)
  return [StopToTuple(s) for s in stops]
 
  def handle_json_GET_boundboxstops(self, params):
  """Return a list of up to 'limit' stops within bounding box with 'n','e'
  and 's','w' in the NE and SW corners. Does not handle boxes crossing
  longitude line 180."""
  schedule = self.server.schedule
  n = float(params.get('n'))
  e = float(params.get('e'))
  s = float(params.get('s'))
  w = float(params.get('w'))
  limit = int(params.get('limit'))
  stops = schedule.GetStopsInBoundingBox(north=n, east=e, south=s, west=w, n=limit)
  return [StopToTuple(s) for s in stops]
 
  def handle_json_GET_stops(self, params):
  schedule = self.server.schedule
  return [StopToTuple(s) for s in schedule.GetStopList()]
 
  def handle_json_GET_stopsearch(self, params):
  schedule = self.server.schedule
  query = params.get('q', None).lower()
  matches = []
  for s in schedule.GetStopList():
  if s.stop_id.lower().find(query) != -1 or s.stop_name.lower().find(query) != -1:
  matches.append(StopToTuple(s))
  return matches
 
  def handle_json_GET_stop(self, params):
  schedule = self.server.schedule
  query = params.get('stop_id', None).lower()
  for s in schedule.GetStopList():
  if s.stop_id.lower() == query:
  return StopToTuple(s)
  return []
 
  def handle_json_GET_stoptrips(self, params):
  """Given a stop_id and time in seconds since midnight return the next
  trips to visit the stop."""
  schedule = self.server.schedule
  stop = schedule.GetStop(params.get('stop', None))
  time = int(params.get('time', 0))
  time_trips = stop.GetStopTimeTrips(schedule)
  time_trips.sort() # OPT: use bisect.insort to make this O(N*ln(N)) -> O(N)
  # Keep the first 15 after param 'time'.
  # Need make a tuple to find correct bisect point
  time_trips = time_trips[bisect.bisect_left(time_trips, (time, 0)):]
  time_trips = time_trips[:15]
  # TODO: combine times for a route to show next 2 departure times
  result = []
  for time, (trip, index), tp in time_trips:
  headsign = None
  # Find the most recent headsign from the StopTime objects
  for stoptime in trip.GetStopTimes()[index::-1]:
  if stoptime.stop_headsign:
  headsign = stoptime.stop_headsign
  break
  # If stop_headsign isn't found, look for a trip_headsign
  if not headsign:
  headsign = trip.trip_headsign
  route = schedule.GetRoute(trip.route_id)
  trip_name = ''
  if route.route_short_name:
  trip_name += route.route_short_name
  if route.route_long_name:
  if len(trip_name):
  trip_name += " - "
  trip_name += route.route_long_name
  if headsign:
  trip_name += " (Direction: %s)" % headsign
 
  result.append((time, (trip.trip_id, trip_name, trip.service_id), tp))
  return result
 
  def handle_GET_ttablegraph(self,params):
  """Draw a Marey graph in SVG for a pattern (collection of trips in a route
  that visit the same sequence of stops)."""
  schedule = self.server.schedule
  marey = MareyGraph()
  trip = schedule.GetTrip(params.get('trip', None))
  route = schedule.GetRoute(trip.route_id)
  height = int(params.get('height', 300))
 
  if not route:
  print 'no such route'
  self.send_error(404)
  return
 
  pattern_id_trip_dict = route.GetPatternIdTripDict()
  pattern_id = trip.pattern_id
  if pattern_id not in pattern_id_trip_dict:
  print 'no pattern %s found in %s' % (pattern_id, pattern_id_trip_dict.keys())
  self.send_error(404)
  return
  triplist = pattern_id_trip_dict[pattern_id]
 
  pattern_start_time = min((t.GetStartTime() for t in triplist))
  pattern_end_time = max((t.GetEndTime() for t in triplist))
 
  marey.SetSpan(pattern_start_time,pattern_end_time)
  marey.Draw(triplist[0].GetPattern(), triplist, height)
 
  content = marey.Draw()
 
  self.send_response(200)
  self.send_header('Content-Type', 'image/svg+xml')
  self.send_header('Content-Length', str(len(content)))
  self.end_headers()
  self.wfile.write(content)
 
 
  def FindPy2ExeBase():
  """If this is running in py2exe return the install directory else return
  None"""
  # py2exe puts gtfsscheduleviewer in library.zip. For py2exe setup.py is
  # configured to put the data next to library.zip.
  windows_ending = gtfsscheduleviewer.__file__.find('\\library.zip\\')
  if windows_ending != -1:
  return transitfeed.__file__[:windows_ending]
  else:
  return None
 
 
  def FindDefaultFileDir():
  """Return the path of the directory containing the static files. By default
  the directory is called 'files'. The location depends on where setup.py put
  it."""
  base = FindPy2ExeBase()
  if base:
  return os.path.join(base, 'schedule_viewer_files')
  else:
  # For all other distributions 'files' is in the gtfsscheduleviewer
  # directory.
  base = os.path.dirname(gtfsscheduleviewer.__file__) # Strip __init__.py
  return os.path.join(base, 'files')
 
 
  def GetDefaultKeyFilePath():
  """In py2exe return absolute path of file in the base directory and in all
  other distributions return relative path 'key.txt'"""
  windows_base = FindPy2ExeBase()
  if windows_base:
  return os.path.join(windows_base, 'key.txt')
  else:
  return 'key.txt'
 
 
  def main(RequestHandlerClass = ScheduleRequestHandler):
  usage = \
  '''%prog [options] [<input GTFS.zip>]
 
  Runs a webserver that lets you explore a <input GTFS.zip> in your browser.
 
  If <input GTFS.zip> is omited the filename is read from the console. Dragging
  a file into the console may enter the filename.
  '''
  parser = util.OptionParserLongError(
  usage=usage, version='%prog '+transitfeed.__version__)
  parser.add_option('--feed_filename', '--feed', dest='feed_filename',
  help='file name of feed to load')
  parser.add_option('--key', dest='key',
  help='Google Maps API key or the name '
  'of a text file that contains an API key')
  parser.add_option('--host', dest='host', help='Host name of Google Maps')
  parser.add_option('--port', dest='port', type='int',
  help='port on which to listen')
  parser.add_option('--file_dir', dest='file_dir',
  help='directory containing static files')
  parser.add_option('-n', '--noprompt', action='store_false',
  dest='manual_entry',
  help='disable interactive prompts')
  parser.set_defaults(port=8765,
  host='maps.google.com',
  file_dir=FindDefaultFileDir(),
  manual_entry=True)
  (options, args) = parser.parse_args()
 
  if not os.path.isfile(os.path.join(options.file_dir, 'index.html')):
  print "Can't find index.html with --file_dir=%s" % options.file_dir
  exit(1)
 
  if not options.feed_filename and len(args) == 1:
  options.feed_filename = args[0]
 
  if not options.feed_filename and options.manual_entry:
  options.feed_filename = raw_input('Enter Feed Location: ').strip('"')
 
  default_key_file = GetDefaultKeyFilePath()
  if not options.key and os.path.isfile(default_key_file):
  options.key = open(default_key_file).read().strip()
 
  if options.key and os.path.isfile(options.key):
  options.key = open(options.key).read().strip()
 
  schedule = transitfeed.Schedule(problem_reporter=transitfeed.ProblemReporter())
  print 'Loading data from feed "%s"...' % options.feed_filename
  print '(this may take a few minutes for larger cities)'
  schedule.Load(options.feed_filename)
 
  server = StoppableHTTPServer(server_address=('', options.port),
  RequestHandlerClass=RequestHandlerClass)
  server.key = options.key
  server.schedule = schedule
  server.file_dir = options.file_dir
  server.host = options.host
  server.feed_path = options.feed_filename
 
  print ("To view, point your browser at http://localhost:%d/" %
  (server.server_port))
  server.serve_forever()
 
 
  if __name__ == '__main__':
  main()
 
file:b/busui/stop.php (new)
  <?php
  include('common.inc.php');
  $url = $APIurl."/json/stop?stop_id=".$_REQUEST['stopid'];
  $stop = json_decode(getPage($url));
 
  include_header("Trips passing ".$stop[1]);
  echo ' <ul data-role="listview" >';
  $url = $APIurl."/json/stoptrips?stop=".$_REQUEST['stopid']."&time=".midnight_seconds();
  $page = getPage($url);
  foreach (json_decode($page) as $row)
  {
  if ($row[1][2] === service_period()) echo '<li>'.midnight_seconds_to_time($row[0]).' <a href="trip.php?stopid='.$_REQUEST['stopid'].'&tripid='.$row[1][0].'">'.$row[1][1].'</a></li>';
  }
  echo '</ul>';
  include_footer();
  ?>
 
  <?php
  include('common.inc.php');
  include_header("Stops");
  echo ' <ul data-role="listview" data-filter="true">';
  $url = $APIurl."/json/stops";
  if ($_REQUEST['lat'] && $_REQUEST['lon']) $url = $APIurl."/json/neareststops?lat={$_REQUEST['lat']}&lon={$_REQUEST['lon']}&limit=15";
  $contents = json_decode(getPage($url));
  foreach ($contents as $key => $row) {
  $stopName[$key] = $row[1];
  }
 
  // Sort the data with volume descending, edition ascending
  // Add $data as the last parameter, to sort by the common key
  array_multisort($stopName, SORT_ASC, $contents);
 
  foreach ($contents as $row)
  {
 
  echo '<li><a href="stop.php?stopid='.$row[0].'">'.$row[1].'</a></li>';
  }
  echo '</ul>';
  /*
  <div data-role="footer" data-id="foo1" data-position="fixed">
  <div data-role="navbar">
  <ul>
  <li><a href="footer-persist-a.html" class="ui-btn-active">Friends</a></li>
  <li><a href="footer-persist-b.html">Albums</a></li>
  <li><a href="footer-persist-c.html">Emails</a></li>
  </ul>
  </div><!-- /navbar -->
  */
  include_footer();
  ?>
 
 
file:b/busui/trip.php (new)
  <?php
  include('common.inc.php');
  $url = $APIurl."/json/triprows?trip=".$_REQUEST['tripid'];
  $trips = array_flatten(json_decode(getPage($url)));
  print_r($trips);
 
  include_header("Stops on ". $trips[1]->route_short_name . ' '. $trips[1]->route_long_name);
  echo ' <ul data-role="listview" >';
 
 
 
 
  $url = $APIurl."/json/tripstoptimes?trip=".$_REQUEST['tripid'];
 
  $json = json_decode(getPage($url));
  $stops = $json[0];
  $times = $json[1];
  foreach ($stops as $key => $row)
  {
  echo '<li>'.midnight_seconds_to_time($times[$key]).' <a href="stop.php?stopid='.$row[0].'">'.$row[1].'</a></li>';
  }
  echo '</ul>';
  include_footer();
  ?>
 
file:b/busui/view.sh (new)
  # input location (via GPS or favourites or search) and destination (via searchable list, optional)
  # http://10.0.1.153:8765/json/boundboxstops?n=-35.27568499917103&e=149.1346514225006&s=-35.279495003493516&w=149.12622928619385&limit=50
  # http://10.0.1.153:8765/json/stoptrips?stop=43&time=64440 # recursively call to show all services nearby, sort by distance, need to filter by service period
  # Hey, can pick destination again from a list filtered to places these stops go if you're curious!
  # http://10.0.1.153:8765/json/tripstoptimes?trip=2139 # Can recursively call and parse based on intended destination to show ETA
  # http://10.0.1.153:8765/json/triprows?trip=2139 # For pretty maps
  python schedule_viewer.py --feed=../maxious-canberra-transit-feed/cbrfeed.zip --key=ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q
 
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<script type="text/javascript" src="http://loki.com/plugin/files/loki.js"></script>  
<script src="openlayers/OpenLayers.js"></script> <script src="openlayers/OpenLayers.js"></script>
  <SCRIPT TYPE="text/javascript" SRC="OpenStreetMap.js"></SCRIPT>
<script type="text/javascript"> <script type="text/javascript">
var map, layer;  
   
function aaa(a)  
{  
var lonLat = new OpenLayers.LonLat(a.coords.longitude, a.coords.latitude).transform(new OpenLayers.Projection("EPSG:4326"),  
map.getProjectionObject());  
map.setCenter(lonLat, 13);  
   
}  
   
function handleError(a)  
{  
alert("error in geoloc");  
}  
   
function init() function init()
{ {
var extent = new OpenLayers.Bounds(148.98, -35.48, 149.25, -35.15); var extent = new OpenLayers.Bounds(148.98, -35.48, 149.25, -35.15);
map = new OpenLayers.Map('map');  
layer = new OpenLayers.Layer.OSM("local", "http://10.0.1.153/tiles/${z}/${x}/${y}.png"); // set up the map options
map.addLayer(layer); var options =
  {
  maxExtent: extent,
  numZoomLevels: 20,
  };
   
  // create the ol map object
  var map = new OpenLayers.Map('map', options);
   
  var osmtiles = new OpenLayers.Layer.OSM("local", "http://10.0.1.153/tiles/${z}/${x}/${y}.png");
  // use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles
  var graphic = new OpenLayers.Layer.Image(
  'Weekday Bus Map',
  'weekday_bus_map.png',
  new OpenLayers.Bounds(149.0, -35.47, 149.16, -35.16),
  new OpenLayers.Size(1191, 2268),
  {baseLayer: false}
  );
   
  var nearmap = new OpenLayers.Layer.OSM.NearMap("NearMap");
   
  var routes = new OpenLayers.Layer.GML("Routes", "displayroutes.kml.php", {
  format: OpenLayers.Format.KML,
  formatOptions: {
  extractStyles: true,
  extractAttributes: true,
  maxDepth: 2
  }
  });
  var stopicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png",new OpenLayers.Size(32,32));
  var stops = new OpenLayers.Layer.GeoRSS("Stops", "displaystops.georss.php", { icon: stopicon });
  var timeicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png",new OpenLayers.Size(32,32));
  var timepoints = new OpenLayers.Layer.GeoRSS("Timing Points", "displaytimepoints.georss.php", { icon: timeicon });
   
  map.addLayers([osmtiles,stops,routes,timepoints,nearmap]);
   
var lonLat = new OpenLayers.LonLat(149.11, -35.28).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()); var lonLat = new OpenLayers.LonLat(149.11, -35.28).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
map.setCenter(lonLat, 13); map.setCenter(lonLat, 13);
map.addControl( new OpenLayers.Control.LayerSwitcher({'ascending':false})); map.addControl( new OpenLayers.Control.LayerSwitcher({'ascending':false}));
map.addControl(new OpenLayers.Control.MousePosition( map.addControl(new OpenLayers.Control.MousePosition(
{ {
displayProjection: new OpenLayers.Projection("EPSG:4326"), displayProjection: new OpenLayers.Projection("EPSG:4326"),
suffix: "__________________________________" suffix: "__________________________________"
})); }));
map.addControl(new OpenLayers.Control.MousePosition( map.addControl(new OpenLayers.Control.MousePosition(
{ {
displayProjection: new OpenLayers.Projection("EPSG:900913") displayProjection: new OpenLayers.Projection("EPSG:900913")
})); }));
if (navigator.geolocation)  
{  
navigator.geolocation.getCurrentPosition(this.aaa, this.handleError);  
}  
else  
{  
var loki = LokiAPI();  
loki.onSuccess = function (location)  
{  
var lonLat = new OpenLayers.LonLat(location.longitude, location.latitude).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());  
map.setCenter(lonLat, 13);  
}  
loki.onFailure = function (error)  
{  
loki.requestIPLocation(true, loki.NO_STREET_ADDRESS_LOOKUP)  
}  
loki.setKey('maxious.lambdacomplex.org');  
loki.requestLocation(true, loki.NO_STREET_ADDRESS_LOOKUP);  
}  
map.addLayer(new OpenLayers.Layer.GML("KML", "displayroutes.kml.php", {  
format: OpenLayers.Format.KML,  
formatOptions: {  
extractStyles: true,  
extractAttributes: true,  
maxDepth: 2  
}  
}));  
map.addLayer(new OpenLayers.Layer.Vector("KML", {  
projection: map.displayProjection,  
strategies: [new OpenLayers.Strategy.Fixed()],  
protocol: new OpenLayers.Protocol.HTTP(  
{  
url: "displaystops.kml.php",  
format: new OpenLayers.Format.KML(  
{  
extractStyles: true,  
extractAttributes: true  
})  
})  
}));  
} }
   
</script> </script>
   
</head> </head>
<body onload="init()"> <body onload="init()">
<div id="map" width="100%" height="100%" class="smallmap"></div> <div id="map" width="100%" height="100%" class="smallmap"></div>
</body> </body>
</html> </html>
   
   
  <?php
  header('Content-Type: application/xml');
  echo '<?xml version="1.0" encoding="utf-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom"
  xmlns:georss="http://www.georss.org/georss"><title>Bus Stops from OSM</title>';
  $conn = pg_connect("dbname=bus user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $result_stops = pg_query($conn, "Select * FROM stops ");
  if (!$result_stops) {
  echo "An stops retirieve error occured.\n";
  exit;
  }
 
  while ($stop = pg_fetch_assoc($result_stops)) {
  echo "\n<entry>\n";
  echo "<summary> {$stop['geohash']}</summary>";
  echo "<title>{$stop['geohash']}</title>";
 
  echo "<georss:point> ";echo ($stop['lat']/10000000)." ".($stop['lng']/10000000);
  echo " </georss:point>";
  echo '</entry>';
  }
 
  echo "\n</feed>\n";
  ?>
 
file:a/displaystops.kml.php (deleted)
<?php  
header('Content-Type: application/vnd.google-earth.kml+xml');  
echo '<?xml version="1.0" encoding="UTF-8"?>  
<kml xmlns="http://www.opengis.net/kml/2.2"><Document>';  
echo '<Style id="target">  
<IconStyle>  
<Icon>  
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>  
</Icon>  
</IconStyle>  
</Style>';  
echo '<Style id="player">  
<IconStyle>  
<Icon>  
<href>http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png</href>  
</Icon>  
</IconStyle>  
</Style>';  
$conn = pg_connect("dbname=openstreetmap user=postgres password=snmc");  
if (!$conn) {  
echo "An error occured.\n";  
exit;  
}  
/*SELECT * from current_node_tags, (Select id FROM current_node_tags WHERE "v" LIKE '%bus%') as a  
where a.id = current_node_tags.id; */  
$result_stops = pg_query($conn, "Select * FROM current_node_tags INNER JOIN current_nodes ON  
current_node_tags.id=current_nodes.id WHERE v LIKE '%bus%' ");  
if (!$result_stops) {  
echo "An stops retirieve error occured.\n";  
exit;  
}  
 
while ($stop = pg_fetch_assoc($result_stops)) {  
echo "\n<Placemark>\n";  
echo "<description>";  
$result_stopkeys = pg_query($conn, "SELECT * from current_node_tags where id = {$stop['id']};");  
if (!$result_stopkeys) {  
echo "An stops keys retirieve error occured.\n";  
exit;  
}  
$name = "";  
while ($stopkeys = pg_fetch_assoc($result_stopkeys)) {  
echo htmlspecialchars(print_r($stopkeys,true));  
$name .= htmlspecialchars($stopkeys['v']);  
}  
echo "</description>";  
echo "<name>$name</name>";  
 
echo "<styleUrl>#target</styleUrl>";  
echo "\n <Point><coordinates> ";  
echo ($stop['longitude']/10000000).",".($stop['latitude']/10000000)."\n";  
echo " </coordinates> </Point>";  
echo '</Placemark>';  
}  
 
echo "\n</Document></kml>\n";  
?>  
 
  <?php
  header('Content-Type: application/xml');
  echo '<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss">';
  echo '<title> Points</title>';
  $conn = pg_connect("dbname=bus user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $result_timepoints = pg_query($conn, "Select * FROM timing_point where lat is not null and lng is not null ");
  if (!$result_timepoints) {
  echo "An timepoints retirieve error occured.\n";
  exit;
  }
 
  while ($timepoint = pg_fetch_assoc($result_timepoints)) {
  echo "<entry>";
  echo "<summary>".htmlspecialchars ($timepoint['name'])."</summary>";
  echo "<title>".htmlspecialchars($timepoint['name'])."</title>";
  echo "<georss:point> ".($timepoint['lat']/10000000)." ".($timepoint['lng']/10000000)."</georss:point>";
  echo "</entry>\n";
  }
 
  echo "\n</feed>\n";
  ?>
 
<?php  
header('Content-Type: application/vnd.google-earth.kml+xml');  
echo '<?xml version="1.0" encoding="UTF-8"?>  
<kml xmlns="http://www.opengis.net/kml/2.2"><Document>';  
echo '<Style id="target">  
<IconStyle>  
<Icon>  
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>  
</Icon>  
</IconStyle>  
</Style>';  
echo '<Style id="player">  
<IconStyle>  
<Icon>  
<href>http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png</href>  
</Icon>  
</IconStyle>  
</Style>';  
$conn = pg_connect("dbname=openstreetmap user=postgres password=snmc");  
if (!$conn) {  
echo "An error occured.\n";  
exit;  
}  
/*SELECT * from current_node_tags, (Select id FROM current_node_tags WHERE "v" LIKE '%bus%') as a  
where a.id = current_node_tags.id; */  
$result_stops = pg_query($conn, "Select * FROM current_node_tags INNER JOIN current_nodes ON  
current_node_tags.id=current_nodes.id WHERE v LIKE '%bus%' ");  
if (!$result_stops) {  
echo "An stops retirieve error occured.\n";  
exit;  
}  
 
while ($stop = pg_fetch_assoc($result_stops)) {  
echo "\n<Placemark>\n";  
echo "<description>";  
$result_stopkeys = pg_query($conn, "SELECT * from current_node_tags where id = {$stop['id']};");  
if (!$result_stopkeys) {  
echo "An stops keys retirieve error occured.\n";  
exit;  
}  
$name = "";  
while ($stopkeys = pg_fetch_assoc($result_stopkeys)) {  
echo htmlspecialchars(print_r($stopkeys,true));  
$name .= htmlspecialchars($stopkeys['v']);  
}  
echo "</description>";  
echo "<name>$name</name>";  
 
echo "<styleUrl>#target</styleUrl>";  
echo "\n <Point><coordinates> ";  
echo ($stop['longitude']/10000000).",".($stop['latitude']/10000000)."\n";  
echo " </coordinates> </Point>";  
echo '</Placemark>';  
}  
 
echo "\n</Document></kml>\n";  
?>  
 
  /*
  * jQuery JavaScript Library v1.3.2
  * http://jquery.com/
  *
  * Copyright (c) 2009 John Resig
  * Dual licensed under the MIT and GPL licenses.
  * http://docs.jquery.com/License
  *
  * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
  * Revision: 6246
  */
  (function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
  /*
  * Sizzle CSS Selector Engine - v0.9.3
  * Copyright 2009, The Dojo Foundation
  * Released under the MIT, BSD, and GPL Licenses.
  * More information: http://sizzlejs.com/
  */
  (function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
  require 'rubygems'
  require 'nokogiri'
  require 'open-uri'
  require 'pp'
  require 'yaml'
  class Array
  def to_yaml_style
  :inline
  end
  end
 
 
  def makeTimetable(table, period, short_name)
  timetable = {"between_stops" => [], "short_name" => short_name}
  time_points = table.xpath('tr[1]//th').map do |tp|
  if tp.content != "\302\240" && tp.content != "" && tp.content != "<br/>"
  timing_point = tp.content.squeeze(" ").gsub("\r\n Platform"," - Platform").gsub(" - "," - ").gsub("\n","").gsub("\r","").gsub("\\"," / ").strip
  end
  end
  time_points.delete(nil)
  timetable["time_points"] = time_points.to_a
  timetable["long_name"] = "To " + time_points.last
  periodtimes = []
  table.css('tr').each do |row|
  times = row.css('td').map do |cell|
  time = cell.content.squeeze(" ").strip
  time = time.gsub(/ *A\S?M/,"a").gsub(/ ?P\S?M/,"p").gsub("12:08 AM","1208x").gsub(":","").gsub("1.","1").gsub("2.","2")
  time = time.gsub("3.","3").gsub("4.","4")
  time = time.gsub("5.","5").gsub("6.","6").gsub("7.","7").gsub("8.","8").gsub("9.","9").gsub("10.","10")
  time = time.gsub("11.","11").gsub("12.","12").gsub(/\.+/,"-")
  end
  if not times.empty?
  if not (route = times.shift)
  raise("TODO: account for shifting route numbers eg. intertown/redex 62/162")
  end
  periodtimes << times.to_a
  end
  end
  if periodtimes.size < 1
  raise "No times for route " + short_name + " in period " + period
  end
  timetable[period] = periodtimes.to_a
  # pp timetable
  filename = timetable["short_name"] + "-" + timetable["long_name"]+ "." + period + ".yml"
  filename = filename.downcase.gsub(" ","-").gsub("/","-")
  puts "Saving " + filename
  File.open("#{File.dirname(__FILE__)}/output/"+filename, "w") do |f|
  f.write timetable.to_yaml
  end
  timetable
  end
 
  #TODO fix route 934
  Dir.glob("source-html/Route*.htm*") { |file|
  puts "Opened " + file
  doc = Nokogiri::HTML(open(file))
  # Search for nodes by css
  timetables = []
  short_name = "";
  doc.xpath('//title').each do |title|
  short_name = title.content.gsub("Route_","").gsub("Route ","").gsub(", ","/").squeeze(" ").strip
  end
  if short_name == ""
  raise "Route number(s) not found in <title> tag"
  end
 
  doc.xpath('//table[preceding::text()="Weekdays"]').each do |table|
  timetables << makeTimetable(table, "stop_times", short_name)
  end
 
  #weekends
  doc.xpath('//table[preceding::text()="Saturdays" and following::a]').each do |table|
  timetables << makeTimetable(table, "stop_times_saturday", short_name)
  end
  doc.xpath('//table[preceding::text()="Sundays"]').each do |table|
  timetables << makeTimetable(table, "stop_times_sunday", short_name)
  end
  #930/934 special cases
  doc.xpath('//table[preceding::text()="Saturday" and following::h2]').each do |table|
  timetables << makeTimetable(table, "stop_times_saturday", short_name)
  end
  doc.xpath('//table[preceding::text()="Sunday"]').each do |table|
  timetables << makeTimetable(table, "stop_times_sunday", short_name)
  end
  #route 81 = Weekdays - School Holidays Only
  doc.xpath('//table[preceding::text()="Weekdays - School Holidays Only "]').each do |table|
  timetable = makeTimetable(table, "stop_times", short_name)
  #TODO set active date range to only be holidays
  timetables << timetable;
  end
 
 
  if timetables.size > 2
  puts "WARNING: " + file + " more than 2 timetables (weekend split?):" + timetables.size.to_s
  end
  if timetables.size < 2
  puts "WARNING: " + file + " less than 2 timetables (weekday loop service?):" + timetables.size.to_s
  elsif not (timetables[0]["time_points"] - timetables[1]["time_points"].reverse).empty?
  puts "WARNING: first pair of timetable timing points are not complementary for "+ file
  pp(timetables[0]["time_points"] - timetables[1]["time_points"].reverse)
  end
  if timetables.size < 1
  raise "No timetables extracted from " + file
  end
  }
 
  require 'rubygems'
  require 'pp'
  require 'yaml'
  class Array
  def to_yaml_style
  :inline
  end
  end
  Dir.chdir("output")
 
  def getTimePoints()
  $time_points = []
  $time_points_sources = Hash.new([])
  Dir.glob("*.yml") { |file|
  timetable = YAML::load_file(file)
  $time_points = $time_points | timetable["time_points"]
  timetable["time_points"].each do |timepoint|
  $time_points_sources[timepoint] = $time_points_sources[timepoint] | [ file ]
  end
  }
  end
 
  getTimePoints()
  #pp $time_points.sort!
  #pp $time_points_sources.sort
 
  time_point_corrections = {"North Lynehamham" => "North Lyneham",
  "Lathlain St Platform 2" => "Lathlain St Bus Station - Platform 2",
  "Lathlain St Sation - Platform 5" => "Lathlain St Bus Station - Platform 5",
  "Lathlain Steet Station" => "Lathlain St Bus Station",
  "Lathlain St - Platform 3" => "Lathlain St Bus Station - Platform 3",
  "Lathlain Steet Station - Platform 3" => "Lathlain St Bus Station - Platform 3",
  "Lathlain St Station" => "Lathlain St Bus Station",
  "Lathlain St Station - Platform 1" => "Lathlain St Bus Station - Platform 1",
  "Lathlain St Station - Platform 2" => "Lathlain St Bus Station - Platform 2",
  "Lathlain St Station - Platform 3" => "Lathlain St Bus Station - Platform 3",
  "Lathlain St Station - Platform 4" => "Lathlain St Bus Station - Platform 4",
  "Lathlain St Station - Platform 5" => "Lathlain St Bus Station - Platform 5",
  "Lathlain St Station - Platform 6" => "Lathlain St Bus Station - Platform 6",
  "Flemington Rd, Sandford St" => "Flemington Rd/Sandford St",
  "Erindale Centre / - Sternberg Crescent" => "Erindale Drive/Sternberg",
  "Canberra Hospita" => "Canberra Hospital",
  "Cohen Str Station - Platform 1" => "Cohen St Bus Station - Platform 1",
  "Cohen Street Station" => "Cohen St Bus Station",
  "Cohen Street Station - Platform 2" => "Cohen St Bus Station - Platform 2",
  "Cohn St Station - Platform 3" => "Cohen St Bus Station - Platform 3",
  "Cohen St Station" => "Cohen St Bus Station",
  "Cohen St Station - Platform 1" => "Cohen St Bus Station - Platform 1",
  "Cohen St Station - Platform 2" => "Cohen St Bus Station - Platform 2",
  "Cohen St Station - Platform 3" => "Cohen St Bus Station - Platform 3",
  "Cohen St Station - Platform 4" => "Cohen St Bus Station - Platform 4",
  "Cohen St Station - Platform 5" => "Cohen St Bus Station - Platform 5",
  "Cohen St Station - Platform 6" => "Cohen St Bus Station - Platform 6",
  "City - Platform 7" => "City Interchange - Platform 7",
  "Cameron Avenue Station" => "Cameron Ave Bus Station",
  "Cameron Avenue Station - Platform 1" => "Cameron Ave Bus Station - Platform 1",
  "Cameron Avenue Station - Platform 2" => "Cameron Ave Bus Station - Platform 2",
  "Cameron Avenue Station - Platform 3" => "Cameron Ave Bus Station - Platform 3",
  "Cameron Avenue Station - Platform 4" => "Cameron Ave Bus Station - Platform 4",
  "Cameron Avenue Station - Platform 5" => "Cameron Ave Bus Station - Platform 5",
  "Cameron Ave Station" => "Cameron Ave Bus Station",
  "Cameron Ave Station - Platform 1" => "Cameron Ave Bus Station - Platform 1",
  "Cameron Ave Station - Platform 2" => "Cameron Ave Bus Station - Platform 2",
  "Cameron Ave Station - Platform 3" => "Cameron Ave Bus Station - Platform 3",
  "Cameron Ave Station - Platform 4" => "Cameron Ave Bus Station - Platform 4",
  "Cameron Ave Station - Platform 5" => "Cameron Ave Bus Station - Platform 5",
  "Burton & Garranan Hall, Daley Road ANU" => "Burton & Garran Hall/Daley Road ANU",
  "Burton & Garranan Hall,Daley Road ANU" => "Burton & Garran Hall/Daley Road ANU",
  "Garran/Daley Rd" => "Burton & Garran Hall/Daley Road ANU",
  "Kingstons Ave/National Crt" => "Kings Ave/National Crt",
  "Newcastle Street after Isa St" => "Newcastle / Isa Street Fyshwick",
  "National Circ/Canberra Ave" => "National Circuit / Canberra Ave",
  "St Clare of Conder" => "St Clare of Assisi Primary",
  "McKillop College Isabella Campus" => "MacKillop College Isabella Campus",
  "Outrim / Duggan" => "Outtrim / Duggan",
  "Manuka Captain Cook" => "Manuka/Captain Cook",
  "Manuka, Captain Cook" => "Manuka/Captain Cook",
  "Hospice, Menindee Drive" => "Hospice",
  "Tharwa/Pocket" => "Tharwa/Pockett",
  "Paul-Co / Mirrabei" => "Paul Coe / Mirrabei"
  }
  time_point_corrections.each do |wrong, right|
  $time_points_sources[wrong].each do |wrongfile|
  badtimetable = YAML::load_file(wrongfile)
  badentrynumber = badtimetable["time_points"].index wrong
  badtimetable["time_points"][badentrynumber] = right
  puts "Corrected '" + wrong + "' to '" + right + "' in " + wrongfile
  File.open(wrongfile, "w") do |f|
  f.write badtimetable.to_yaml
  end
  end
  end
 
  getTimePoints()
  pp $time_points.sort!
 
  #!/usr/bin/ruby
  require 'postgres'
 
  require 'highline.rb'
  include HighLine
 
  require 'rubygems'
  require 'json'
  require 'net/http'
  def cbr_geocode(query)
  base_url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?query="
  url = "#{base_url}#{URI.encode(query)}&bbox=-35.47,148.83,-35.16,149.25&return_location=true"
  resp = Net::HTTP.get_response(URI.parse(url))
  data = resp.body
 
  # we convert the returned JSON data to native Ruby
  # data structure - a hash
  result = JSON.parse(data)
 
  # if the hash has 'Error' as a key, we raise an error
  if result.has_key? 'Error'
  raise "web service error"
  end
  return result
  end
  class Array
 
  def find_dups
  inject(Hash.new(0)) { |h,e| h[e] += 1; h }.select { |k,v| v > 1 }.collect { |x| x.first }
  end
  end
 
  require 'yaml'
  require 'pp'
  Dir.chdir("output")
 
  def getTimePoints()
  $time_points = []
  $time_points_sources = Hash.new([])
  Dir.glob("*.yml") { |file|
  timetable = YAML::load_file(file)
  $time_points = $time_points | timetable["time_points"]
  timetable["time_points"].each do |timepoint|
  $time_points_sources[timepoint] = $time_points_sources[timepoint] | [ file ]
  end
  }
  end
 
  getTimePoints()
  $time_points.sort!
 
  connbus = PGconn.connect("localhost", 5432, '', '', "bus", "postgres",
  "snmc")
  connosm = PGconn.connect("localhost", 5432, '', '', "openstreetmap",
  "postgres", "snmc")
 
  if ask_if("Insert Timing Point names to database?")
  $time_points.each do |time_point|
  begin
  time_point = time_point.gsub(/\\/, '\&\&').gsub(/'/, "''").gsub("St", "%")
  res = connbus.exec("INSERT INTO timing_point (name) VALUES ('#{time_point}')")
  puts "Put '#{time_point}' into DB"
  rescue PGError => e
  puts "Error inserting '#{time_point}' to DB #{e}"
  #conn.close() if conn
  end
  end
  end
 
 
  if ask_if("Fill null Timing Points from OSM bus_stop database?")
  # TODO Where there's a "Cnr" or a \/ or a &, Look for 2 ways or nodes and average the closest two!
  begin
  null_points = connbus.exec('SELECT name FROM timing_point WHERE lat IS null OR lng IS null;')
  rescue PGError => e
  puts "Error selecting null points from DB #{e}"
  #conn.close() if conn
  end
 
  null_points.each do |null_point_name|
  begin
  name = null_point_name.to_s.gsub(/\\/, '\&\&').gsub(/'/, "''")
  pp name
  search_name = ask("Hmm, if we're still looking, the name is probably wrong. What's the right name?", :string, :default => name)
  matching_nodes = connosm.exec("Select * FROM (SELECT * from current_node_tags,
  (Select id as ctagid FROM current_node_tags WHERE v LIKE '%#{search_name}%') as a
  where a.ctagid = current_node_tags.id) as ctags INNER JOIN current_nodes ON
  ctags.id=current_nodes.id")
  rescue PGError => e
  puts "Error selecting matching bus stops from DB #{e}"
  #conn.close() if conn
  end
  suggested_nodes = Hash.new()
 
  matching_nodes.each do |matching_node_row|
  #pp matching_node_row
  # 0 = id
  # 1 = k
  # 2 = v
  # 3,4 = redundant ids
  # 5 = lat*100000
  # 6 = lng*100000
  suggested_node = suggested_nodes.fetch(matching_node_row[0], {'lat' => Float(matching_node_row[5])/10000000,
  'lng' => Float(matching_node_row[6])/10000000})
  if matching_node_row[1] == "ref"
  matching_node_row[1] = "loc_ref"
  end
  suggested_node[matching_node_row[1]] = matching_node_row[2]
  suggested_nodes[matching_node_row[0]] = suggested_node
  end
  pp suggested_nodes
  nodeID = ask("Enter selected node ID:", :string)
  if suggested_nodes.has_key?(nodeID)
  node = suggested_nodes.fetch(nodeID)
  guess = ask_if("Is this a guess?")
  puts "Location #{node["lat"]},#{node["lng"]} for #{null_point_name}"
  begin
  res = connbus.exec("UPDATE timing_point SET lat = #{node["lat"]*10000000}, lng =
  #{node["lng"]*10000000},osm_node = #{nodeID}" + (node.has_key?("loc_ref") ? ",loc_ref = #{node["loc_ref"]}" : "") + ",guess = #{guess} WHERE name
  = '#{name}'")
  puts "Put '#{null_point_name}' into DB"
  rescue PGError => e
  puts "Error inserting '#{null_point_name}' to DB #{e}"
  ask_if("Continue?")
  #conn.close() if conn
  end
  else
  puts "Uhh, there was no suggestion ID like that. Try again next time!"
  end
 
  puts "Hmm, so maybe this isn't a point? Maybe it's a way.... like a street or something? Is it a 'street' or a 'corner' or nothing?"
  whatisit = ask("So what is it:", :string, :default => "corner")
  if whatisit == "street"
  begin
  name = null_point_name.to_s.gsub(/\\/, '\&\&').gsub(/'/, "''")
  pp "#{name} (ways)"
  search_name = ask("Streets tend to have pretty bad quality data, What's the real name of the street?", :string, :default => name)
  matching_ways = connosm.exec("Select avg(latitude), avg(longitude), name FROM (
  SELECT * from current_way_nodes,(Select id as ctagid, v as name FROM current_way_tags WHERE k = 'name' AND v LIKE
  '%#{search_name}%') as a where a.ctagid = current_way_nodes.id) as ctags INNER JOIN current_nodes ON ctags.node_id=current_nodes.id
  GROUP BY name")
  rescue PGError => e
  puts "Error selecting matching ways from DB #{e}"
  #conn.close() if conn
  end
  suggested_ways = Hash.new()
 
  matching_ways.each do |matching_way_row|
  #pp matching_way_row
  # 0 = lat*100000
  # 1 = lng*100000
  # 2 = name
  suggested_way = suggested_ways.fetch(matching_way_row[2], {'lat' => Float(matching_way_row[0])/10000000,
  'lng' => Float(matching_way_row[1])/10000000})
  suggested_way['name'] = suggested_way['name']
  suggested_ways[matching_way_row[2]] = suggested_way
  end
  pp suggested_ways
  wayID = ask("Enter selected way ID:", :string)
  if suggested_ways.has_key?(wayID)
  way = suggested_ways.fetch(wayID)
  guess = ask_if("Is this a guess?")
  puts "Location #{way["lat"]},#{way["lng"]} for #{null_point_name}"
  begin
  res = connbus.exec("UPDATE timing_point SET lat = #{way["lat"]*10000000}, lng =
  #{way["lng"]*10000000},guess = #{guess} WHERE name = '#{name}'")
  puts "Put '#{null_point_name}' into DB"
  rescue PGError => e
  puts "Error inserting '#{null_point_name}' to DB #{e}"
  ask_if("Continue?")
  #conn.close() if conn
  end
  else
  puts "Uhh, there was no suggestion ID like that. Try again next time!"
  end
  end
  if whatisit == "corner"
  # Where there's a "Cnr" or a \/ or a &, look for 2 ways and find the intersections
 
  name = null_point_name.to_s.gsub(/\\/, '\&\&').gsub(/'/, "''")
  search_name = ask("I need this to look like STREETNAME1/STREETNAME2, okay? Can you do that for me?", :string, :default => name)
  search_pieces = search_name.split("/")
  pp search_pieces
  if search_pieces.length == 2
  begin
  matching_ways = connosm.exec("SELECT w.way_id, latitude, longitude, w.node_id from (Select current_way_nodes.id as way_id, * from current_nodes inner join current_way_nodes on current_nodes.id=current_way_nodes.node_id inner join current_ways on current_way_nodes.id=current_ways.id) as w, (select node_id, count(node_id) from
  (Select * FROM (SELECT * from current_way_nodes, (Select id as ctagid, v as name FROM current_way_tags WHERE k = 'name' AND v LIKE '%#{search_pieces[0]}%') as a where a.ctagid = current_way_nodes.id ) as ctags INNER JOIN current_nodes ON ctags.node_id=current_nodes.id where sequence_id = 1 union Select * FROM ( SELECT * from current_way_nodes, (Select id as ctagid, v as name FROM current_way_tags WHERE k = 'name' AND v LIKE '%#{search_pieces[0]}%') as a where a.ctagid = current_way_nodes.id ) as ctags INNER JOIN current_nodes ON ctags.node_id=current_nodes.id where sequence_id = (select max(sequence_id) from current_way_nodes cnodes where cnodes.id = ctags.id) union Select * FROM ( SELECT * from current_way_nodes, (Select id as ctagid, v as name FROM current_way_tags WHERE k = 'name' AND v LIKE '%#{search_pieces[1]}%') as a where a.ctagid = current_way_nodes.id ) as ctags INNER JOIN current_nodes ON ctags.node_id=current_nodes.id where sequence_id = 1 union Select * FROM ( SELECT * from current_way_nodes, (Select id as ctagid, v as name FROM current_way_tags WHERE k = 'name' AND v LIKE '%#{search_pieces[1]}%') as a where a.ctagid = current_way_nodes.id ) as ctags INNER JOIN current_nodes ON ctags.node_id=current_nodes.id where sequence_id = (select max(sequence_id) from current_way_nodes cnodes where cnodes.id = ctags.id) ) as t GROUP BY node_id HAVING ( COUNT(node_id) > 1 ) ) as s where s.node_id = w.node_id")
  rescue PGError => e
  puts "Error selecting matching bus stops from DB #{e}"
  #conn.close() if conn
  end
  suggested_ways = Hash.new()
 
  matching_ways.each do |matching_way_row|
  pp matching_way_row
  # 0 = way_id
  # 1 = lat*100000
  # 2 = lng*100000
  # 3 = node_id
  suggested_way = suggested_ways.fetch(matching_way_row[3], {'lat' => Float(matching_way_row[1])/10000000,
  'lng' => Float(matching_way_row[2])/10000000})
  suggested_way['way_id'] = " " + matching_way_row[0]
  suggested_way['node_id'] = matching_way_row[3]
  suggested_ways[matching_way_row[3]] = suggested_way
  end
  pp suggested_ways
  wayID = ask("Enter selected way ID:", :string)
  if suggested_ways.has_key?(wayID)
  way = suggested_ways.fetch(wayID)
  guess = ask_if("Is this a guess?")
  puts "Location #{way["lat"]},#{way["lng"]} for #{null_point_name}"
  begin
  res = connbus.exec("UPDATE timing_point SET lat = #{way["lat"]*10000000}, lng =
  #{way["lng"]*10000000},osm_node = #{wayID} ,guess = #{guess} WHERE name
  = '#{name}'")
  puts "Put '#{null_point_name}' into DB"
  rescue PGError => e
  puts "Error inserting '#{null_point_name}' to DB #{e}"
  ask_if("Continue?")
  #conn.close() if conn
  end
  else
  puts "Uhh, there was no suggestion ID like that. Try again next time!"
  end
  end
  end
  end
  end
  if ask_if("Fill null Timing Points from geocoder?")
  begin
  null_points = connbus.exec('SELECT name FROM timing_point WHERE lat IS null OR lng IS null;')
  rescue PGError => e
  puts "Error selecting null points from DB #{e}"
  #conn.close() if conn
  end
 
  null_points.each do |null_point_name|
  pp null_point_name
  name = null_point_name.to_s.gsub(/\\/, '\&\&').gsub(/'/, "''")
  results = cbr_geocode(null_point_name[0])
  if !results.empty?
  results['features'].each_with_index { |feature,index|
  print "#{index}: #{feature['properties']['name']} (#{feature['location']}) => #{feature['centroid']['coordinates']}\n"
  }
  nodeID = ask("Enter selected node ID:", :integer)
  if results['features'].at(nodeID) != nil
  node = results['features'][nodeID]
  puts "Location #{node['centroid']['coordinates'][0]},#{node['centroid']['coordinates'][1]} for #{null_point_name}"
  begin
  res = connbus.exec("UPDATE timing_point SET lat = #{node['centroid']['coordinates'][0]*10000000}, lng =
  #{node['centroid']['coordinates'][1]*10000000},guess = true WHERE name = '#{name}'")
  puts "Put '#{null_point_name}' into DB"
  rescue PGError => e
  puts "Error inserting '#{null_point_name}' to DB #{e}"
  ask_if("Continue?")
  #conn.close() if conn
  end
  else
  puts "Uhh, there was no suggestion ID like that. Try again next time!"
  end
  else
  puts "Uhh, there were no geocoding results. Try again next time!"
  end
  end
  end
 
 
 
  #!/usr/bin/ruby
  require 'postgres'
 
  require 'highline.rb'
  include HighLine
 
  require 'rubygems'
  require 'json'
  require 'yaml'
  require 'pp'
  # make - { name: Civic Interchange Platform 1,stop_code: civic_platform_1, lat: -35.2794347, lng: 149.130588}
  connbus = PGconn.connect("localhost", 5432, '', '', "bus", "postgres", "snmc")
 
  f = File.open('cbrtable.yml.in.in')
  header = f.readlines
  f.close
 
  File.open('cbrtable.yml.in', 'w') do |f2|
  f2.puts header
  f2.puts "stops:\n";
  begin
  time_points = connbus.exec("SELECT * from timing_point")
  rescue PGError => e
  puts "Error reading from DB #{e}"
  #conn.close() if conn
  end
  time_points.each do |time_point|
  #pp time_point
  # 0 = name
 
  # 1 = lat*100000
  # 2 = lng*100000
  f2.puts " - { name: #{time_point[0]},stop_code: #{time_point[0]}, lat: #{Float(time_point[1])/10000000}, lng: #{Float(time_point[2])/10000000}}"
  end
  f2.puts "routes:\n";
  end
 
 
  <?php
  /*
  * GeoPo Encode in PHP
  * @author : Shintaro Inagaki
  * @param $location (Array)
  * @return $geopo (String)
  */
  function geopoEncode($lat, $lng) {
  // 64characters (number + big and small letter + hyphen + underscore)
  $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
 
  $geopo = "";
  $scale = 7;
 
  // Change a degree measure to a decimal number
  $lat = ($lat + 90) / 180 * pow(8, 10);
  $lng = ($lng + 180) / 360 * pow(8, 10);
  // Compute a GeoPo code from head and concatenate
  for($i = 0; $i < $scale; $i++) {
  $geopo .= substr($chars, floor($lat / pow(8, 9 - $i) % 8) + floor($lng / pow(8, 9 - $i) % 8) * 8, 1);
  }
  return $geopo;
  }
 
  /*
  * GeoPo Decode in PHP
  * @author : Shintaro Inagaki
  * @param $geopo (String)
  * @return $location (Array)
  */
  function geopoDecode($geopo) {
  // 64characters (number + big and small letter + hyphen + underscore)
  $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
  // Array for geolocation
  $location = array ();
 
  for ($i = 0; $i < strlen($geopo); $i++) {
  // What number of character that equal to a GeoPo code (0-63)
  $order = strpos($chars, substr($geopo, $i, 1));
  // Lat/Lng plus geolocation value of scale
  $location['lat'] = $location['lat'] + floor($order % 8) * pow(8, 9 - $i);
  $location['lng'] = $location['lng'] + floor($order / 8) * pow(8, 9 - $i);
  }
 
  // Change a decimal number to a degree measure, and plus revised value that shift center of area
  $location['lat'] = $location['lat'] * 180 / pow(8, 10) + 180 / pow(8, strlen($geopo)) / 2 - 90;
  $location['lng'] = $location['lng'] * 360 / pow(8, 10) + 360 / pow(8, strlen($geopo)) / 2 - 180;
  $location['scale'] = strlen($geopo);
 
  return $location;
  }
 
  $conn = pg_connect("dbname=bus user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $xml = simplexml_load_file("04-locatebetweenpoints.osm");
 
  /* Access the <rating> nodes of the first movie.
  * Output the rating scale, too. */
  foreach ($xml->node as $node) {
  $geoPo = geopoEncode((float)$node['lat'],(float)$node['lon']);
  $node['lat'] = (int) ((float)$node['lat']*10000000);
  $node['lon'] = (int) ((float)$node['lon']*10000000);
  echo($node['lat'].",".$node['lon']."=$geoPo<br>");
  $sql = "INSERT INTO stops (geohash, lat, lng) VALUES('$geoPo','{$node['lat']}','{$node['lon']}')";
  $result = pg_query($conn, $sql);
  if (!$result) {
  echo("Error in SQL query: " . pg_last_error() ."<br>\n");
  }
  flush();
 
  }
  ?>
 
  <?php
  header('Content-Type: application/xml');
  echo "<?xml version='1.0' encoding='UTF-8'?>
  <osm version='0.6' generator='xapi: OSM Extended API 2.0' xmlns:xapi='http://www.informationfreeway.org/xapi/0.6'
  xapi:uri='/api/0.6/*[bbox=148.98,-35.48,149.25,-35.15]' xapi:planetDate='20100630' xapi:copyright='2010 OpenStreetMap contributors'
  xapi:license='Creative commons CC-BY-SA 2.0' xapi:bugs='For assistance or to report bugs contact 80n80n@gmail.com' xapi:instance='zappyHyper'>
  ";
  $conn = pg_connect("dbname=openstreetmap user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $result_stops = pg_query($conn, "Select * FROM current_node_tags INNER JOIN current_nodes ON
  current_node_tags.id=current_nodes.id WHERE v LIKE '%bus%' ");
  if (!$result_stops) {
  echo "An stops retirieve error occured.\n";
  exit;
  }
 
  while ($stop = pg_fetch_assoc($result_stops)) {
  $stop['latitude'] = $stop['latitude']/10000000;
  $stop['longitude'] = $stop['longitude']/10000000;
 
  echo "<node id='{$stop['id']}' lat='{$stop['latitude']}' lon='{$stop['longitude']}' version='1' changeset='242919'
  user='latch' uid='6647' visible='true' timestamp='2007-08-22T05:03:00Z'>\n";
  $result_stopkeys = pg_query($conn, "SELECT * from current_node_tags where id = {$stop['id']};");
  if (!$result_stopkeys) {
  echo "An stops keys retirieve error occured.\n";
  exit;
  }
  $name = "";
  while ($stopkeys = pg_fetch_assoc($result_stopkeys)) {
  echo "<tag k='{$stopkeys['k']}' v='".htmlentities($stopkeys['v'])."'/>\n";
  }
  echo "</node>\n";
  }
 
  echo "\n</osm>\n";
  ?>
 
  #!/bin/bash
  sed -i "s/- ---/- /g" cbrtable.yml
 
  #!/usr/bin/ruby
  require 'postgres'
 
  require 'highline.rb'
  include HighLine
 
  require 'rubygems'
  require 'json'
  require 'yaml'
  require 'pp'
  # make - { name: Civic Interchange Platform 1,stop_code: civic_platform_1, lat: -35.2794347, lng: 149.130588}
  connbus = PGconn.connect("localhost", 5432, '', '', "bus", "postgres", "snmc")
 
  f = File.open('cbrtable.yml.in.in')
  header = f.readlines
  f.close
 
  File.open('cbrtable.yml.in', 'w') do |f2|
  f2.puts header
  f2.puts "stops:\n";
  begin
  time_points = connbus.exec("SELECT * from timing_point ORDER BY name")
  rescue PGError => e
  puts "Error reading from DB #{e}"
  #conn.close() if conn
  end
  time_points.each do |time_point|
  #pp time_point
  # 0 = name
 
  # 1 = lat*100000
  # 2 = lng*100000
  #pp time_point[0]
  f2.puts " - { name: #{time_point[0]},stop_code: #{time_point[0]}, lat: #{Float(time_point[1])/10000000}, lng: #{Float(time_point[2])/10000000}}"
  end
  begin
  stops = connbus.exec("SELECT * from stops")
  rescue PGError => e
  puts "Error reading from DB #{e}"
  #conn.close() if conn
  end
  stops.each do |stop|
  #pp stop
  # 0 = geoPo
  # 1 = lat*100000
  # 2 = lng*100000
  #pp time_point[0]
  f2.puts " - { name: #{stop[0]},stop_code: #{stop[0]}, lat: #{Float(stop[1])/10000000}, lng: #{Float(stop[2])/10000000}}"
  end
  f2.puts "routes:\n";
  end
 
 
  #!/bin/bash
  #for f in output/*
  #do
  # echo "Processing $f"
  # sed -ir 's/^- / - /g' $f
  # sed -ir 's/ - - /- - /g' $f
  #done
 
  sed -i "s/- ---/- /g" cbrtable.yml
 
default: cbrfeed.zip default: cbrfeed.zip
   
cbrfeed.zip: cbrtable.yml createfeed.py cbrfeed.zip: cbrtable.yml createfeed.py
./createfeed.py --input=cbrtable.yml --output=cbrfeed.zip ./createfeed.py --input=cbrtable.yml --output=cbrfeed.zip
   
ROUTE_FILES=900-intertown.yml cbrtable.yml: cbrtable.yml.in indent-route.pl
   
cbrtable.yml: cbrtable.yml.in $(ROUTE_FILES) indent-route.pl  
cp cbrtable.yml.in cbrtable.yml cp cbrtable.yml.in cbrtable.yml
@$(foreach ROUTE_FILE, $(ROUTE_FILES), \ @$(foreach ROUTE_FILE, $(wildcard output/*), \
echo "Parsing $(ROUTE_FILE)"; \ echo "Parsing $(ROUTE_FILE)"; \
echo "TODO: replace friendly timing spot names with OSM node IDs or geohash in $(ROUTE_FILE)"; \ echo "TODO: replace friendly timing spot names with OSM node IDs or geohash in $(ROUTE_FILE)"; \
echo "TODO: add inbetween stops in $(ROUTE_FILE)"; \ echo "TODO: add inbetween stops in $(ROUTE_FILE)"; \
./indent-route.pl < $(ROUTE_FILE) >> cbrtable.yml;) ./indent-route.pl < $(ROUTE_FILE) >> cbrtable.yml;)
   
cbrtable.yml.in: cbrtable.yml.in.in cbrtable.yml.in: cbrtable.yml.in.in
@echo "TODO: autogenerate stops via database, convert to YAML" ruby 04-generateymlinclude.rb
cp cbrtable.yml.in.in cbrtable.yml.in  
   
   
clean: clean:
rm -f cbrtable.yml cbrtable.yml.in cbrfeed.zip *~ rm -f cbrtable.yml cbrtable.yml.in cbrfeed.zip *~
   
 Binary files a/maxious-canberra-transit-feed/cbrfeed.zip and b/maxious-canberra-transit-feed/cbrfeed.zip differ
options: options:
start_date: 20090525 start_date: 20090525
end_date: 20100601 end_date: 20101001
remove_date: 2010601 remove_date: 20101001
agency_name: ACT Internal Omnibus Network (ACTION) agency_name: ACT Internal Omnibus Network (ACTION)
agency_url: http://www.action.act.gov.au/ agency_url: http://www.action.act.gov.au/
agency_timezone: Australia/Canberra agency_timezone: Australia/Sydney
   
   
stops: stops:
- { name: Civic Interchange Platform 1,stop_code: civic_platform_1, lat: -35.2794347, lng: 149.130588} - { name: ADFA,stop_code: ADFA, lat: -35.2937972, lng: 149.1643403}
- { name: Civic Interchange Platform 5,stop_code: civic_platform_5, lat: -35.2786, lng: 149.13033} - { name: Ainslie,stop_code: Ainslie, lat: -35.2620105, lng: 149.1443302}
- { name: Civic Interchange Platform 6,stop_code: civic_platform_6, lat: -35.27851, lng: 149.12979 } - { name: Alexander Maconochie Centre Hume,stop_code: Alexander Maconochie Centre Hume, lat: -35.3720651, lng: 149.1696618}
- { name: Canberra House Northbound, stop_code: 3042, lat: -35.27833, - { name: Alpen & Clifford St,stop_code: Alpen & Clifford St, lat: -35.20562, lng: 149.06259}
lng: 149.12712 } - { name: Anthony Rolfe/Moonlight,stop_code: Anthony Rolfe/Moonlight, lat: -35.1856021, lng: 149.1543639}
- { name: Canberra House Southbound, stop_code: 4531, - { name: Aranda,stop_code: Aranda, lat: -35.257534, lng: 149.0762963}
lat: -35.2786, lng: 149.13033 } - { name: Athllon/Sulwood Kambah,stop_code: Athllon/Sulwood Kambah, lat: -35.38442, lng: 149.09328}
- { name: Marcus Clarke Street - Unilodge ANU, stop_code: 4929, lat: -35.2764151, lng: 149.1267199 } - { name: Australian Institute Sports Bruce,stop_code: Australian Institute Sports Bruce, lat: -35.246351, lng: 149.101478}
  - { name: Belconnen Way,stop_code: Belconnen Way, lat: -35.24809, lng: 149.06765}
  - { name: Bimberi Centre,stop_code: Bimberi Centre, lat: -35.2219941, lng: 149.1546928}
  - { name: Black Mountain Telstra Tower,stop_code: Black Mountain Telstra Tower, lat: -35.2748058, lng: 149.0972461}
  - { name: Bonython,stop_code: Bonython, lat: -35.4297416, lng: 149.0814517}
  - { name: Bonython Primary,stop_code: Bonython Primary, lat: -35.431019, lng: 149.0831217}
  - { name: Botanic Gardens,stop_code: Botanic Gardens, lat: -35.278643, lng: 149.1093237}
  - { name: Brindabella Business Park,stop_code: Brindabella Business Park, lat: -35.314496, lng: 149.189145}
  - { name: Brindabella Gardens Nursing Home,stop_code: Brindabella Gardens Nursing Home, lat: -35.3294459, lng: 149.0806116}
  - { name: Bugden/Sternberg,stop_code: Bugden/Sternberg, lat: -35.4017223, lng: 149.0992172}
  - { name: Burton & Garran Hall/Daley Road ANU,stop_code: Burton & Garran Hall/Daley Road ANU, lat: -35.2753671, lng: 149.1172822}
  - { name: Calvary Hospital,stop_code: Calvary Hospital, lat: -35.25212, lng: 149.09088}
  - { name: Calwell Shops,stop_code: Calwell Shops, lat: -35.43524, lng: 149.113942}
  - { name: Cameron Ave Bus Station,stop_code: Cameron Ave Bus Station, lat: -35.2410195, lng: 149.0722506}
  - { name: Cameron Ave Bus Station - Platform 1,stop_code: Cameron Ave Bus Station - Platform 1, lat: -35.2410195, lng: 149.0722506}
  - { name: Cameron Ave Bus Station - Platform 2,stop_code: Cameron Ave Bus Station - Platform 2, lat: -35.2410108, lng: 149.0717142}
  - { name: Cameron Ave Bus Station - Platform 3,stop_code: Cameron Ave Bus Station - Platform 3, lat: -35.2410064, lng: 149.0710758}
  - { name: Cameron Ave Bus Station - Platform 4,stop_code: Cameron Ave Bus Station - Platform 4, lat: -35.2411773, lng: 149.0709793}
  - { name: Cameron Ave Bus Station - Platform 5,stop_code: Cameron Ave Bus Station - Platform 5, lat: -35.241186, lng: 149.0720789}
  - { name: Campbell Park Offices,stop_code: Campbell Park Offices, lat: -35.28368, lng: 149.17045}
  - { name: Canberra College Weston,stop_code: Canberra College Weston, lat: -35.3490278, lng: 149.0486277}
  - { name: Canberra Hospital,stop_code: Canberra Hospital, lat: -35.3459462, lng: 149.1012001}
  - { name: Canberra Times,stop_code: Canberra Times, lat: -35.3245431, lng: 149.1705533}
  - { name: Caswell Drive,stop_code: Caswell Drive, lat: -35.25922, lng: 149.08576}
  - { name: Causeway,stop_code: Causeway, lat: -35.31615, lng: 149.15058}
  - { name: Centre Link Tuggeranong,stop_code: Centre Link Tuggeranong, lat: -35.4207496, lng: 149.0700973}
  - { name: Chapman,stop_code: Chapman, lat: -35.3557877, lng: 149.0408111}
  - { name: Charnwood,stop_code: Charnwood, lat: -35.2052138, lng: 149.0337266}
  - { name: Chifley,stop_code: Chifley, lat: -35.350985, lng: 149.077319}
  - { name: Chisholm Shops,stop_code: Chisholm Shops, lat: -35.41341, lng: 149.12833}
  - { name: Chuculba/William Slim,stop_code: Chuculba/William Slim, lat: -35.2103241, lng: 149.0997736}
  - { name: City Interchange,stop_code: City Interchange, lat: -35.2794346, lng: 149.1305879}
  - { name: City Interchange - Platform 1,stop_code: City Interchange - Platform 1, lat: -35.2794346, lng: 149.1305879}
  - { name: City Interchange - Platform 10,stop_code: City Interchange - Platform 10, lat: -35.2793571, lng: 149.1293659}
  - { name: City Interchange - Platform 11,stop_code: City Interchange - Platform 11, lat: -35.2787905, lng: 149.1288627}
  - { name: City Interchange - Platform 3,stop_code: City Interchange - Platform 3, lat: -35.2787886, lng: 149.1304779}
  - { name: City Interchange - Platform 4,stop_code: City Interchange - Platform 4, lat: -35.2785658, lng: 149.1301727}
  - { name: City Interchange - Platform 5,stop_code: City Interchange - Platform 5, lat: -35.2785242, lng: 149.1297348}
  - { name: City Interchange - Platform 7,stop_code: City Interchange - Platform 7, lat: -35.27843, lng: 149.130345}
  - { name: City Interchange - Platform 8,stop_code: City Interchange - Platform 8, lat: -35.2778798, lng: 149.1305995}
  - { name: City Interchange - Platform 9,stop_code: City Interchange - Platform 9, lat: -35.2783224, lng: 149.130726}
  - { name: Citywest,stop_code: Citywest, lat: -35.2788605, lng: 149.1257969}
  - { name: Cnr Kerrigan/Lhotsky,stop_code: Cnr Kerrigan/Lhotsky, lat: -35.1995716, lng: 149.0285277}
  - { name: Cnr Tillyard Dr & Spalding St,stop_code: Cnr Tillyard Dr & Spalding St, lat: -35.2040477, lng: 149.0393052}
  - { name: Cohen St Bus Station,stop_code: Cohen St Bus Station, lat: -35.2394775, lng: 149.0602031}
  - { name: Cohen St Bus Station - Platform 1,stop_code: Cohen St Bus Station - Platform 1, lat: -35.2394775, lng: 149.0602031}
  - { name: Cohen St Bus Station - Platform 2,stop_code: Cohen St Bus Station - Platform 2, lat: -35.2396467, lng: 149.0602152}
  - { name: Cohen St Bus Station - Platform 3,stop_code: Cohen St Bus Station - Platform 3, lat: -35.239764, lng: 149.0604531}
  - { name: Cohen St Bus Station - Platform 4,stop_code: Cohen St Bus Station - Platform 4, lat: -35.239844, lng: 149.0600683}
  - { name: Cohen St Bus Station - Platform 5,stop_code: Cohen St Bus Station - Platform 5, lat: -35.2401211, lng: 149.0597102}
  - { name: Cohen St Bus Station - Platform 6,stop_code: Cohen St Bus Station - Platform 6, lat: -35.2400028, lng: 149.060315}
  - { name: Conder Primary,stop_code: Conder Primary, lat: -35.4643475, lng: 149.0986908}
  - { name: Cook,stop_code: Cook, lat: -35.2596, lng: 149.0638}
  - { name: Cooleman Court,stop_code: Cooleman Court, lat: -35.34147, lng: 149.05338}
  - { name: Copland College,stop_code: Copland College, lat: -35.2127018, lng: 149.0596387}
  - { name: Curtin,stop_code: Curtin, lat: -35.3248779, lng: 149.081441}
  - { name: Deakin,stop_code: Deakin, lat: -35.3158608, lng: 149.1084563}
  - { name: Deamer/Clift Richardson,stop_code: Deamer/Clift Richardson, lat: -35.4319597, lng: 149.1187876}
  - { name: Dickson,stop_code: Dickson, lat: -35.2498434, lng: 149.1391218}
  - { name: Dickson College,stop_code: Dickson College, lat: -35.24923, lng: 149.15315}
  - { name: Dickson Cowper St,stop_code: Dickson Cowper St, lat: -35.250297, lng: 149.141336}
  - { name: Dickson Shops/Antill St,stop_code: Dickson Shops/Antill St, lat: -35.2251335, lng: 149.1658895}
  - { name: Duffy,stop_code: Duffy, lat: -35.3366908, lng: 149.0324311}
  - { name: Duffy Primary School,stop_code: Duffy Primary School, lat: -35.334219, lng: 149.033656}
  - { name: Dunlop,stop_code: Dunlop, lat: -35.1942693, lng: 149.0206702}
  - { name: Electricity House,stop_code: Electricity House, lat: -35.282374, lng: 149.132047}
  - { name: Erindale Centre,stop_code: Erindale Centre, lat: -35.4038881, lng: 149.0992283}
  - { name: Erindale Centre /Sternberg Crescent,stop_code: Erindale Centre /Sternberg Crescent, lat: -35.4014472, lng: 149.0956545}
  - { name: Erindale Dr/ Charleston St Monash,stop_code: Erindale Dr/ Charleston St Monash, lat: -35.4172271, lng: 149.0813467}
  - { name: Erindale Drive/Sternberg,stop_code: Erindale Drive/Sternberg, lat: -35.4014472, lng: 149.0956545}
  - { name: Evatt,stop_code: Evatt, lat: -35.2091093, lng: 149.0735343}
  - { name: Eye Hospital,stop_code: Eye Hospital, lat: -35.3341884, lng: 149.1656213}
  - { name: Fairbairn Park,stop_code: Fairbairn Park, lat: -35.3001773, lng: 149.2041185}
  - { name: Farrer Primary School,stop_code: Farrer Primary School, lat: -35.37887, lng: 149.10641}
  - { name: Farrer Terminus,stop_code: Farrer Terminus, lat: -35.3771794, lng: 149.1046948}
  - { name: Federation Square,stop_code: Federation Square, lat: -35.1908726, lng: 149.0848153}
  - { name: Fisher,stop_code: Fisher, lat: -35.3605627, lng: 149.0576481}
  - { name: Flemington/Nullabor,stop_code: Flemington/Nullabor, lat: -35.2008585, lng: 149.1493407}
  - { name: Flemington Rd,stop_code: Flemington Rd, lat: -35.20756, lng: 149.14778}
  - { name: Flemington Rd/Sandford St,stop_code: Flemington Rd/Sandford St, lat: -35.2008585, lng: 149.1493407}
  - { name: Florey Shops,stop_code: Florey Shops, lat: -35.2258544, lng: 149.0546214}
  - { name: Flynn,stop_code: Flynn, lat: -35.2019283, lng: 149.0478356}
  - { name: Fraser,stop_code: Fraser, lat: -35.1896539, lng: 149.0435012}
  - { name: Fraser East Terminus,stop_code: Fraser East Terminus, lat: -35.1896539, lng: 149.0435012}
  - { name: Fraser West Terminus,stop_code: Fraser West Terminus, lat: -35.191513, lng: 149.038006}
  - { name: Fyshwick Direct Factory Outlet,stop_code: Fyshwick Direct Factory Outlet, lat: -35.3359862, lng: 149.1796322}
  - { name: Fyshwick Terminus,stop_code: Fyshwick Terminus, lat: -35.3285202, lng: 149.1785592}
  - { name: Garran,stop_code: Garran, lat: -35.3423286, lng: 149.10811}
  - { name: Geoscience Australia,stop_code: Geoscience Australia, lat: -35.3429702, lng: 149.1583893}
  - { name: Giralang,stop_code: Giralang, lat: -35.2115608, lng: 149.0960692}
  - { name: Gordon Primary,stop_code: Gordon Primary, lat: -35.455517, lng: 149.086978}
  - { name: Gowrie,stop_code: Gowrie, lat: -35.4120264, lng: 149.1110804}
  - { name: Gungahlin Market Place,stop_code: Gungahlin Market Place, lat: -35.1769532, lng: 149.1319017}
  - { name: Gwydir Square Kaleen,stop_code: Gwydir Square Kaleen, lat: -35.2338677, lng: 149.1031998}
  - { name: Hackett,stop_code: Hackett, lat: -35.2481617, lng: 149.1626094}
  - { name: Hawker,stop_code: Hawker, lat: -35.2437386, lng: 149.0432804}
  - { name: Hawker College,stop_code: Hawker College, lat: -35.2454598, lng: 149.0324251}
  - { name: Heagney/Clift Richardson,stop_code: Heagney/Clift Richardson, lat: -35.4251299, lng: 149.11375}
  - { name: Hibberson/Kate Crace,stop_code: Hibberson/Kate Crace, lat: -35.1861642, lng: 149.1391756}
  - { name: Higgins,stop_code: Higgins, lat: -35.2313901, lng: 149.0271811}
  - { name: Holder,stop_code: Holder, lat: -35.3378123, lng: 149.0449433}
  - { name: Holt,stop_code: Holt, lat: -35.223099, lng: 149.0126269}
  - { name: Hospice,stop_code: Hospice, lat: -35.3029, lng: 149.14957}
  - { name: Hughes,stop_code: Hughes, lat: -35.3339223, lng: 149.093854}
  - { name: Isaacs,stop_code: Isaacs, lat: -35.3669823, lng: 149.1119217}
  - { name: Isabella Shops,stop_code: Isabella Shops, lat: -35.4285703, lng: 149.0916837}
  - { name: Jamison Centre,stop_code: Jamison Centre, lat: -35.2527268, lng: 149.0713712}
  - { name: John James Hospital,stop_code: John James Hospital, lat: -35.3200295, lng: 149.0955996}
  - { name: Kaleen Village/Maribyrnong,stop_code: Kaleen Village/Maribyrnong, lat: -35.2274031, lng: 149.1075421}
  - { name: Kambah High,stop_code: Kambah High, lat: -35.3847749, lng: 149.0720245}
  - { name: Kambah Village,stop_code: Kambah Village, lat: -35.3800314, lng: 149.0576581}
  - { name: Katherine / Horse Park,stop_code: Katherine / Horse Park, lat: -35.1680901, lng: 149.1321801}
  - { name: Kings Ave/National Crt,stop_code: Kings Ave/National Crt, lat: -35.3062755, lng: 149.1291434}
  - { name: Kingston,stop_code: Kingston, lat: -35.3197448, lng: 149.1375261}
  - { name: Kippax,stop_code: Kippax, lat: -35.22225, lng: 149.0195627}
  - { name: Kippax Centre,stop_code: Kippax Centre, lat: -35.22172, lng: 149.01995}
  - { name: Kosciuszko/Everard,stop_code: Kosciuszko/Everard, lat: -35.188901, lng: 149.1216937}
  - { name: Lanyon Market Place,stop_code: Lanyon Market Place, lat: -35.4573, lng: 149.09199}
  - { name: Latham Shops,stop_code: Latham Shops, lat: -35.21848, lng: 149.03214}
  - { name: Lathlain St Bus Station,stop_code: Lathlain St Bus Station, lat: -35.2396657, lng: 149.0633993}
  - { name: Lathlain St Bus Station - Platform 1,stop_code: Lathlain St Bus Station - Platform 1, lat: -35.2408973, lng: 149.0639887}
  - { name: Lathlain St Bus Station - Platform 2,stop_code: Lathlain St Bus Station - Platform 2, lat: -35.2406038, lng: 149.0638922}
  - { name: Lathlain St Bus Station - Platform 3,stop_code: Lathlain St Bus Station - Platform 3, lat: -35.2400517, lng: 149.0637152}
  - { name: Lathlain St Bus Station - Platform 4,stop_code: Lathlain St Bus Station - Platform 4, lat: -35.2396657, lng: 149.0633993}
  - { name: Lathlain St Bus Station - Platform 5,stop_code: Lathlain St Bus Station - Platform 5, lat: -35.2405468, lng: 149.0636669}
  - { name: Lathlain St Bus Station - Platform 6,stop_code: Lathlain St Bus Station - Platform 6, lat: -35.2410486, lng: 149.0638326}
  - { name: Lewis Luxton/Woodcock Dr,stop_code: Lewis Luxton/Woodcock Dr, lat: -35.4422566, lng: 149.0854375}
  - { name: Lithgow St Terminus Fyshwick,stop_code: Lithgow St Terminus Fyshwick, lat: -35.3296912, lng: 149.1668153}
  - { name: Livingston Shops Kambah,stop_code: Livingston Shops Kambah, lat: -35.3883359, lng: 149.0811471}
  - { name: Lyneham,stop_code: Lyneham, lat: -35.2523304, lng: 149.1246184}
  - { name: Lyneham High,stop_code: Lyneham High, lat: -35.2524016, lng: 149.130254}
  - { name: Lyons,stop_code: Lyons, lat: -35.3415779, lng: 149.0765703}
  - { name: Macarthur / Miller O'Connor,stop_code: Macarthur / Miller O'Connor, lat: -35.2587584, lng: 149.1153561}
  - { name: Macarthur / Northbourne,stop_code: Macarthur / Northbourne, lat: -35.2481997, lng: 149.134308}
  - { name: Macgregor Shops,stop_code: Macgregor Shops, lat: -35.2100645, lng: 149.0122952}
  - { name: MacKillop College Isabella Campus,stop_code: MacKillop College Isabella Campus, lat: -35.42597, lng: 149.09172}
  - { name: MacKillop College Wanniassa Campus,stop_code: MacKillop College Wanniassa Campus, lat: -35.4056, lng: 149.089774}
  - { name: Macquarie,stop_code: Macquarie, lat: -35.2483414, lng: 149.0600666}
  - { name: Majura Business Park,stop_code: Majura Business Park, lat: -35.2987, lng: 149.18561}
  - { name: Manuka,stop_code: Manuka, lat: -35.3200096, lng: 149.1341344}
  - { name: Manuka/Captain Cook,stop_code: Manuka/Captain Cook, lat: -35.3217, lng: 149.13445}
  - { name: McKellar,stop_code: McKellar, lat: -35.2174267, lng: 149.0742108}
  - { name: Melba,stop_code: Melba, lat: -35.2083104, lng: 149.0485366}
  - { name: Menindee Drive - Hospice,stop_code: Menindee Drive - Hospice, lat: -35.3024506, lng: 149.149499}
  - { name: Mentone View/Tharwa Drive,stop_code: Mentone View/Tharwa Drive, lat: -35.45144, lng: 149.0919}
  - { name: Merici Braddon,stop_code: Merici Braddon, lat: -35.266525, lng: 149.137037}
  - { name: Monash,stop_code: Monash, lat: -35.4190254, lng: 149.0834805}
  - { name: Monash Primary,stop_code: Monash Primary, lat: -35.414879, lng: 149.089411}
  - { name: Mount Neighbour School,stop_code: Mount Neighbour School, lat: -35.382445, lng: 149.051518}
  - { name: Narrabundah College,stop_code: Narrabundah College, lat: -35.3362106, lng: 149.1471005}
  - { name: Narrabundah Terminus,stop_code: Narrabundah Terminus, lat: -35.332605, lng: 149.154049}
  - { name: National Aquarium,stop_code: National Aquarium, lat: -35.29915, lng: 149.07025}
  - { name: National Circuit / Canberra Ave,stop_code: National Circuit / Canberra Ave, lat: -35.31407, lng: 149.13011}
  - { name: National Hockey Centre Lyneham,stop_code: National Hockey Centre Lyneham, lat: -35.2446729, lng: 149.1288303}
  - { name: National Museum,stop_code: National Museum, lat: -35.29248, lng: 149.1205367}
  - { name: Newcastle / Isa Street Fyshwick,stop_code: Newcastle / Isa Street Fyshwick, lat: -35.3255, lng: 149.173291}
  - { name: Ngunnawal Primary,stop_code: Ngunnawal Primary, lat: -35.1688551, lng: 149.1112569}
  - { name: Nicholls Primary,stop_code: Nicholls Primary, lat: -35.1905592, lng: 149.0876716}
  - { name: Northbourne Ave/Antill St,stop_code: Northbourne Ave/Antill St, lat: -35.248287, lng: 149.134241}
  - { name: North Lyneham,stop_code: North Lyneham, lat: -35.2385618, lng: 149.1221188}
  - { name: O'Connor,stop_code: O'Connor, lat: -35.2640376, lng: 149.1226107}
  - { name: Olims Hotel,stop_code: Olims Hotel, lat: -35.27597, lng: 149.1428}
  - { name: Outtrim / Duggan,stop_code: Outtrim / Duggan, lat: -35.435871, lng: 149.097692}
  - { name: Page Shops,stop_code: Page Shops, lat: -35.2360695, lng: 149.0536554}
  - { name: Parliament House,stop_code: Parliament House, lat: -35.3081571, lng: 149.1244592}
  - { name: Paul Coe / Mirrabei,stop_code: Paul Coe / Mirrabei, lat: -35.17467, lng: 149.12005}
  - { name: Pearce,stop_code: Pearce, lat: -35.3625413, lng: 149.0815935}
  - { name: Police College Weston,stop_code: Police College Weston, lat: -35.33018, lng: 149.05458}
  - { name: Proctor / Mead,stop_code: Proctor / Mead, lat: -35.415305, lng: 149.127204}
  - { name: Railway Station Kingston,stop_code: Railway Station Kingston, lat: -35.319602, lng: 149.149083}
  - { name: Red Hill,stop_code: Red Hill, lat: -35.336505, lng: 149.131645}
  - { name: Rivett,stop_code: Rivett, lat: -35.3473758, lng: 149.0365438}
  - { name: Russell Offices,stop_code: Russell Offices, lat: -35.2973294, lng: 149.1508803}
  - { name: Sainsbury Street,stop_code: Sainsbury Street, lat: -35.3885, lng: 149.09643}
  - { name: Saint Andrews Village Hughes,stop_code: Saint Andrews Village Hughes, lat: -35.328097, lng: 149.088685}
  - { name: Scullin Shops,stop_code: Scullin Shops, lat: -35.23356, lng: 149.04056}
  - { name: Shoalhaven / Katherine Ave,stop_code: Shoalhaven / Katherine Ave, lat: -35.16823, lng: 149.12791}
  - { name: Southlands Mawson,stop_code: Southlands Mawson, lat: -35.3650685, lng: 149.0945962}
  - { name: Southwell Park,stop_code: Southwell Park, lat: -35.24573, lng: 149.1321}
  - { name: Spence,stop_code: Spence, lat: -35.194735, lng: 149.062352}
  - { name: Spence Terminus,stop_code: Spence Terminus, lat: -35.199684, lng: 149.0676196}
  - { name: St Clare of Assisi Primary,stop_code: St Clare of Assisi Primary, lat: -35.4606284, lng: 149.0962704}
  - { name: St Francis Xavier Florey,stop_code: St Francis Xavier Florey, lat: -35.223951, lng: 149.0406888}
  - { name: Stromlo High Waramanga,stop_code: Stromlo High Waramanga, lat: -35.3551186, lng: 149.0547624}
  - { name: St Thomas More Campbell,stop_code: St Thomas More Campbell, lat: -35.286717, lng: 149.156836}
  - { name: Sydney Avenue,stop_code: Sydney Avenue, lat: -35.31193, lng: 149.13105}
  - { name: Taverner/Erindale,stop_code: Taverner/Erindale, lat: -35.4059104, lng: 149.0809317}
  - { name: Tharwa Drive,stop_code: Tharwa Drive, lat: -35.458251, lng: 149.091652}
  - { name: Tharwa/Knoke,stop_code: Tharwa/Knoke, lat: -35.47281, lng: 149.08926}
  - { name: Tharwa/Pockett,stop_code: Tharwa/Pockett, lat: -35.47348, lng: 149.09178}
  - { name: Theodore,stop_code: Theodore, lat: -35.4464808, lng: 149.1234651}
  - { name: Torrens Shops,stop_code: Torrens Shops, lat: -35.3730889, lng: 149.087327}
  - { name: Tuggeranong Interchange,stop_code: Tuggeranong Interchange, lat: -35.41465, lng: 149.06537}
  - { name: Tuggeranong Interchange - Platform 3,stop_code: Tuggeranong Interchange - Platform 3, lat: -35.4147569, lng: 149.0657435}
  - { name: Tuggeranong Interchange - Platform 4,stop_code: Tuggeranong Interchange - Platform 4, lat: -35.4144924, lng: 149.0655423}
  - { name: Tuggeranong Interchange - Platform 5,stop_code: Tuggeranong Interchange - Platform 5, lat: -35.414217, lng: 149.0653492}
  - { name: Tuggeranong Interchange - Platform 7,stop_code: Tuggeranong Interchange - Platform 7, lat: -35.4146761, lng: 149.0654565}
  - { name: Tuggeranong Interchange - Platform 8,stop_code: Tuggeranong Interchange - Platform 8, lat: -35.4149428, lng: 149.0656523}
  - { name: University of Canberra,stop_code: University of Canberra, lat: -35.2423222, lng: 149.0831522}
  - { name: Wanniassa High,stop_code: Wanniassa High, lat: -35.3952462, lng: 149.0852655}
  - { name: Waramanga,stop_code: Waramanga, lat: -35.3526825, lng: 149.0594712}
  - { name: War Memorial,stop_code: War Memorial, lat: -35.280477, lng: 149.149085}
  - { name: Watson,stop_code: Watson, lat: -35.2389399, lng: 149.1535345}
  - { name: Watson Terminus,stop_code: Watson Terminus, lat: -35.2374698, lng: 149.1534553}
  - { name: Weetangera Shops,stop_code: Weetangera Shops, lat: -35.248393, lng: 149.0506342}
  - { name: Weston Creek Terminus,stop_code: Weston Creek Terminus, lat: -35.342728, lng: 149.0524906}
  - { name: Weston Primary,stop_code: Weston Primary, lat: -35.3305221, lng: 149.0524281}
  - { name: William Webb / Ginninderra Drive,stop_code: William Webb / Ginninderra Drive, lat: -35.2355797, lng: 149.0742074}
  - { name: Woden Interchange,stop_code: Woden Interchange, lat: -35.34433, lng: 149.08742}
  - { name: Woden Interchange - Platform 10,stop_code: Woden Interchange - Platform 10, lat: -35.3439501, lng: 149.0877369}
  - { name: Woden Interchange - Platform 11,stop_code: Woden Interchange - Platform 11, lat: -35.3439129, lng: 149.0876216}
  - { name: Woden Interchange - Platform 12,stop_code: Woden Interchange - Platform 12, lat: -35.3442094, lng: 149.0876444}
  - { name: Woden Interchange - Platform 14,stop_code: Woden Interchange - Platform 14, lat: -35.34438, lng: 149.0872662}
  - { name: Woden Interchange - Platform 15,stop_code: Woden Interchange - Platform 15, lat: -35.3444271, lng: 149.0869631}
  - { name: Woden Interchange - Platform 16,stop_code: Woden Interchange - Platform 16, lat: -35.344484, lng: 149.0866144}
  - { name: Woden Interchange - Platform 2,stop_code: Woden Interchange - Platform 2, lat: -35.3447574, lng: 149.0862912}
  - { name: Woden Interchange - Platform 3,stop_code: Woden Interchange - Platform 3, lat: -35.344566, lng: 149.086774}
  - { name: Woden Interchange - Platform 4,stop_code: Woden Interchange - Platform 4, lat: -35.3445222, lng: 149.0870436}
  - { name: Woden Interchange - Platform 5,stop_code: Woden Interchange - Platform 5, lat: -35.3444741, lng: 149.0873533}
  - { name: Woden Interchange - Platform 6,stop_code: Woden Interchange - Platform 6, lat: -35.34445, lng: 149.0875371}
  - { name: Woden Interchange - Platform 9,stop_code: Woden Interchange - Platform 9, lat: -35.3442083, lng: 149.0877771}
  - { name: Woodcock/Clare Dennis,stop_code: Woodcock/Clare Dennis, lat: -35.4422566, lng: 149.0854375}
  - { name: Yarralumla Shops,stop_code: Yarralumla Shops, lat: -35.30725, lng: 149.0972}
  routes:
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: "10"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 632a
  - 642a
  - 644a
  - 649a
  - 659a
  - 706a
  - 708a
  - 712a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 702a
  - 712a
  - 714a
  - 719a
  - 729a
  - 736a
  - 738a
  - 742a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 732a
  - 742a
  - 744a
  - 749a
  - 759a
  - 806a
  - 808a
  - 812a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 802a
  - 812a
  - 814a
  - 819a
  - 829a
  - 836a
  - 838a
  - 842a
  - - "-"
  - "-"
  - "-"
  - 800a
  - 803a
  - 808a
  - 820a
  - 830a
  - 832a
  - 837a
  - 847a
  - 854a
  - 856a
  - 900a
  - - "-"
  - "-"
  - "-"
  - 830a
  - 833a
  - 838a
  - 850a
  - 900a
  - 902a
  - 907a
  - 917a
  - 924a
  - 926a
  - 930a
  - - "-"
  - "-"
  - "-"
  - 900a
  - 903a
  - 908a
  - 920a
  - 930a
  - 932a
  - 937a
  - 947a
  - 954a
  - 956a
  - 1000a
  - - 918a
  - 929a
  - 934a
  - 941a
  - 944a
  - 949a
  - 1001a
  - 1011a
  - 1013a
  - 1018a
  - 1028a
  - 1035a
  - 1037a
  - 1041a
  - - 948a
  - 959a
  - 1004a
  - 1011a
  - 1014a
  - 1019a
  - 1031a
  - 1041a
  - 1043a
  - 1048a
  - 1058a
  - 1105a
  - 1107a
  - 1111a
  - - 1018a
  - 1029a
  - 1034a
  - 1041a
  - 1044a
  - 1049a
  - 1101a
  - 1111a
  - 1113a
  - 1118a
  - 1128a
  - 1135a
  - 1137a
  - 1141a
  - - 1048a
  - 1059a
  - 1104a
  - 1111a
  - 1114a
  - 1119a
  - 1131a
  - 1141a
  - 1143a
  - 1148a
  - 1158a
  - 1205p
  - 1207p
  - 1211p
  - - 1118a
  - 1129a
  - 1134a
  - 1141a
  - 1144a
  - 1149a
  - 1201p
  - 1211p
  - 1213p
  - 1218p
  - 1228p
  - 1235p
  - 1237p
  - 1241p
  - - 1148a
  - 1159a
  - 1204p
  - 1211p
  - 1214p
  - 1219p
  - 1231p
  - 1241p
  - 1243p
  - 1248p
  - 1258p
  - 105p
  - 107p
  - 111p
  - - 1218p
  - 1229p
  - 1234p
  - 1241p
  - 1244p
  - 1249p
  - 101p
  - 111p
  - 113p
  - 118p
  - 128p
  - 135p
  - 137p
  - 141p
  - - 1248p
  - 1259p
  - 104p
  - 111p
  - 114p
  - 119p
  - 131p
  - 141p
  - 143p
  - 148p
  - 158p
  - 205p
  - 207p
  - 211p
  - - 118p
  - 129p
  - 134p
  - 141p
  - 144p
  - 149p
  - 201p
  - 211p
  - 213p
  - 218p
  - 228p
  - 235p
  - 237p
  - 241p
  - - 148p
  - 159p
  - 204p
  - 211p
  - 214p
  - 219p
  - 231p
  - 241p
  - 243p
  - 248p
  - 258p
  - 305p
  - 307p
  - 311p
  - - 218p
  - 229p
  - 234p
  - 241p
  - 244p
  - 249p
  - 301p
  - 311p
  - 314p
  - 319p
  - 329p
  - 336p
  - 338p
  - 342p
  - - 248p
  - 259p
  - 304p
  - 311p
  - 315p
  - 320p
  - 332p
  - 342p
  - 345p
  - 350p
  - 400p
  - 407p
  - 409p
  - 413p
  - - 318p
  - 329p
  - 334p
  - 341p
  - 345p
  - 350p
  - 402p
  - 412p
  - 415p
  - 420p
  - 430p
  - 437p
  - 439p
  - 443p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 416p
  - 426p
  - 429p
  - 434p
  - 444p
  - 451p
  - 453p
  - 457p
  - - 348p
  - 359p
  - 404p
  - 411p
  - 415p
  - 420p
  - 432p
  - 442p
  - 445p
  - 450p
  - 500p
  - 507p
  - 509p
  - 513p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 446p
  - 456p
  - 459p
  - 504p
  - 514p
  - 521p
  - 523p
  - 527p
  - - "-"
  - "-"
  - 431p
  - 441p
  - 445p
  - 450p
  - 502p
  - 512p
  - 515p
  - 520p
  - 530p
  - 537p
  - 539p
  - 543p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 516p
  - 526p
  - 529p
  - 534p
  - 544p
  - 551p
  - 553p
  - 557p
  - - "-"
  - "-"
  - 458p
  - 511p
  - 515p
  - 520p
  - 532p
  - 542p
  - 545p
  - 550p
  - 600p
  - 607p
  - 609p
  - 613p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 546p
  - 556p
  - 559p
  - 604p
  - 614p
  - 621p
  - 623p
  - 627p
  - - "-"
  - "-"
  - "-"
  - 540p
  - 544p
  - 549p
  - 601p
  - 611p
  - 614p
  - 619p
  - 629p
  - 636p
  - 638p
  - 641p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 616p
  - 626p
  - 629p
  - 634p
  - 644p
  - 651p
  - 653p
  - 656p
  - - "-"
  - "-"
  - "-"
  - 611p
  - 615p
  - 620p
  - 632p
  - 642p
  - 644p
  - 649p
  - 659p
  - 706p
  - 708p
  - 711p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 736p
  - 746p
  - 748p
  - 753p
  - 803p
  - 810p
  - 812p
  - 815p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 836p
  - 846p
  - 848p
  - 853p
  - 903p
  - 910p
  - 912p
  - 915p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 936p
  - 946p
  - 948p
  - 953p
  - 1003p
  - 1010p
  - 1012p
  - 1015p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1036p
  - 1046p
  - 1048p
  - 1053p
  - 1103p
  - 1110p
  - 1112p
  - 1115p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1136p
  - 1146p
  - 1148p
  - 1153p
  - 1203a
  - 1210a
  - 1212a
  - 1215a
  time_points:
  - Fairbairn Park
  - Brindabella Business Park
  - Majura Business Park
  - Campbell Park Offices
  - ADFA
  - War Memorial
  - City Interchange - Platform 4
  - Caswell Drive
  - Aranda
  - Cook
  - Jamison Centre
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To Fairbairn Park
  between_stops: []
   
  short_name: "10"
  stop_times:
  - - 553a
  - 555a
  - 559a
  - 606a
  - 616a
  - 621a
  - 624a
  - 634a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 624a
  - 626a
  - 630a
  - 637a
  - 647a
  - 652a
  - 655a
  - 705a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 654a
  - 656a
  - 700a
  - 707a
  - 717a
  - 722a
  - 725a
  - 736a
  - 746a
  - 752a
  - 756a
  - 803a
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - 724a
  - 729a
  - 732a
  - 742a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 709a
  - 711a
  - 715a
  - 722a
  - 732a
  - 737a
  - 740a
  - 750a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 724a
  - 726a
  - 730a
  - 737a
  - 747a
  - 752a
  - 755a
  - 806a
  - 816a
  - 822a
  - 826a
  - 835a
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - 754a
  - 759a
  - 802a
  - 812a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 739a
  - 741a
  - 745a
  - 752a
  - 802a
  - 807a
  - 810a
  - 820a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 754a
  - 756a
  - 800a
  - 807a
  - 817a
  - 822a
  - 825a
  - 836a
  - 846a
  - 852a
  - 856a
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - 812a
  - 822a
  - 827a
  - 830a
  - 840a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 809a
  - 811a
  - 815a
  - 822a
  - 832a
  - 837a
  - 840a
  - 851a
  - 901a
  - 907a
  - 911a
  - 918a
  - 927a
  - 935a
  - - 824a
  - 826a
  - 830a
  - 837a
  - 847a
  - 852a
  - 855a
  - 905a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 839a
  - 841a
  - 845a
  - 852a
  - 902a
  - 907a
  - 910a
  - 921a
  - 931a
  - 937a
  - 940a
  - 947a
  - 956a
  - 1004a
  - - 854a
  - 856a
  - 900a
  - 907a
  - 917a
  - 922a
  - 925a
  - 935a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 955a
  - 1005a
  - 1011a
  - 1014a
  - 1021a
  - 1030a
  - 1038a
  - - 925a
  - 927a
  - 931a
  - 938a
  - 948a
  - 953a
  - 955a
  - 1005a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1025a
  - 1035a
  - 1041a
  - 1044a
  - 1051a
  - 1100a
  - 1108a
  - - 957a
  - 959a
  - 1003a
  - 1010a
  - 1020a
  - 1025a
  - 1027a
  - 1037a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1055a
  - 1105a
  - 1111a
  - 1114a
  - 1121a
  - 1130a
  - 1138a
  - - 1026a
  - 1028a
  - 1032a
  - 1039a
  - 1049a
  - 1054a
  - 1056a
  - 1106a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1125a
  - 1135a
  - 1141a
  - 1144a
  - 1151a
  - 1200p
  - 1208p
  - - 1056a
  - 1058a
  - 1102a
  - 1109a
  - 1119a
  - 1124a
  - 1126a
  - 1136a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1155a
  - 1205p
  - 1211p
  - 1214p
  - 1221p
  - 1230p
  - 1238p
  - - 1126a
  - 1128a
  - 1132a
  - 1139a
  - 1149a
  - 1154a
  - 1156a
  - 1206p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1225p
  - 1235p
  - 1241p
  - 1244p
  - 1251p
  - 100p
  - 108p
  - - 1156a
  - 1158a
  - 1202p
  - 1209p
  - 1219p
  - 1224p
  - 1226p
  - 1236p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1255p
  - 105p
  - 111p
  - 114p
  - 121p
  - 130p
  - 138p
  - - 1226p
  - 1228p
  - 1232p
  - 1239p
  - 1249p
  - 1254p
  - 1256p
  - 106p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 125p
  - 135p
  - 141p
  - 144p
  - 151p
  - 200p
  - 208p
  - - 1256p
  - 1258p
  - 102p
  - 109p
  - 119p
  - 124p
  - 126p
  - 136p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 155p
  - 205p
  - 211p
  - 214p
  - 221p
  - 230p
  - 238p
  - - 126p
  - 128p
  - 132p
  - 139p
  - 149p
  - 154p
  - 156p
  - 206p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 225p
  - 235p
  - 241p
  - 244p
  - 251p
  - 300p
  - 308p
  - - 156p
  - 158p
  - 202p
  - 209p
  - 219p
  - 224p
  - 226p
  - 236p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 255p
  - 305p
  - 311p
  - 315p
  - 322p
  - 331p
  - 339p
  - - 226p
  - 228p
  - 232p
  - 239p
  - 249p
  - 254p
  - 256p
  - 306p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 329p
  - 339p
  - 345p
  - 349p
  - 356p
  - 405p
  - 413p
  - - 256p
  - 258p
  - 302p
  - 309p
  - 319p
  - 324p
  - 326p
  - 336p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 359p
  - 409p
  - 415p
  - 419p
  - 426p
  - 435p
  - 443p
  - - 326p
  - 328p
  - 332p
  - 339p
  - 349p
  - 354p
  - 356p
  - 406p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 341p
  - 343p
  - 347p
  - 354p
  - 404p
  - 409p
  - 411p
  - 421p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 356p
  - 358p
  - 402p
  - 409p
  - 419p
  - 424p
  - 426p
  - 436p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 447p
  - 457p
  - 503p
  - 507p
  - "-"
  - "-"
  - "-"
  - - 411p
  - 413p
  - 417p
  - 424p
  - 434p
  - 439p
  - 441p
  - 451p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 426p
  - 428p
  - 432p
  - 439p
  - 449p
  - 454p
  - 456p
  - 506p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 441p
  - 443p
  - 447p
  - 454p
  - 504p
  - 509p
  - 511p
  - 521p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 456p
  - 458p
  - 502p
  - 509p
  - 519p
  - 524p
  - 526p
  - 536p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 511p
  - 513p
  - 517p
  - 524p
  - 534p
  - 539p
  - 541p
  - 551p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 526p
  - 528p
  - 532p
  - 539p
  - 549p
  - 554p
  - 556p
  - 606p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 541p
  - 543p
  - 547p
  - 554p
  - 604p
  - 609p
  - 611p
  - 621p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 620p
  - 622p
  - 626p
  - 633p
  - 643p
  - 648p
  - 650p
  - 700p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 720p
  - 722p
  - 725p
  - 732p
  - 742p
  - 747p
  - 749p
  - 759p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 820p
  - 822p
  - 825p
  - 832p
  - 842p
  - 847p
  - 849p
  - 859p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 920p
  - 922p
  - 925p
  - 932p
  - 942p
  - 947p
  - 949p
  - 959p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1020p
  - 1022p
  - 1025p
  - 1032p
  - 1042p
  - 1047p
  - 1049p
  - 1059p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1120p
  - 1122p
  - 1125p
  - 1132p
  - 1142p
  - 1147p
  - 1149p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Cohen St Bus Station - Platform 2
  - Lathlain St Bus Station - Platform 3
  - Cameron Ave Bus Station - Platform 3
  - Jamison Centre
  - Cook
  - Aranda
  - Caswell Drive
  - City Interchange - Platform 7
  - War Memorial
  - ADFA
  - Campbell Park Offices
  - Majura Business Park
  - Brindabella Business Park
  - Fairbairn Park
  -
  long_name: To City Interchange
  between_stops: []
   
  short_name: 11/111
  stop_times:
  - - 621a
  - 627a
  - 641a
  - 651a
  - 657a
  - 713a
  - 729a
  - - 641a
  - 647a
  - 701a
  - 711a
  - 717a
  - 733a
  - 751a
  - - 701a
  - 707a
  - 721a
  - 731a
  - 737a
  - 754a
  - 812a
  - - 721a
  - 727a
  - 742a
  - 752a
  - 758a
  - 815a
  - 833a
  - - 741a
  - 748a
  - 803a
  - 813a
  - 819a
  - 836a
  - 854a
  - - 801a
  - 808a
  - 823a
  - 833a
  - 839a
  - 856a
  - 914a
  - - 821a
  - 828a
  - 843a
  - 853a
  - 859a
  - 914a
  - "-"
  - - 841a
  - 848a
  - 903a
  - 913a
  - 919a
  - 933a
  - "-"
  - - 921a
  - 927a
  - 940a
  - 949a
  - 955a
  - 1007a
  - "-"
  - - 951a
  - 957a
  - 1010a
  - 1019a
  - 1025a
  - 1037a
  - "-"
  - - 1021a
  - 1027a
  - 1040a
  - 1049a
  - 1055a
  - 1107a
  - "-"
  - - 1051a
  - 1057a
  - 1110a
  - 1119a
  - 1125a
  - 1137a
  - "-"
  - - 1121a
  - 1127a
  - 1140a
  - 1149a
  - 1155a
  - 1207p
  - "-"
  - - 1151a
  - 1157a
  - 1210p
  - 1219p
  - 1225p
  - 1237p
  - "-"
  - - 1221p
  - 1227p
  - 1240p
  - 1249p
  - 1255p
  - 107p
  - "-"
  - - 1251p
  - 1257p
  - 110p
  - 119p
  - 125p
  - 137p
  - "-"
  - - 121p
  - 127p
  - 140p
  - 149p
  - 155p
  - 207p
  - "-"
  - - 151p
  - 157p
  - 210p
  - 219p
  - 225p
  - 237p
  - "-"
  - - 221p
  - 227p
  - 240p
  - 249p
  - 255p
  - 307p
  - "-"
  - - 251p
  - 257p
  - 310p
  - 319p
  - 325p
  - 339p
  - "-"
  - - 323p
  - 330p
  - 345p
  - 355p
  - 401p
  - 416p
  - "-"
  - - 340p
  - 347p
  - 402p
  - 412p
  - 418p
  - 433p
  - "-"
  - - 400p
  - 407p
  - 422p
  - 432p
  - 438p
  - 453p
  - "-"
  - - 418p
  - 425p
  - 440p
  - 450p
  - 456p
  - 511p
  - "-"
  - - 441p
  - 448p
  - 503p
  - 513p
  - 519p
  - "-"
  - "-"
  - - 501p
  - 508p
  - 523p
  - 533p
  - 539p
  - "-"
  - "-"
  - - 521p
  - 528p
  - 543p
  - 553p
  - 559p
  - 614p
  - "-"
  - - 541p
  - 548p
  - 603p
  - 613p
  - 619p
  - "-"
  - "-"
  - - 601p
  - 608p
  - 623p
  - 633p
  - 639p
  - "-"
  - "-"
  - - 625p
  - 632p
  - 645p
  - 654p
  - 700p
  - 712p
  - "-"
  - - 725p
  - 731p
  - 744p
  - 753p
  - 759p
  - 811p
  - "-"
  - - 825p
  - 831p
  - 844p
  - 853p
  - 859p
  - 911p
  - "-"
  - - 925p
  - 931p
  - 944p
  - 953p
  - 959p
  - 1011p
  - "-"
  - - 1025p
  - 1031p
  - 1044p
  - 1053p
  - 1059p
  - 1111p
  - "-"
  - - 1125p
  - 1131p
  - 1144p
  - 1153p
  - 1159p
  - "-"
  - "-"
  time_points:
  - Tuggeranong Interchange - Platform 3
  - MacKillop College Isabella Campus
  - Theodore
  - Calwell Shops
  - Erindale Centre
  - Woden Interchange - Platform 9
  - City Interchange
  -
  long_name: To Tuggeranong Interchange
  between_stops: []
   
  short_name: 11/111
  stop_times:
  - - "-"
  - "-"
  - "-"
  - 546a
  - 556a
  - 609a
  - 616a
  - - "-"
  - "-"
  - "-"
  - 606a
  - 616a
  - 629a
  - 636a
  - - "-"
  - "-"
  - "-"
  - 626a
  - 636a
  - 649a
  - 656a
  - - "-"
  - "-"
  - "-"
  - 646a
  - 656a
  - 709a
  - 716a
  - - "-"
  - "-"
  - "-"
  - 706a
  - 716a
  - 729a
  - 736a
  - - "-"
  - "-"
  - "-"
  - 725a
  - 735a
  - 749a
  - 756a
  - - "-"
  - "-"
  - "-"
  - 745a
  - 755a
  - 809a
  - 816a
  - - "-"
  - "-"
  - "-"
  - 805a
  - 815a
  - 829a
  - 836a
  - - "-"
  - "-"
  - "-"
  - 825a
  - 835a
  - 849a
  - 856a
  - - "-"
  - "-"
  - "-"
  - 845a
  - 855a
  - 909a
  - 916a
  - - "-"
  - "-"
  - "-"
  - 917a
  - 927a
  - 940a
  - 946a
  - - "-"
  - 930a
  - 942a
  - 948a
  - 957a
  - 1010a
  - 1016a
  - - "-"
  - 1000a
  - 1012a
  - 1018a
  - 1027a
  - 1040a
  - 1046a
  - - "-"
  - 1030a
  - 1042a
  - 1048a
  - 1057a
  - 1110a
  - 1116a
  - - "-"
  - 1100a
  - 1112a
  - 1118a
  - 1127a
  - 1140a
  - 1146a
  - - "-"
  - 1130a
  - 1142a
  - 1148a
  - 1157a
  - 1210p
  - 1216p
  - - "-"
  - 1200p
  - 1212p
  - 1218p
  - 1227p
  - 1240p
  - 1246p
  - - "-"
  - 1230p
  - 1242p
  - 1248p
  - 1257p
  - 110p
  - 116p
  - - "-"
  - 100p
  - 112p
  - 118p
  - 127p
  - 140p
  - 146p
  - - "-"
  - 130p
  - 142p
  - 148p
  - 157p
  - 210p
  - 216p
  - - "-"
  - 200p
  - 212p
  - 218p
  - 227p
  - 240p
  - 246p
  - - "-"
  - 230p
  - 242p
  - 248p
  - 257p
  - 311p
  - 318p
  - - "-"
  - 300p
  - 314p
  - 321p
  - 331p
  - 345p
  - 352p
  - - "-"
  - 320p
  - 334p
  - 341p
  - 351p
  - 405p
  - 412p
  - - "-"
  - 340p
  - 354p
  - 401p
  - 411p
  - 425p
  - 432p
  - - "-"
  - 400p
  - 414p
  - 421p
  - 431p
  - 445p
  - 452p
  - - "-"
  - 425p
  - 439p
  - 446p
  - 456p
  - 510p
  - 517p
  - - "-"
  - 440p
  - 454p
  - 501p
  - 511p
  - 525p
  - 532p
  - - "-"
  - 500p
  - 514p
  - 521p
  - 531p
  - 545p
  - 552p
  - - 456p
  - 513p
  - 527p
  - 534p
  - 544p
  - 558p
  - 605p
  - - 516p
  - 533p
  - 547p
  - 554p
  - 604p
  - 618p
  - 625p
  - - 534p
  - 551p
  - 605p
  - 612p
  - 622p
  - 636p
  - 641p
  - - 556p
  - 613p
  - 627p
  - 633p
  - 642p
  - 655p
  - 701p
  - - 616p
  - 633p
  - 645p
  - 651p
  - 700p
  - 713p
  - 719p
  - - "-"
  - 733p
  - 745p
  - 751p
  - 800p
  - 813p
  - 819p
  - - "-"
  - 833p
  - 845p
  - 851p
  - 900p
  - 913p
  - 919p
  - - "-"
  - 933p
  - 945p
  - 951p
  - 1000p
  - 1013p
  - 1019p
  - - "-"
  - 1033p
  - 1045p
  - 1051p
  - 1100p
  - 1113p
  - 1119p
  time_points:
  - City Interchange - Platform 1
  - Woden Interchange - Platform 11
  - Erindale Centre
  - Calwell Shops
  - Theodore
  - MacKillop College Isabella Campus
  - Tuggeranong Interchange
  -
  long_name: To Spence Terminus
  between_stops: []
   
  short_name: 12/312
  stop_times:
  - - "-"
  - "-"
  - "-"
  - 723a
  - 725a
  - 729a
  - 737a
  - 741a
  - 746a
  - 752a
  - - "-"
  - "-"
  - "-"
  - 802a
  - 804a
  - 808a
  - 816a
  - 820a
  - 825a
  - 831a
  - - 726a
  - 745a
  - 803a
  - 821a
  - 823a
  - 827a
  - 835a
  - 839a
  - 844a
  - 850a
  - - 826a
  - 845a
  - 903a
  - 921a
  - 923a
  - 927a
  - 934a
  - 938a
  - 942a
  - 948a
  - - 901a
  - 920a
  - 937a
  - 954a
  - 956a
  - 1000a
  - 1007a
  - 1011a
  - 1015a
  - 1021a
  - - 931a
  - 949a
  - 1005a
  - 1022a
  - 1024a
  - 1028a
  - 1035a
  - 1039a
  - 1043a
  - 1049a
  - - 1001a
  - 1019a
  - 1035a
  - 1052a
  - 1054a
  - 1058a
  - 1105a
  - 1109a
  - 1113a
  - 1119a
  - - 1031a
  - 1049a
  - 1105a
  - 1122a
  - 1124a
  - 1128a
  - 1135a
  - 1139a
  - 1143a
  - 1149a
  - - 1101a
  - 1119a
  - 1135a
  - 1152a
  - 1154a
  - 1158a
  - 1205p
  - 1209p
  - 1213p
  - 1219p
  - - 1131a
  - 1149a
  - 1205p
  - 1222p
  - 1224p
  - 1228p
  - 1235p
  - 1239p
  - 1243p
  - 1249p
  - - 1201p
  - 1219p
  - 1235p
  - 1252p
  - 1254p
  - 1258p
  - 105p
  - 109p
  - 113p
  - 119p
  - - 1231p
  - 1249p
  - 105p
  - 122p
  - 124p
  - 128p
  - 135p
  - 139p
  - 143p
  - 149p
  - - 101p
  - 119p
  - 135p
  - 152p
  - 154p
  - 158p
  - 205p
  - 209p
  - 213p
  - 219p
  - - 131p
  - 149p
  - 205p
  - 222p
  - 224p
  - 228p
  - 235p
  - 239p
  - 243p
  - 249p
  - - 201p
  - 219p
  - 235p
  - 252p
  - 254p
  - 258p
  - 306p
  - 310p
  - 315p
  - 321p
  - - 231p
  - 249p
  - 305p
  - 323p
  - 325p
  - 329p
  - 337p
  - 341p
  - 346p
  - 352p
  - - 301p
  - 320p
  - 338p
  - 356p
  - 358p
  - 402p
  - 410p
  - 414p
  - 419p
  - 425p
  - - 331p
  - 350p
  - 408p
  - 426p
  - 428p
  - 432p
  - 440p
  - 444p
  - 449p
  - 455p
  - - 356p
  - 415p
  - 433p
  - 451p
  - 453p
  - 457p
  - 505p
  - 509p
  - 514p
  - 520p
  - - 416p
  - 435p
  - 453p
  - 511p
  - 513p
  - 517p
  - 525p
  - 529p
  - 534p
  - 540p
  - - 436p
  - 455p
  - 513p
  - 531p
  - 533p
  - 537p
  - 545p
  - 549p
  - 554p
  - 600p
  - - 456p
  - 515p
  - 533p
  - 551p
  - 553p
  - 557p
  - 605p
  - 609p
  - 614p
  - 620p
  - - 516p
  - 535p
  - 553p
  - 611p
  - 613p
  - 617p
  - 625p
  - 629p
  - 633p
  - 639p
  - - 536p
  - 555p
  - 613p
  - 631p
  - 633p
  - 636p
  - 643p
  - 647p
  - 651p
  - 657p
  - - 636p
  - 653p
  - 708p
  - 725p
  - 727p
  - 730p
  - 737p
  - 741p
  - 745p
  - 751p
  - - "-"
  - "-"
  - "-"
  - 835p
  - 837p
  - 840p
  - 847p
  - 851p
  - 855p
  - 901p
  - - "-"
  - "-"
  - "-"
  - 935p
  - 937p
  - 940p
  - 947p
  - 951p
  - 955p
  - 1001p
  - - "-"
  - "-"
  - "-"
  - 1035p
  - 1037p
  - 1040p
  - 1047p
  - 1051p
  - 1055p
  - 1101p
  - - "-"
  - "-"
  - "-"
  - 1135p
  - 1137p
  - 1140p
  - 1147p
  - 1151p
  - 1155p
  - 1201a
  time_points:
  - Tuggeranong Interchange - Platform 8
  - Woden Interchange - Platform 9
  - City Interchange - Platform 5
  - Cameron Ave Bus Station - Platform 4
  - Lathlain St Bus Station - Platform 4
  - Cohen St Bus Station - Platform 6
  - McKellar
  - Copland College
  - Evatt
  - Spence Terminus
  -
  long_name: To Tuggeranong Interchange
  between_stops: []
   
  short_name: 12/312
  stop_times:
  - - 628a
  - 633a
  - 636a
  - 640a
  - 650a
  - 652a
  - 656a
  - "-"
  - "-"
  - "-"
  - - 656a
  - 701a
  - 704a
  - 708a
  - 718a
  - 720a
  - 724a
  - 742a
  - 759a
  - 816a
  - - 725a
  - 730a
  - 734a
  - 738a
  - 748a
  - 750a
  - 754a
  - 813a
  - 830a
  - 847a
  - - 736a
  - 741a
  - 745a
  - 749a
  - 759a
  - 801a
  - 805a
  - 824a
  - 841a
  - 858a
  - - 750a
  - 755a
  - 759a
  - 803a
  - 813a
  - 815a
  - 819a
  - 838a
  - 855a
  - 912a
  - - 810a
  - 815a
  - 819a
  - 823a
  - 833a
  - 835a
  - 839a
  - 858a
  - 915a
  - 932a
  - - 830a
  - 835a
  - 839a
  - 843a
  - 853a
  - 855a
  - 859a
  - 918a
  - 935a
  - 950a
  - - 855a
  - 900a
  - 904a
  - 908a
  - 918a
  - 920a
  - 924a
  - 942a
  - 959a
  - 1014a
  - - 926a
  - 931a
  - 934a
  - 938a
  - 948a
  - 950a
  - 954a
  - 1011a
  - 1028a
  - 1043a
  - - 956a
  - 1001a
  - 1004a
  - 1008a
  - 1018a
  - 1020a
  - 1024a
  - 1041a
  - 1058a
  - 1113a
  - - 1026a
  - 1031a
  - 1034a
  - 1038a
  - 1048a
  - 1050a
  - 1054a
  - 1111a
  - 1128a
  - 1143a
  - - 1056a
  - 1101a
  - 1104a
  - 1108a
  - 1118a
  - 1120a
  - 1124a
  - 1141a
  - 1158a
  - 1213p
  - - 1126a
  - 1131a
  - 1134a
  - 1138a
  - 1148a
  - 1150a
  - 1154a
  - 1211p
  - 1228p
  - 1243p
  - - 1156a
  - 1201p
  - 1204p
  - 1208p
  - 1218p
  - 1220p
  - 1224p
  - 1241p
  - 1258p
  - 113p
  - - 1226p
  - 1231p
  - 1234p
  - 1238p
  - 1248p
  - 1250p
  - 1254p
  - 111p
  - 128p
  - 143p
  - - 1256p
  - 101p
  - 104p
  - 108p
  - 118p
  - 120p
  - 124p
  - 141p
  - 158p
  - 213p
  - - 126p
  - 131p
  - 134p
  - 138p
  - 148p
  - 150p
  - 154p
  - 211p
  - 228p
  - 243p
  - - 156p
  - 201p
  - 204p
  - 208p
  - 218p
  - 220p
  - 224p
  - 241p
  - 258p
  - 316p
  - - 226p
  - 231p
  - 234p
  - 238p
  - 248p
  - 250p
  - 254p
  - 312p
  - 329p
  - 348p
  - - 255p
  - 300p
  - 304p
  - 308p
  - 318p
  - 320p
  - 324p
  - 343p
  - 400p
  - 419p
  - - 325p
  - 330p
  - 334p
  - 338p
  - 348p
  - 350p
  - 354p
  - 413p
  - 430p
  - 449p
  - - 345p
  - 350p
  - 354p
  - 358p
  - 408p
  - 410p
  - 414p
  - 433p
  - 450p
  - 509p
  - - 415p
  - 420p
  - 424p
  - 428p
  - 438p
  - 440p
  - 444p
  - 503p
  - 520p
  - 539p
  - - 435p
  - 440p
  - 444p
  - 448p
  - 458p
  - 500p
  - 504p
  - 523p
  - 540p
  - 559p
  - - 500p
  - 505p
  - 509p
  - 513p
  - 523p
  - 525p
  - 529p
  - 548p
  - 605p
  - 624p
  - - 525p
  - 530p
  - 534p
  - 538p
  - 548p
  - 550p
  - 554p
  - 613p
  - 630p
  - 645p
  - - 555p
  - 600p
  - 604p
  - 608p
  - 618p
  - 620p
  - 624p
  - 641p
  - 655p
  - 710p
  - - 627p
  - 632p
  - 635p
  - 639p
  - 649p
  - 651p
  - 654p
  - 710p
  - 724p
  - 739p
  - - 707p
  - 712p
  - 715p
  - 719p
  - 728a
  - 730a
  - 734p
  - "-"
  - "-"
  - "-"
  - - 807p
  - 812p
  - 815p
  - 819p
  - 828a
  - 830a
  - 834p
  - "-"
  - "-"
  - "-"
  - - 907p
  - 912p
  - 915p
  - 919p
  - 928a
  - 930a
  - 934p
  - "-"
  - "-"
  - "-"
  - - 1007p
  - 1012p
  - 1015p
  - 1019p
  - 1028a
  - 1030a
  - 1034p
  - "-"
  - "-"
  - "-"
  time_points:
  - Spence Terminus
  - Evatt
  - Copland College
  - McKellar
  - Cohen St Bus Station - Platform 3
  - Lathlain St Bus Station - Platform 1
  - Cameron Ave Bus Station - Platform 1
  - City Interchange - Platform 1
  - Woden Interchange - Platform 6
  - Tuggeranong Interchange
  -
  long_name: To Fraser West Terminus
  between_stops: []
   
  short_name: 13/313
  stop_times:
  - - "-"
  - "-"
  - "-"
  - 728a
  - 730a
  - 734a
  - 737a
  - 741a
  - 750a
  - 757a
  - - 711a
  - 729a
  - 747a
  - 805a
  - 807a
  - 811a
  - 814a
  - 818a
  - 827a
  - 834a
  - - 751a
  - 810a
  - 828a
  - 846a
  - 848a
  - 852a
  - 855a
  - 859a
  - 908a
  - 915a
  - - 811a
  - 830a
  - 848a
  - 906a
  - 908a
  - 912a
  - 915a
  - 919a
  - 928a
  - 934a
  - - 851a
  - 910a
  - 928a
  - 945a
  - 947a
  - 951a
  - 953a
  - 957a
  - 1005a
  - 1011a
  - - 921a
  - 940a
  - 956a
  - 1013a
  - 1015a
  - 1019a
  - 1021a
  - 1025a
  - 1033a
  - 1039a
  - - 951a
  - 1009a
  - 1025a
  - 1042a
  - 1044a
  - 1048a
  - 1050a
  - 1054a
  - 1102a
  - 1108a
  - - 1021a
  - 1039a
  - 1055a
  - 1112a
  - 1114a
  - 1118a
  - 1120a
  - 1124a
  - 1132a
  - 1138a
  - - 1051a
  - 1109a
  - 1125a
  - 1142a
  - 1144a
  - 1148a
  - 1150a
  - 1154a
  - 1202p
  - 1208p
  - - 1121a
  - 1139a
  - 1155a
  - 1212p
  - 1214p
  - 1218p
  - 1220p
  - 1224p
  - 1232p
  - 1238p
  - - 1151a
  - 1209p
  - 1225p
  - 1242p
  - 1244p
  - 1248p
  - 1250p
  - 1254p
  - 102p
  - 108p
  - - 1221p
  - 1239p
  - 1255p
  - 112p
  - 114p
  - 118p
  - 120p
  - 124p
  - 132p
  - 138p
  - - 1251p
  - 109p
  - 125p
  - 142p
  - 144p
  - 148p
  - 150p
  - 154p
  - 202p
  - 208p
  - - 121p
  - 139p
  - 155p
  - 212p
  - 214p
  - 218p
  - 220p
  - 224p
  - 232p
  - 238p
  - - 151p
  - 209p
  - 225p
  - 242p
  - 244p
  - 248p
  - 250p
  - 254p
  - 303p
  - 309p
  - - 221p
  - 239p
  - 255p
  - 313p
  - 315p
  - 319p
  - 322p
  - 327p
  - 337p
  - 343p
  - - 250p
  - 308p
  - 326p
  - 344p
  - 346p
  - 350p
  - 353p
  - 358p
  - 408p
  - 414p
  - - 316p
  - 335p
  - 353p
  - 411p
  - 413p
  - 417p
  - 420p
  - 425p
  - 435p
  - 441p
  - - 346p
  - 405p
  - 423p
  - 441p
  - 443p
  - 447p
  - 450p
  - 455p
  - 505p
  - 511p
  - - 406p
  - 425p
  - 443p
  - 501p
  - 503p
  - 507p
  - 510p
  - 515p
  - 525p
  - 531p
  - - 426p
  - 445p
  - 503p
  - 521p
  - 523p
  - 527p
  - 530p
  - 535p
  - 545p
  - 551p
  - - 446p
  - 505p
  - 523p
  - 541p
  - 543p
  - 547p
  - 550p
  - 555p
  - 605p
  - 611p
  - - 526p
  - 545p
  - 603p
  - 621p
  - 623p
  - 627p
  - 630p
  - 634p
  - 642p
  - 648p
  - - 556p
  - 615p
  - 632p
  - 649p
  - 651p
  - 654p
  - 656p
  - 700p
  - 708p
  - 714p
  - - 656p
  - 713p
  - 728p
  - 745p
  - 747p
  - 750p
  - 752p
  - 756p
  - 804p
  - 810p
  - - "-"
  - "-"
  - "-"
  - 840p
  - 842p
  - 845p
  - 847p
  - 851p
  - 859p
  - 905p
  - - "-"
  - "-"
  - "-"
  - 940p
  - 942p
  - 945p
  - 947p
  - 951p
  - 959p
  - 1005p
  - - "-"
  - "-"
  - "-"
  - 1040p
  - 1042p
  - 1045p
  - 1047p
  - 1051p
  - 1059p
  - 1105p
  time_points:
  - Tuggeranong Interchange - Platform 8
  - Woden Interchange - Platform 9
  - City Interchange - Platform 5
  - Cameron Ave Bus Station - Platform 4
  - Lathlain St Bus Station - Platform 4
  - Cohen St Bus Station - Platform 6
  - Page Shops
  - Scullin Shops
  - Charnwood
  - Fraser West Terminus
  -
  long_name: To Tuggeranong Interchange
  between_stops: []
   
  short_name: 13/313
  stop_times:
  - - 549a
  - 553a
  - 602a
  - 606a
  - 613a
  - 615a
  - 619a
  - 636a
  - 653a
  - 706a
  - - 619a
  - 623a
  - 632a
  - 636a
  - 643a
  - 645a
  - 649a
  - 706a
  - 723a
  - 738a
  - - 649a
  - 653a
  - 702a
  - 706a
  - 713a
  - 715a
  - 719a
  - 737a
  - 754a
  - 811a
  - - 717a
  - 721a
  - 730a
  - 735a
  - 743a
  - 745a
  - 749a
  - 808a
  - 825a
  - 842a
  - - 740a
  - 745a
  - 755a
  - 800a
  - 808a
  - 810a
  - 814a
  - 833a
  - 850a
  - 907a
  - - 800a
  - 805a
  - 815a
  - 820a
  - 828a
  - 830a
  - 834a
  - 853a
  - 910a
  - 927a
  - - 820a
  - 825a
  - 835a
  - 840a
  - 848a
  - 850a
  - 854a
  - 913a
  - 930a
  - 945a
  - - 845a
  - 850a
  - 900a
  - 905a
  - 913a
  - 915a
  - 919a
  - 937a
  - 954a
  - 1009a
  - - 917a
  - 922a
  - 932a
  - 936a
  - 943a
  - 945a
  - 949a
  - 1006a
  - 1023a
  - 1038a
  - - 949a
  - 953a
  - 1002a
  - 1006a
  - 1013a
  - 1015a
  - 1019a
  - 1036a
  - 1053a
  - 1108a
  - - 1019a
  - 1023a
  - 1032a
  - 1036a
  - 1043a
  - 1045a
  - 1049a
  - 1106a
  - 1123a
  - 1138a
  - - 1049a
  - 1053a
  - 1102a
  - 1106a
  - 1113a
  - 1115a
  - 1119a
  - 1136a
  - 1153a
  - 1208p
  - - 1119a
  - 1123a
  - 1132a
  - 1136a
  - 1143a
  - 1145a
  - 1149a
  - 1206p
  - 1223p
  - 1238p
  - - 1149a
  - 1153a
  - 1202p
  - 1206p
  - 1213p
  - 1215p
  - 1219p
  - 1236p
  - 1253p
  - 108p
  - - 1219p
  - 1223p
  - 1232p
  - 1236p
  - 1243p
  - 1245p
  - 1249p
  - 106p
  - 123p
  - 138p
  - - 1249p
  - 1253p
  - 102p
  - 106p
  - 113p
  - 115p
  - 119p
  - 136p
  - 153p
  - 208p
  - - 119p
  - 123p
  - 132p
  - 136p
  - 143p
  - 145p
  - 149p
  - 206p
  - 223p
  - 238p
  - - 149p
  - 153p
  - 202p
  - 206p
  - 213p
  - 215p
  - 219p
  - 236p
  - 253p
  - 310p
  - - 219p
  - 223p
  - 232p
  - 236p
  - 243p
  - 245p
  - 249p
  - 307p
  - 324p
  - 343p
  - - 248p
  - 252p
  - 301p
  - 305p
  - 313p
  - 315p
  - 319p
  - 338p
  - 355p
  - 414p
  - - 316p
  - 321p
  - 331p
  - 335p
  - 343p
  - 345p
  - 349p
  - 408p
  - 425p
  - 444p
  - - 346p
  - 351p
  - 401p
  - 405p
  - 413p
  - 415p
  - 419p
  - 438p
  - 455p
  - 514p
  - - 421p
  - 426p
  - 436p
  - 440p
  - 448p
  - 450p
  - 454p
  - "-"
  - "-"
  - "-"
  - - 450p
  - 455p
  - 505p
  - 509p
  - 517p
  - 519p
  - 523p
  - "-"
  - "-"
  - "-"
  - - 516p
  - 521p
  - 531p
  - 535p
  - 543p
  - 545p
  - 549p
  - 608p
  - 625p
  - 641p
  - - 546p
  - 551p
  - 601p
  - 605p
  - 613p
  - 615p
  - 619p
  - 636p
  - 650p
  - 705p
  - - 619p
  - 624p
  - 634p
  - 638p
  - 644p
  - 646p
  - 649p
  - 705p
  - 719p
  - 734p
  - - 712p
  - 716p
  - 725p
  - 729p
  - 735p
  - 737p
  - 740p
  - "-"
  - "-"
  - "-"
  - - 812p
  - 816p
  - 825p
  - 829p
  - 835p
  - 837p
  - 840p
  - "-"
  - "-"
  - "-"
  - - 912p
  - 916p
  - 925p
  - 929p
  - 935p
  - 937p
  - 940p
  - "-"
  - "-"
  - "-"
  - - 1012p
  - 1016p
  - 1025p
  - 1029p
  - 1035p
  - 1037p
  - 1040p
  - "-"
  - "-"
  - "-"
  time_points:
  - Fraser West Terminus
  - Charnwood
  - Scullin Shops
  - Page Shops
  - Cohen St Bus Station - Platform 3
  - Lathlain St Bus Station - Platform 1
  - Cameron Ave Bus Station - Platform 1
  - City Interchange - Platform 1
  - Woden Interchange - Platform 6
  - Tuggeranong Interchange
  -
  long_name: To Fraser West Terminus
  between_stops: []
   
  short_name: 14/314
  stop_times:
  - - "-"
  - "-"
  - "-"
  - 705a
  - 707a
  - 711a
  - 716a
  - 721a
  - 725a
  - 733a
  - - "-"
  - "-"
  - "-"
  - 723a
  - 725a
  - 729a
  - 735a
  - 740a
  - 745a
  - 753a
  - - 706a
  - 724a
  - 741a
  - 759a
  - 801a
  - 805a
  - 811a
  - 816a
  - 821a
  - 829a
  - - 746a
  - 805a
  - 823a
  - 841a
  - 843a
  - 847a
  - 853a
  - 858a
  - 903a
  - 911a
  - - 806a
  - 825a
  - 843a
  - 901a
  - 903a
  - 907a
  - 913a
  - 918a
  - 923a
  - 931a
  - - 843a
  - 902a
  - 920a
  - 938a
  - 940a
  - 944a
  - 949a
  - 954a
  - 958a
  - 1006a
  - - 916a
  - 935a
  - 951a
  - 1008a
  - 1010a
  - 1014a
  - 1019a
  - 1024a
  - 1028a
  - 1036a
  - - 946a
  - 1004a
  - 1020a
  - 1037a
  - 1039a
  - 1043a
  - 1048a
  - 1053a
  - 1057a
  - 1105a
  - - 1016a
  - 1034a
  - 1050a
  - 1107a
  - 1109a
  - 1113a
  - 1118a
  - 1123a
  - 1127a
  - 1135a
  - - 1046a
  - 1104a
  - 1120a
  - 1137a
  - 1139a
  - 1143a
  - 1148a
  - 1153a
  - 1157a
  - 1205p
  - - 1116a
  - 1134a
  - 1150a
  - 1207p
  - 1209p
  - 1213p
  - 1218p
  - 1223p
  - 1227p
  - 1235p
  - - 1146a
  - 1204p
  - 1220p
  - 1237p
  - 1239p
  - 1243p
  - 1248p
  - 1253p
  - 1257p
  - 105p
  - - 1216p
  - 1234p
  - 1250p
  - 107p
  - 109p
  - 113p
  - 118p
  - 123p
  - 127p
  - 135p
  - - 1246p
  - 104p
  - 120p
  - 137p
  - 139p
  - 143p
  - 148p
  - 153p
  - 157p
  - 205p
  - - 116p
  - 134p
  - 150p
  - 207p
  - 209p
  - 213p
  - 218p
  - 223p
  - 227p
  - 235p
  - - 146p
  - 204p
  - 220p
  - 237p
  - 239p
  - 243p
  - 248p
  - 253p
  - 257p
  - 306p
  - - 216p
  - 234p
  - 250p
  - 307p
  - 309p
  - 313p
  - 319p
  - 324p
  - 329p
  - 338p
  - - 245p
  - 303p
  - 321p
  - 339p
  - 341p
  - 345p
  - 351p
  - 356p
  - 401p
  - 410p
  - - "-"
  - "-"
  - "-"
  - 342p
  - 344p
  - 348p
  - 354p
  - 359p
  - 404p
  - 413p
  - - 321p
  - 340p
  - 358p
  - 416p
  - 418p
  - 422p
  - 428p
  - 433p
  - 438p
  - 447p
  - - 351p
  - 410p
  - 428p
  - 446p
  - 448p
  - 452p
  - 458p
  - 503p
  - 508p
  - 517p
  - - 421p
  - 440p
  - 458p
  - 516p
  - 518p
  - 522p
  - 528p
  - 533p
  - 538p
  - 547p
  - - 451p
  - 510p
  - 528p
  - 546p
  - 548p
  - 552p
  - 558p
  - 603p
  - 608p
  - 617p
  - - 511p
  - 530p
  - 548p
  - 606p
  - 608p
  - 612p
  - 618p
  - 623p
  - 628p
  - 636p
  - - 531p
  - 550p
  - 608p
  - 626p
  - 628p
  - 632p
  - 637p
  - 642p
  - 646p
  - 654p
  - - 551p
  - 610p
  - 628p
  - 645p
  - 647p
  - 650p
  - 655p
  - 700p
  - 704p
  - 712p
  - - 621p
  - 639p
  - 654p
  - 711p
  - 713p
  - 716p
  - 721p
  - 726p
  - 730p
  - 738p
  - - "-"
  - "-"
  - "-"
  - 746p
  - 748p
  - 751p
  - 756p
  - 801p
  - 805p
  - 813p
  - - "-"
  - "-"
  - "-"
  - 846p
  - 848p
  - 851p
  - 856p
  - 901p
  - 905p
  - 913p
  - - "-"
  - "-"
  - "-"
  - 946p
  - 948p
  - 951p
  - 956p
  - 1001p
  - 1005p
  - 1013p
  - - "-"
  - "-"
  - "-"
  - 1046p
  - 1048p
  - 1051p
  - 1056p
  - 1101p
  - 1105p
  - 1113p
  time_points:
  - Tuggeranong Interchange - Platform 8
  - Woden Interchange - Platform 9
  - City Interchange - Platform 5
  - Cameron Ave Bus Station - Platform 4
  - Lathlain St Bus Station - Platform 4
  - Cohen St Bus Station - Platform 6
  - St Francis Xavier Florey
  - Charnwood
  - Fraser
  - Fraser West Terminus
  -
  long_name: To Tuggeranong Interchange
  between_stops: []
   
  short_name: 14/314
  stop_times:
  - - 613a
  - 620a
  - 624a
  - 629a
  - 638a
  - 640a
  - 644a
  - "-"
  - "-"
  - "-"
  - - 643a
  - 650a
  - 654a
  - 659a
  - 708a
  - 710a
  - 714a
  - 731a
  - 748a
  - 805a
  - - 712a
  - 719a
  - 723a
  - 728a
  - 738a
  - 740a
  - 744a
  - 803a
  - 820a
  - 837a
  - - 735a
  - 743a
  - 748a
  - 753a
  - 803a
  - 805a
  - 809a
  - 828a
  - 845a
  - 902a
  - - 755a
  - 803a
  - 808a
  - 813a
  - 823a
  - 825a
  - 829a
  - 848a
  - 905a
  - 922a
  - - 815a
  - 823a
  - 828a
  - 833a
  - 843a
  - 845a
  - 849a
  - 908a
  - 925a
  - 941a
  - - 840a
  - 848a
  - 853a
  - 858a
  - 908a
  - 910a
  - 914a
  - 933a
  - 950a
  - 1005a
  - - 911a
  - 919a
  - 924a
  - 929a
  - 938a
  - 940a
  - 944a
  - 1001a
  - 1018a
  - 1033a
  - - 943a
  - 950a
  - 954a
  - 959a
  - 1008a
  - 1010a
  - 1014a
  - 1031a
  - 1048a
  - 1103a
  - - 1013a
  - 1020a
  - 1024a
  - 1029a
  - 1038a
  - 1040a
  - 1044a
  - 1101a
  - 1118a
  - 1133a
  - - 1043a
  - 1050a
  - 1054a
  - 1059a
  - 1108a
  - 1110a
  - 1114a
  - 1131a
  - 1148a
  - 1203p
  - - 1113a
  - 1120a
  - 1124a
  - 1129a
  - 1138a
  - 1140a
  - 1144a
  - 1201p
  - 1218p
  - 1233p
  - - 1143a
  - 1150a
  - 1154a
  - 1159a
  - 1208p
  - 1210p
  - 1214p
  - 1231p
  - 1248p
  - 103p
  - - 1213p
  - 1220p
  - 1224p
  - 1229p
  - 1238p
  - 1240p
  - 1244p
  - 101p
  - 118p
  - 133p
  - - 1243p
  - 1250p
  - 1254p
  - 1259p
  - 108p
  - 110p
  - 114p
  - 131p
  - 148p
  - 203p
  - - 113p
  - 120p
  - 124p
  - 129p
  - 138p
  - 140p
  - 144p
  - 201p
  - 218p
  - 233p
  - - 143p
  - 150p
  - 154p
  - 159p
  - 208p
  - 210p
  - 214p
  - 231p
  - 248p
  - 304p
  - - 213p
  - 220p
  - 224p
  - 229p
  - 238p
  - 240p
  - 244p
  - 301p
  - 318p
  - 337p
  - - 242p
  - 249p
  - 253p
  - 258p
  - 308p
  - 310p
  - 314p
  - 333p
  - 350p
  - 409p
  - - 311p
  - 318p
  - 323p
  - 328p
  - 338p
  - 340p
  - 344p
  - 403p
  - 420p
  - 439p
  - - 351p
  - 358p
  - 403p
  - 408p
  - 418p
  - 420p
  - 424p
  - 443p
  - 500p
  - 519p
  - - 421p
  - 428p
  - 433p
  - 438p
  - 448p
  - 450p
  - 454p
  - 513p
  - 530p
  - 549p
  - - 451p
  - 458p
  - 503p
  - 508p
  - 518a
  - 520a
  - 524p
  - "-"
  - "-"
  - "-"
  - - 541p
  - 548p
  - 553p
  - 558p
  - 608p
  - 610p
  - 614p
  - 632p
  - 646p
  - 701p
  - - 614p
  - 621p
  - 626p
  - 631p
  - 639p
  - 641p
  - 644p
  - 700p
  - 714p
  - 729p
  - - 639p
  - 646p
  - 650p
  - 655p
  - 702a
  - 704a
  - 708p
  - "-"
  - "-"
  - "-"
  - - 717p
  - 724p
  - 728p
  - 733p
  - 740a
  - 742a
  - 746p
  - "-"
  - "-"
  - "-"
  - - 817p
  - 824p
  - 828p
  - 833p
  - 840a
  - 842a
  - 846p
  - "-"
  - "-"
  - "-"
  - - 917p
  - 924p
  - 928p
  - 933p
  - 940a
  - 942a
  - 946p
  - "-"
  - "-"
  - "-"
  - - 1017p
  - 1024p
  - 1028p
  - 1033p
  - 1040a
  - 1042a
  - 1046p
  - "-"
  - "-"
  - "-"
  time_points:
  - Fraser West Terminus
  - Fraser
  - Charnwood
  - St Francis Xavier Florey
  - Cohen St Bus Station - Platform 3
  - Lathlain St Bus Station - Platform 1
  - Cameron Ave Bus Station - Platform 1
  - City Interchange - Platform 1
  - Woden Interchange - Platform 6
  - Tuggeranong Interchange
  -
  long_name: To Spence Terminus
  between_stops: []
   
  short_name: 15/315
  stop_times:
  - - "-"
  - "-"
  - "-"
  - 723a
  - 725a
  - 729a
  - 737a
  - 741a
  - 749a
  - 754a
  - - "-"
  - "-"
  - "-"
  - 803a
  - 805a
  - 809a
  - 817a
  - 821a
  - 829a
  - 834a
  - - 731a
  - 750a
  - 808a
  - 826a
  - 828a
  - 832a
  - 840a
  - 844a
  - 852a
  - 857a
  - - 831a
  - 850a
  - 908a
  - 926a
  - 928a
  - 932a
  - 939a
  - 942a
  - 948a
  - 953a
  - - 911a
  - 930a
  - 946a
  - 1003a
  - 1005a
  - 1009a
  - 1016a
  - 1019a
  - 1025a
  - 1030a
  - - 941a
  - 959a
  - 1015a
  - 1032a
  - 1034a
  - 1038a
  - 1045a
  - 1048a
  - 1054a
  - 1059a
  - - 1011a
  - 1029a
  - 1045a
  - 1102a
  - 1104a
  - 1108a
  - 1115a
  - 1118a
  - 1124a
  - 1129a
  - - 1041a
  - 1059a
  - 1115a
  - 1132a
  - 1134a
  - 1138a
  - 1145a
  - 1148a
  - 1154a
  - 1159a
  - - 1111a
  - 1129a
  - 1145a
  - 1202p
  - 1204p
  - 1208p
  - 1215p
  - 1218p
  - 1224p
  - 1229p
  - - 1141a
  - 1159a
  - 1215p
  - 1232p
  - 1234p
  - 1238p
  - 1245p
  - 1248p
  - 1254p
  - 1259p
  - - 1211p
  - 1229p
  - 1245p
  - 102p
  - 104p
  - 108p
  - 115p
  - 118p
  - 124p
  - 129p
  - - 1241p
  - 1259p
  - 115p
  - 132p
  - 134p
  - 138p
  - 145p
  - 148p
  - 154p
  - 159p
  - - 111p
  - 129p
  - 145p
  - 202p
  - 204p
  - 208p
  - 215p
  - 218p
  - 224p
  - 229p
  - - 141p
  - 159p
  - 215p
  - 232p
  - 234p
  - 238p
  - 245p
  - 248p
  - 254p
  - 259p
  - - 211p
  - 229p
  - 245p
  - 302p
  - 304p
  - 308p
  - 316p
  - 320p
  - 328p
  - 333p
  - - 241p
  - 259p
  - 317p
  - 335p
  - 337p
  - 341p
  - 349p
  - 353p
  - 401p
  - 406p
  - - "-"
  - "-"
  - "-"
  - 354p
  - 356p
  - 400p
  - 408p
  - 412p
  - 420p
  - 425p
  - - 311p
  - 330p
  - 348p
  - 406p
  - 408p
  - 412p
  - 420p
  - 424p
  - 432p
  - 437p
  - - 341p
  - 400p
  - 418p
  - 436p
  - 438p
  - 442p
  - 450p
  - 454p
  - 502p
  - 507p
  - - 411p
  - 430p
  - 448p
  - 506p
  - 508p
  - 512p
  - 520p
  - 524p
  - 532p
  - 537p
  - - 441p
  - 500p
  - 518p
  - 536p
  - 538p
  - 542p
  - 550p
  - 554p
  - 602p
  - 607p
  - - 501p
  - 520p
  - 538p
  - 556p
  - 558p
  - 602p
  - 610p
  - 614p
  - 622p
  - 627p
  - - 521p
  - 540p
  - 558p
  - 616p
  - 618p
  - 622p
  - 630p
  - 633p
  - 639p
  - 644p
  - - 601p
  - 620p
  - 636p
  - 653p
  - 655p
  - 658p
  - 705p
  - 708p
  - 714p
  - 719p
  - - "-"
  - "-"
  - "-"
  - 753p
  - 755p
  - 758p
  - 805p
  - 808p
  - 814p
  - 819p
  - - "-"
  - "-"
  - "-"
  - 853p
  - 855p
  - 858p
  - 905p
  - 908p
  - 914p
  - 919p
  - - "-"
  - "-"
  - "-"
  - 953p
  - 955p
  - 958p
  - 1005p
  - 1008p
  - 1014p
  - 1019p
  - - "-"
  - "-"
  - "-"
  - 1053p
  - 1055p
  - 1058p
  - 1105p
  - 1108p
  - 1114p
  - 1119p
  time_points:
  - Tuggeranong Interchange - Platform 8
  - Woden Interchange - Platform 9
  - City Interchange - Platform 5
  - Cameron Ave Bus Station - Platform 4
  - Lathlain St Bus Station - Platform 4
  - Cohen St Bus Station - Platform 6
  - Copland College
  - Melba
  - Spence
  - Spence Terminus
  -
  long_name: To Tuggeranong Interchange
  between_stops: []
   
  short_name: 15/315
  stop_times:
  - - 535a
  - 540a
  - 543a
  - 545a
  - 548a
  - 558a
  - 600a
  - 604a
  - "-"
  - "-"
  - "-"
  - - 605a
  - 610a
  - 613a
  - 615a
  - 618a
  - 628a
  - 630a
  - 634a
  - "-"
  - "-"
  - "-"
  - - 635a
  - 640a
  - 643a
  - 645a
  - 648a
  - 658a
  - 700a
  - 704a
  - 721a
  - 738a
  - 755a
  - - 705a
  - 710a
  - 713a
  - 715a
  - 718a
  - 728a
  - 730a
  - 734a
  - 753a
  - 810a
  - 827a
  - - 733a
  - 738a
  - 741a
  - 744a
  - 748a
  - 758a
  - 800a
  - 804a
  - 823a
  - 840a
  - 857a
  - - 753a
  - 758a
  - 801a
  - 804a
  - 808a
  - 818a
  - 820a
  - 824a
  - 843a
  - 900a
  - 917a
  - - "-"
  - "-"
  - 821a
  - 823a
  - 827a
  - 837a
  - 839a
  - 843a
  - 900a
  - "-"
  - "-"
  - - 813a
  - 818a
  - 821a
  - 824a
  - 828a
  - 838a
  - 840a
  - 844a
  - 903a
  - 920a
  - 936a
  - - 833a
  - 838a
  - 841a
  - 844a
  - 848a
  - 858a
  - 900a
  - 904a
  - 923a
  - 940a
  - 955a
  - - 903a
  - 908a
  - 911a
  - 914a
  - 918a
  - 928a
  - 930a
  - 934a
  - 951a
  - 1008a
  - 1023a
  - - 935a
  - 940a
  - 943a
  - 945a
  - 948a
  - 958a
  - 1000a
  - 1004a
  - 1021a
  - 1038a
  - 1053a
  - - 1005a
  - 1010a
  - 1013a
  - 1015a
  - 1018a
  - 1028a
  - 1030a
  - 1034a
  - 1051a
  - 1108a
  - 1123a
  - - 1035a
  - 1040a
  - 1043a
  - 1045a
  - 1048a
  - 1058a
  - 1100a
  - 1104a
  - 1121a
  - 1138a
  - 1153a
  - - 1105a
  - 1110a
  - 1113a
  - 1115a
  - 1118a
  - 1128a
  - 1130a
  - 1134a
  - 1151a
  - 1208p
  - 1223p
  - - 1135a
  - 1140a
  - 1143a
  - 1145a
  - 1148a
  - 1158a
  - 1200p
  - 1204p
  - 1221p
  - 1238p
  - 1253p
  - - 1205p
  - 1210p
  - 1213p
  - 1215p
  - 1218p
  - 1228p
  - 1230p
  - 1234p
  - 1251p
  - 108p
  - 123p
  - - 1235p
  - 1240p
  - 1243p
  - 1245p
  - 1248p
  - 1258p
  - 100p
  - 104p
  - 121p
  - 138p
  - 153p
  - - 105p
  - 110p
  - 113p
  - 115p
  - 118p
  - 128p
  - 130p
  - 134p
  - 151p
  - 208p
  - 223p
  - - 135p
  - 140p
  - 143p
  - 145p
  - 148p
  - 158p
  - 200p
  - 204p
  - 221p
  - 238p
  - 253p
  - - 205p
  - 210p
  - 213p
  - 215p
  - 218p
  - 228p
  - 230p
  - 234p
  - 251p
  - 308p
  - 327p
  - - 235p
  - 240p
  - 243p
  - 245p
  - 248p
  - 258p
  - 300p
  - 304p
  - 323p
  - 340p
  - 359p
  - - 303p
  - 308p
  - 311p
  - 314p
  - 318p
  - 328p
  - 330p
  - 334p
  - 353p
  - 410p
  - 429p
  - - 333p
  - 338p
  - 341p
  - 344p
  - 348p
  - 358p
  - 400p
  - 404p
  - 423p
  - 440p
  - 459p
  - - 403p
  - 408p
  - 411p
  - 414p
  - 418p
  - 428p
  - 430p
  - 434p
  - 453p
  - 510p
  - 529p
  - - 443p
  - 448p
  - 451p
  - 454p
  - 458p
  - 508p
  - 510p
  - 514p
  - 533p
  - 550p
  - 609p
  - - 533p
  - 538p
  - 541p
  - 544p
  - 548p
  - 558p
  - 600p
  - 604p
  - 623p
  - 638p
  - 653p
  - - 604p
  - 609p
  - 612p
  - 615p
  - 619p
  - 629p
  - 631p
  - 634p
  - 650p
  - 704p
  - 719p
  - - 623p
  - 628p
  - 631p
  - 633p
  - 636p
  - 645p
  - 647p
  - 650p
  - "-"
  - "-"
  - "-"
  - - 723p
  - 728p
  - 731p
  - 733p
  - 736p
  - 745p
  - 747p
  - 750p
  - "-"
  - "-"
  - "-"
  - - 823p
  - 828p
  - 831p
  - 833p
  - 836p
  - 845p
  - 847p
  - 850p
  - "-"
  - "-"
  - "-"
  - - 923p
  - 928p
  - 931p
  - 933p
  - 936p
  - 945p
  - 947p
  - 950p
  - "-"
  - "-"
  - "-"
  - - 1023p
  - 1028p
  - 1031p
  - 1033p
  - 1036p
  - 1045p
  - 1047p
  - 1050p
  - "-"
  - "-"
  - "-"
  time_points:
  - Spence Terminus
  - Spence
  - Alpen & Clifford St
  - Melba
  - Copland College
  - Cohen St Bus Station - Platform 3
  - Lathlain St Bus Station - Platform 1
  - Cameron Ave Bus Station - Platform 1
  - City Interchange - Platform 1
  - Woden Interchange - Platform 6
  - Tuggeranong Interchange
  -
  long_name: To Cameron Ave Station
  between_stops: []
   
  short_name: "16"
  stop_times:
  - - 610a
  - 619a
  - 625a
  - 630a
  - 632a
  - 636a
  - - 640a
  - 649a
  - 655a
  - 700a
  - 702a
  - 706a
  - - 711a
  - 720a
  - 726a
  - 731a
  - 733a
  - 737a
  - - 730a
  - 741a
  - 747a
  - 753a
  - 755a
  - 759a
  - - 750a
  - 801a
  - 807a
  - 813a
  - 815a
  - 819a
  - - 810a
  - 821a
  - 827a
  - 833a
  - 835a
  - 839a
  - - 830a
  - 841a
  - 847a
  - 853a
  - 855a
  - 859a
  - - 851a
  - 902a
  - 908a
  - 912a
  - 914a
  - 918a
  - - 925a
  - 935a
  - 940a
  - 944a
  - 946a
  - 950a
  - - 954a
  - 1003a
  - 1009a
  - 1014a
  - 1016a
  - 1020a
  - - 1024a
  - 1033a
  - 1039a
  - 1044a
  - 1046a
  - 1050a
  - - 1054a
  - 1103a
  - 1109a
  - 1114a
  - 1116a
  - 1120a
  - - 1124a
  - 1133a
  - 1139a
  - 1144a
  - 1146a
  - 1150a
  - - 1154a
  - 1203p
  - 1209p
  - 1214p
  - 1216p
  - 1220p
  - - 1224p
  - 1233p
  - 1239p
  - 1244p
  - 1246p
  - 1250p
  - - 1254p
  - 103p
  - 109p
  - 114p
  - 116p
  - 120p
  - - 124p
  - 133p
  - 139p
  - 144p
  - 146p
  - 150p
  - - 154p
  - 203p
  - 209p
  - 214p
  - 216p
  - 220p
  - - 224p
  - 233p
  - 239p
  - 244p
  - 246p
  - 250p
  - - 255p
  - 304p
  - 310p
  - 314p
  - 316p
  - 320p
  - - 324p
  - 335p
  - 341p
  - 347p
  - 349p
  - 353p
  - - 354p
  - 405p
  - 411p
  - 417p
  - 419p
  - 423p
  - - 427p
  - 438p
  - 444p
  - 450p
  - 452p
  - 456p
  - - 456p
  - 507p
  - 513p
  - 519p
  - 521p
  - 525p
  - - 526p
  - 537p
  - 543p
  - 549p
  - 551p
  - 555p
  - - 549p
  - 600p
  - 606p
  - 612p
  - 614p
  - 618p
  - - 649p
  - 658p
  - 704p
  - 708p
  - 710p
  - 713p
  - - 749p
  - 758p
  - 804p
  - 808p
  - 810p
  - 813p
  - - 849p
  - 858p
  - 904p
  - 908p
  - 910p
  - 913p
  - - 949p
  - 958p
  - 1004p
  - 1008p
  - 1010p
  - 1013p
  - - 1049p
  - 1058p
  - 1104p
  - 1108p
  - 1110p
  - 1113p
  time_points:
  - Kippax
  - Latham Shops
  - Florey Shops
  - Cohen St Bus Station
  - Lathlain St Bus Station
  - Cameron Ave Bus Station
  -
  long_name: To Kippax
  between_stops: []
   
  short_name: "16"
  stop_times:
  - - 701a
  - 703a
  - 707a
  - 712a
  - 718a
  - 727a
  - - 801a
  - 803a
  - 807a
  - 813a
  - 819a
  - 830a
  - - 857a
  - 859a
  - 903a
  - 909a
  - 915a
  - 926a
  - - 927a
  - 929a
  - 933a
  - 938a
  - 944a
  - 953a
  - - 957a
  - 959a
  - 1003a
  - 1008a
  - 1014a
  - 1023a
  - - 1027a
  - 1029a
  - 1033a
  - 1038a
  - 1044a
  - 1053a
  - - 1057a
  - 1059a
  - 1103a
  - 1108a
  - 1114a
  - 1123a
  - - 1127a
  - 1129a
  - 1133a
  - 1138a
  - 1144a
  - 1153a
  - - 1157a
  - 1159a
  - 1203p
  - 1208p
  - 1214p
  - 1223p
  - - 1227p
  - 1229p
  - 1233p
  - 1238p
  - 1244p
  - 1253p
  - - 1257p
  - 1259p
  - 103p
  - 108p
  - 114p
  - 123p
  - - 127p
  - 129p
  - 133p
  - 138p
  - 144p
  - 153p
  - - 157p
  - 159p
  - 203p
  - 208p
  - 214p
  - 223p
  - - 227p
  - 229p
  - 233p
  - 238p
  - 244p
  - 253p
  - - 257p
  - 259p
  - 303p
  - 309p
  - 315p
  - 326p
  - - 327p
  - 329p
  - 333p
  - 339p
  - 345p
  - 356p
  - - 357p
  - 359p
  - 403p
  - 409p
  - 415p
  - 426p
  - - 427p
  - 429p
  - 433p
  - 439p
  - 445p
  - 456p
  - - 447p
  - 449p
  - 453p
  - 459p
  - 505p
  - 516p
  - - 507p
  - 509p
  - 513p
  - 519p
  - 525p
  - 536p
  - - 527p
  - 529p
  - 533p
  - 539p
  - 545p
  - 556p
  - - 547p
  - 549p
  - 553p
  - 559p
  - 605p
  - 616p
  - - 602p
  - 604p
  - 608p
  - 614p
  - 620p
  - 631p
  - - 618p
  - 620p
  - 624p
  - 630p
  - 636p
  - 645p
  - - 718p
  - 720p
  - 723p
  - 727p
  - 733p
  - 742p
  - - 818p
  - 820p
  - 823p
  - 827p
  - 833p
  - 842p
  - - 918p
  - 920p
  - 923p
  - 927p
  - 933p
  - 942p
  - - 1018p
  - 1020p
  - 1023p
  - 1027p
  - 1033p
  - 1042p
  - - 1118p
  - 1120p
  - 1123p
  - 1127p
  - 1133p
  - 1142p
  time_points:
  - Cameron Ave Bus Station - Platform 5
  - Lathlain St Bus Station - Platform 6
  - Cohen St Bus Station - Platform 5
  - Florey Shops
  - Latham Shops
  - Kippax
  -
  long_name: To Citywest
  between_stops: []
  short_name: "170"
  stop_times: [[710a, 720a, 732a, 749a, 804a, 806a], [728a, 738a, 750a, 807a, 822a, 824a]]
  time_points: [Erindale Dr/ Charleston St Monash, Gowrie, Erindale Drive/Sternberg, Woden Interchange - Platform 9, City Interchange - Platform 3, Citywest]
  -
  long_name: To Erindale Dr/ Charleston St Monash
  between_stops: []
  short_name: "170"
  stop_times: [[500p, 505p, 521p, 536p, 546p, 556p]]
  time_points: [Citywest, City Interchange - Platform 1, Woden Interchange - Platform 12, Erindale Drive/Sternberg, Gowrie, Erindale Dr/ Charleston St Monash]
  -
  long_name: To Cameron Ave Station
  between_stops: []
   
  short_name: "17"
  stop_times:
  - - 601a
  - 606a
  - 612a
  - 617a
  - 620a
  - 625a
  - 627a
  - 631a
  - - 631a
  - 636a
  - 642a
  - 647a
  - 650a
  - 655a
  - 657a
  - 701a
  - - 701a
  - 706a
  - 712a
  - 717a
  - 720a
  - 725a
  - 727a
  - 731a
  - - 721a
  - 726a
  - 732a
  - 737a
  - 740a
  - 746a
  - 748a
  - 752a
  - - 741a
  - 747a
  - 753a
  - 758a
  - 801a
  - 807a
  - 809a
  - 813a
  - - 801a
  - 807a
  - 813a
  - 818a
  - 821a
  - 827a
  - 829a
  - 833a
  - - 821a
  - 827a
  - 833a
  - 838a
  - 841a
  - 847a
  - 849a
  - 853a
  - - 841a
  - 847a
  - 853a
  - 858a
  - 901a
  - 907a
  - 909a
  - 913a
  - - 925a
  - 931a
  - 937a
  - 942a
  - 945a
  - 950a
  - 952a
  - 956a
  - - 956a
  - 1001a
  - 1007a
  - 1012a
  - 1015a
  - 1020a
  - 1022a
  - 1026a
  - - 1026a
  - 1031a
  - 1037a
  - 1042a
  - 1045a
  - 1050a
  - 1052a
  - 1056a
  - - 1056a
  - 1101a
  - 1107a
  - 1112a
  - 1115a
  - 1120a
  - 1122a
  - 1126a
  - - 1126a
  - 1131a
  - 1137a
  - 1142a
  - 1145a
  - 1150a
  - 1152a
  - 1156a
  - - 1156a
  - 1201p
  - 1207p
  - 1212p
  - 1215p
  - 1220p
  - 1222p
  - 1226p
  - - 1226p
  - 1231p
  - 1237p
  - 1242p
  - 1245p
  - 1250p
  - 1252p
  - 1256p
  - - 1256p
  - 101p
  - 107p
  - 112p
  - 115p
  - 120p
  - 122p
  - 126p
  - - 126p
  - 131p
  - 137p
  - 142p
  - 145p
  - 150p
  - 152p
  - 156p
  - - 156p
  - 201p
  - 207p
  - 212p
  - 215p
  - 220p
  - 222p
  - 226p
  - - 226p
  - 231p
  - 237p
  - 242p
  - 245p
  - 250p
  - 252p
  - 256p
  - - 255p
  - 300p
  - 306p
  - 311p
  - 314p
  - 320p
  - 322p
  - 326p
  - - "-"
  - "-"
  - 325p
  - 330p
  - 333p
  - 339p
  - 341p
  - 345p
  - - 326p
  - 332p
  - 338p
  - 343p
  - 346p
  - 352p
  - 354p
  - 358p
  - - 347p
  - 353p
  - 359p
  - 404p
  - 407p
  - 413p
  - 415p
  - 419p
  - - "-"
  - "-"
  - 403p
  - 408p
  - 411p
  - 417p
  - 419p
  - 423p
  - - 417p
  - 423p
  - 429p
  - 434p
  - 437p
  - 443p
  - 445p
  - 449p
  - - 447p
  - 453p
  - 459p
  - 504p
  - 507p
  - 513p
  - 515p
  - 519p
  - - 517p
  - 523p
  - 529p
  - 534p
  - 537p
  - 543p
  - 545p
  - 549p
  - - 547p
  - 553p
  - 559p
  - 604p
  - 607p
  - 613p
  - 615p
  - 619p
  - - 617p
  - 623p
  - 629p
  - 634p
  - 637p
  - 641p
  - 643p
  - 646p
  - - 657p
  - 702p
  - 708p
  - 713p
  - 716p
  - 720p
  - 722p
  - 725p
  - - 757p
  - 802p
  - 808p
  - 813p
  - 816p
  - 820p
  - 822p
  - 825p
  - - 857p
  - 902p
  - 908p
  - 913p
  - 916p
  - 920p
  - 922p
  - 925p
  - - 957p
  - 1002p
  - 1008p
  - 1013p
  - 1016p
  - 1020p
  - 1022p
  - 1025p
  - - 1057p
  - 1102p
  - 1108p
  - 1113p
  - 1116p
  - 1120p
  - 1122p
  - 1125p
  time_points:
  - Kippax
  - Higgins
  - Hawker College
  - Hawker
  - Weetangera Shops
  - Cohen St Bus Station
  - Lathlain St Bus Station
  - Cameron Ave Bus Station
  -
  long_name: To Kippax
  between_stops: []
   
  short_name: "17"
  stop_times:
  - - 707a
  - 709a
  - 713a
  - 717a
  - 720a
  - 725a
  - 730a
  - 737a
  - - 807a
  - 809a
  - 813a
  - 818a
  - 821a
  - 826a
  - 831a
  - 838a
  - - 837a
  - 839a
  - 843a
  - 848a
  - 851a
  - 856a
  - 901a
  - 908a
  - - 855a
  - 857a
  - 901a
  - 906a
  - 909a
  - 914a
  - 919a
  - 926a
  - - 925a
  - 927a
  - 931a
  - 935a
  - 938a
  - 943a
  - 948a
  - 953a
  - - 955a
  - 957a
  - 1001a
  - 1005a
  - 1008a
  - 1013a
  - 1018a
  - 1023a
  - - 1025a
  - 1027a
  - 1031a
  - 1035a
  - 1038a
  - 1043a
  - 1048a
  - 1053a
  - - 1055a
  - 1057a
  - 1101a
  - 1105a
  - 1108a
  - 1113a
  - 1118a
  - 1123a
  - - 1125a
  - 1127a
  - 1131a
  - 1135a
  - 1138a
  - 1143a
  - 1148a
  - 1153a
  - - 1155a
  - 1157a
  - 1201p
  - 1205p
  - 1208p
  - 1213p
  - 1218p
  - 1223p
  - - 1225p
  - 1227p
  - 1231p
  - 1235p
  - 1238p
  - 1243p
  - 1248p
  - 1253p
  - - 1255p
  - 1257p
  - 101p
  - 105p
  - 108p
  - 113p
  - 118p
  - 123p
  - - 125p
  - 127p
  - 131p
  - 135p
  - 138p
  - 143p
  - 148p
  - 153p
  - - 155p
  - 157p
  - 201p
  - 205p
  - 208p
  - 213p
  - 218p
  - 223p
  - - 225p
  - 227p
  - 231p
  - 235p
  - 238p
  - 243p
  - 248p
  - 253p
  - - 255p
  - 257p
  - 301p
  - 306p
  - 309p
  - 314p
  - 320p
  - 327p
  - - 325p
  - 327p
  - 331p
  - 336p
  - 339p
  - 344p
  - 350p
  - 357p
  - - 354p
  - 356p
  - 400p
  - 405p
  - 408p
  - 413p
  - 419p
  - 426p
  - - 413p
  - 415p
  - 419p
  - 424p
  - 427p
  - 432p
  - 438p
  - 445p
  - - 433p
  - 435p
  - 439p
  - 444p
  - 447p
  - 452p
  - 458p
  - 505p
  - - 453p
  - 455p
  - 459p
  - 504p
  - 507p
  - 512p
  - 518p
  - 525p
  - - 513p
  - 515p
  - 519p
  - 524p
  - 527p
  - 532p
  - 538p
  - 545p
  - - 533p
  - 535p
  - 539p
  - 544p
  - 547p
  - 552p
  - 558p
  - 605p
  - - 553p
  - 555p
  - 559p
  - 604p
  - 607p
  - 612p
  - 618p
  - 625p
  - - 624p
  - 626p
  - 630p
  - 634p
  - 637p
  - 642p
  - 647p
  - 652p
  - - 724p
  - 726p
  - 729p
  - 733p
  - 736p
  - 741p
  - 746p
  - 751p
  - - 824p
  - 826p
  - 829p
  - 833p
  - 836p
  - 841p
  - 846p
  - 851p
  - - 924p
  - 926p
  - 929p
  - 933p
  - 936p
  - 941p
  - 946p
  - 951p
  - - 1024p
  - 1026p
  - 1029p
  - 1033p
  - 1036p
  - 1041p
  - 1046p
  - 1051p
  - - 1124p
  - 1126p
  - 1129p
  - 1133p
  - 1136p
  - 1141p
  - 1146p
  - 1151p
  time_points:
  - Cameron Ave Bus Station - Platform 5
  - Lathlain St Bus Station - Platform 6
  - Cohen St Bus Station - Platform 5
  - Weetangera Shops
  - Hawker
  - Hawker College
  - Higgins
  - Kippax
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: 18/318
  stop_times:
  - - 543a
  - 552a
  - 553a
  - 556a
  - 608a
  - 626a
  - 642a
  - 659a
  - 701a
  - 705a
  - - 613a
  - 622a
  - 623a
  - 626a
  - 638a
  - 656a
  - 712a
  - 729a
  - 731a
  - 735a
  - - 633a
  - 642a
  - 643a
  - 646a
  - 658a
  - 716a
  - 732a
  - 750a
  - 752a
  - 756a
  - - 655a
  - 704a
  - 705a
  - 708a
  - 720a
  - 738a
  - 756a
  - 814a
  - 816a
  - 820a
  - - 714a
  - 723a
  - 724a
  - 727a
  - 740a
  - 759a
  - 817a
  - 835a
  - 837a
  - 841a
  - - 731a
  - 741a
  - 742a
  - 746a
  - 800a
  - 819a
  - 837a
  - 855a
  - 857a
  - 901a
  - - "-"
  - "-"
  - 746a
  - 750a
  - 758a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 751a
  - 801a
  - 802a
  - 806a
  - 820a
  - 839a
  - 857a
  - 915a
  - 917a
  - 921a
  - - 811a
  - 821a
  - 822a
  - 826a
  - 840a
  - 859a
  - 917a
  - 935a
  - 937a
  - 941a
  - - 836a
  - 846a
  - 847a
  - 851a
  - 905a
  - 924a
  - 941a
  - 958a
  - 1000a
  - 1004a
  - - 906a
  - 916a
  - 917a
  - 921a
  - 935a
  - 953a
  - 1009a
  - 1026a
  - 1028a
  - 1032a
  - - 940a
  - 949a
  - 950a
  - 953a
  - 1005a
  - 1023a
  - 1039a
  - 1056a
  - 1058a
  - 1102a
  - - 1010a
  - 1019a
  - 1020a
  - 1023a
  - 1035a
  - 1053a
  - 1109a
  - 1126a
  - 1128a
  - 1132a
  - - 1040a
  - 1049a
  - 1050a
  - 1053a
  - 1105a
  - 1123a
  - 1139a
  - 1156a
  - 1158a
  - 1202p
  - - 1110a
  - 1119a
  - 1120a
  - 1123a
  - 1135a
  - 1153a
  - 1209p
  - 1226p
  - 1228p
  - 1232p
  - - 1140a
  - 1149a
  - 1150a
  - 1153a
  - 1205p
  - 1223p
  - 1239p
  - 1256p
  - 1258p
  - 102p
  - - 1210p
  - 1219p
  - 1220p
  - 1223p
  - 1235p
  - 1253p
  - 109p
  - 126p
  - 128p
  - 132p
  - - 1240p
  - 1249p
  - 1250p
  - 1253p
  - 105p
  - 123p
  - 139p
  - 156p
  - 158p
  - 202p
  - - 110p
  - 119p
  - 120p
  - 123p
  - 135p
  - 153p
  - 209p
  - 226p
  - 228p
  - 232p
  - - 140p
  - 149p
  - 150p
  - 153p
  - 205p
  - 223p
  - 239p
  - 256p
  - 258p
  - 302p
  - - 210p
  - 219p
  - 220p
  - 223p
  - 235p
  - 253p
  - 310p
  - 328p
  - 330p
  - 334p
  - - 239p
  - 248p
  - 249p
  - 252p
  - 304p
  - 323p
  - 341p
  - 359p
  - 401p
  - 405p
  - - 306p
  - 316p
  - 317p
  - 321p
  - 335p
  - 354p
  - 412p
  - 430p
  - 432p
  - 436p
  - - 331p
  - 341p
  - 342p
  - 346p
  - 400p
  - 419p
  - 437p
  - 455p
  - 457p
  - 501p
  - - 400p
  - 410p
  - 411p
  - 415p
  - 429p
  - 448p
  - 506p
  - 524p
  - 526p
  - 530p
  - - 435p
  - 445p
  - 446p
  - 450p
  - 504p
  - 523p
  - 541p
  - 559p
  - 601p
  - 605p
  - - 515p
  - 525p
  - 526p
  - 530p
  - 540p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 545p
  - 555p
  - 556p
  - 600p
  - 610p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 615p
  - 625p
  - 626p
  - 630p
  - 642p
  - 659p
  - 714p
  - 731p
  - 733p
  - 736p
  - - 713p
  - 722p
  - 723p
  - 726p
  - 734p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 814p
  - 823p
  - 824p
  - 827p
  - 835p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 914p
  - 923p
  - 924p
  - 927p
  - 935p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1014p
  - 1023p
  - 1024p
  - 1027p
  - 1035p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1114p
  - 1123p
  - 1124p
  - 1127p
  - 1135p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Lanyon Market Place
  - Gordon Primary
  - Lewis Luxton/Woodcock Dr
  - Woodcock/Clare Dennis
  - Tuggeranong Interchange - Platform 8
  - Woden Interchange - Platform 9
  - City Interchange - Platform 5
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To Lanyon Market Place
  between_stops: []
   
  short_name: 18/318
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 714a
  - 722a
  - 726a
  - 736a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 740a
  - 750a
  - 755a
  - 805a
  - - 723a
  - 725a
  - 729a
  - 748a
  - 805a
  - 823a
  - 833a
  - 838a
  - 848a
  - - 753a
  - 755a
  - 759a
  - 818a
  - 835a
  - 853a
  - 903a
  - 908a
  - 918a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 916a
  - 926a
  - 931a
  - 940a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 949a
  - 957a
  - 1001a
  - 1010a
  - - 923a
  - 925a
  - 929a
  - 946a
  - 1003a
  - 1019a
  - 1027a
  - 1031a
  - 1040a
  - - 953a
  - 955a
  - 959a
  - 1016a
  - 1033a
  - 1049a
  - 1057a
  - 1101a
  - 1110a
  - - 1023a
  - 1025a
  - 1029a
  - 1046a
  - 1103a
  - 1119a
  - 1127a
  - 1131a
  - 1140a
  - - 1053a
  - 1055a
  - 1059a
  - 1116a
  - 1133a
  - 1149a
  - 1157a
  - 1201p
  - 1210p
  - - 1123a
  - 1125a
  - 1129a
  - 1146a
  - 1203p
  - 1219p
  - 1227p
  - 1231p
  - 1240p
  - - 1153a
  - 1155a
  - 1159a
  - 1216p
  - 1233p
  - 1249p
  - 1257p
  - 101p
  - 110p
  - - 1223p
  - 1225p
  - 1229p
  - 1246p
  - 103p
  - 119p
  - 127p
  - 131p
  - 140p
  - - 1253p
  - 1255p
  - 1259p
  - 116p
  - 133p
  - 149p
  - 157p
  - 201p
  - 210p
  - - 123p
  - 125p
  - 129p
  - 146p
  - 203p
  - 219p
  - 227p
  - 231p
  - 240p
  - - 153p
  - 155p
  - 159p
  - 216p
  - 233p
  - 249p
  - 257p
  - 301p
  - 310p
  - - 223p
  - 225p
  - 229p
  - 246p
  - 303p
  - 323p
  - 331p
  - 335p
  - 344p
  - - 253p
  - 255p
  - 259p
  - 318p
  - 335p
  - 355p
  - 403p
  - 407p
  - 416p
  - - 323p
  - 325p
  - 329p
  - 348p
  - 405p
  - 425p
  - 433p
  - 437p
  - 446p
  - - 353p
  - 355p
  - 359p
  - 418p
  - 435p
  - 455p
  - 503p
  - 507p
  - 516p
  - - 423p
  - 425p
  - 429p
  - 448p
  - 505p
  - 525p
  - 533p
  - 537p
  - 546p
  - - 443p
  - 445p
  - 449p
  - 508p
  - 525p
  - 545p
  - 553p
  - 557p
  - 606p
  - - 503p
  - 505p
  - 509p
  - 528p
  - 545p
  - 605p
  - 613p
  - 617p
  - 626p
  - - 518p
  - 520p
  - 524p
  - 543p
  - 600p
  - 620p
  - 628p
  - 632p
  - 641p
  - - 553p
  - 555p
  - 559p
  - 618p
  - 634p
  - 650p
  - 658p
  - 702p
  - 711p
  - - 623p
  - 625p
  - 629p
  - 645p
  - 659p
  - 715p
  - 723p
  - 727p
  - 736p
  - - 654p
  - 656p
  - 659p
  - 715p
  - 729p
  - 745p
  - 753p
  - 757p
  - 806p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 848p
  - 856p
  - 900p
  - 909p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 948p
  - 956p
  - 1000p
  - 1009p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1048p
  - 1056p
  - 1100p
  - 1109p
  time_points:
  - Cohen St Bus Station - Platform 2
  - Lathlain St Bus Station - Platform 1
  - Cameron Ave Bus Station - Platform 1
  - City Interchange - Platform 1
  - Woden Interchange - Platform 6
  - Tuggeranong Interchange - Platform 7
  - Woodcock/Clare Dennis
  - Gordon Primary
  - Lanyon Market Place
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: 19/319
  stop_times:
  - - 550a
  - 556a
  - 606a
  - 612a
  - 625a
  - 643a
  - 659a
  - 716a
  - 718a
  - 722a
  - - 620a
  - 626a
  - 636a
  - 642a
  - 655a
  - 713a
  - 729a
  - 747a
  - 749a
  - 753a
  - - 640a
  - 646a
  - 656a
  - 702a
  - 715a
  - 733a
  - 751a
  - 809a
  - 811a
  - 815a
  - - 700a
  - 706a
  - 716a
  - 722a
  - 735a
  - 754a
  - 812a
  - 830a
  - 832a
  - 836a
  - - 717a
  - 723a
  - 733a
  - 741a
  - 755a
  - 814a
  - 832a
  - 850a
  - 852a
  - 856a
  - - 724a
  - 730a
  - 740a
  - 748a
  - 758a
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 736a
  - 743a
  - 753a
  - 801a
  - 815a
  - 834a
  - 852a
  - 910a
  - 912a
  - 916a
  - - 755a
  - 802a
  - 812a
  - 820a
  - 834a
  - 853a
  - 911a
  - 929a
  - 931a
  - 935a
  - - 816a
  - 823a
  - 833a
  - 841a
  - 855a
  - 914a
  - 932a
  - 949a
  - 951a
  - 955a
  - - 846a
  - 853a
  - 903a
  - 911a
  - 925a
  - 943a
  - 959a
  - 1016a
  - 1018a
  - 1022a
  - - 919a
  - 926a
  - 936a
  - 942a
  - 955a
  - 1013a
  - 1029a
  - 1046a
  - 1048a
  - 1052a
  - - 950a
  - 956a
  - 1006a
  - 1012a
  - 1025a
  - 1043a
  - 1059a
  - 1116a
  - 1118a
  - 1122a
  - - 1020a
  - 1026a
  - 1036a
  - 1042a
  - 1055a
  - 1113a
  - 1129a
  - 1146a
  - 1148a
  - 1152a
  - - 1050a
  - 1056a
  - 1106a
  - 1112a
  - 1125a
  - 1143a
  - 1159a
  - 1216p
  - 1218p
  - 1222p
  - - 1120a
  - 1126a
  - 1136a
  - 1142a
  - 1155a
  - 1213p
  - 1229p
  - 1246p
  - 1248p
  - 1252p
  - - 1150a
  - 1156a
  - 1206p
  - 1212p
  - 1225p
  - 1243p
  - 1259p
  - 116p
  - 118p
  - 122p
  - - 1220p
  - 1226p
  - 1236p
  - 1242p
  - 1255p
  - 113p
  - 129p
  - 146p
  - 148p
  - 152p
  - - 1250p
  - 1256p
  - 106p
  - 112p
  - 125p
  - 143p
  - 159p
  - 216p
  - 218p
  - 222p
  - - 120p
  - 126p
  - 136p
  - 142p
  - 155p
  - 213p
  - 229p
  - 246p
  - 248p
  - 252p
  - - 150p
  - 156p
  - 206p
  - 212p
  - 225p
  - 243p
  - 259p
  - 317p
  - 319p
  - 323p
  - - 219p
  - 225p
  - 235p
  - 241p
  - 254p
  - 313p
  - 331p
  - 349p
  - 351p
  - 355p
  - - 246p
  - 252p
  - 302p
  - 310p
  - 324p
  - 343p
  - 401p
  - 419p
  - 421p
  - 425p
  - - 320p
  - 327p
  - 337p
  - 345p
  - 355p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 352p
  - 359p
  - 409p
  - 417p
  - 427p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 424p
  - 431p
  - 441p
  - 449p
  - 459p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 454p
  - 501p
  - 511p
  - 519p
  - 529p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 524p
  - 531p
  - 541p
  - 549p
  - 559p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 556p
  - 603p
  - 613p
  - 621p
  - 631p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 654p
  - 700p
  - 710p
  - 716p
  - 725p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 754p
  - 800p
  - 810p
  - 816p
  - 825p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 849p
  - 855p
  - 905p
  - 911p
  - 920p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 949p
  - 955p
  - 1005p
  - 1011p
  - 1020p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1049p
  - 1055p
  - 1105p
  - 1111p
  - 1120p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Lanyon Market Place
  - Conder Primary
  - St Clare of Assisi Primary
  - Bonython Primary
  - Tuggeranong Interchange - Platform 8
  - Woden Interchange - Platform 9
  - City Interchange - Platform 5
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To Lanyon Market Place
  between_stops: []
   
  short_name: 19/319
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 705a
  - 711a
  - 716a
  - 725a
  - 731a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 740a
  - 747a
  - 754a
  - 803a
  - 810a
  - - 703a
  - 705a
  - 709a
  - 726a
  - 743a
  - 801a
  - 808a
  - 815a
  - 824a
  - 831a
  - - 733a
  - 735a
  - 739a
  - 758a
  - 815a
  - 833a
  - 840a
  - 847a
  - 856a
  - 903a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 904a
  - 911a
  - 918a
  - 927a
  - 933a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 933a
  - 939a
  - 944a
  - 953a
  - 959a
  - - 903a
  - 905a
  - 909a
  - 928a
  - 945a
  - 1001a
  - 1007a
  - 1012a
  - 1021a
  - 1027a
  - - 933a
  - 935a
  - 939a
  - 956a
  - 1013a
  - 1029a
  - 1035a
  - 1040a
  - 1049a
  - 1055a
  - - 1003a
  - 1005a
  - 1009a
  - 1026a
  - 1043a
  - 1059a
  - 1105a
  - 1110a
  - 1119a
  - 1125a
  - - 1033a
  - 1035a
  - 1039a
  - 1056a
  - 1113a
  - 1129a
  - 1135a
  - 1140a
  - 1149a
  - 1155a
  - - 1103a
  - 1105a
  - 1109a
  - 1126a
  - 1143a
  - 1159a
  - 1205p
  - 1210p
  - 1219p
  - 1225p
  - - 1133a
  - 1135a
  - 1139a
  - 1156a
  - 1213p
  - 1229p
  - 1235p
  - 1240p
  - 1249p
  - 1255p
  - - 1203p
  - 1205p
  - 1209p
  - 1226p
  - 1243p
  - 1259p
  - 105p
  - 110p
  - 119p
  - 125p
  - - 1233p
  - 1235p
  - 1239p
  - 1256p
  - 113p
  - 129p
  - 135p
  - 140p
  - 149p
  - 155p
  - - 103p
  - 105p
  - 109p
  - 126p
  - 143p
  - 159p
  - 205p
  - 210p
  - 219p
  - 225p
  - - 133p
  - 135p
  - 139p
  - 156p
  - 213p
  - 229p
  - 235p
  - 240p
  - 249p
  - 255p
  - - 203p
  - 205p
  - 209p
  - 226p
  - 243p
  - 259p
  - 306p
  - 313p
  - 322p
  - 329p
  - - 233p
  - 235p
  - 239p
  - 256p
  - 313p
  - 333p
  - 340p
  - 347p
  - 356p
  - 403p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 330p
  - 350p
  - 357p
  - 404p
  - 413p
  - 420p
  - - 303p
  - 305p
  - 309p
  - 328p
  - 345p
  - 405p
  - 412p
  - 419p
  - 428p
  - 435p
  - - 333p
  - 335p
  - 339p
  - 358p
  - 415p
  - 435p
  - 442p
  - 449p
  - 458p
  - 505p
  - - 403p
  - 405p
  - 409p
  - 428p
  - 445p
  - 505p
  - 512p
  - 519p
  - 528p
  - 535p
  - - 433p
  - 435p
  - 439p
  - 458p
  - 515p
  - 535p
  - 542p
  - 549p
  - 558p
  - 605p
  - - 453p
  - 455p
  - 459p
  - 518p
  - 535p
  - 555p
  - 602p
  - 609p
  - 618p
  - 625p
  - - 513p
  - 515p
  - 519p
  - 538p
  - 555p
  - 615p
  - 622p
  - 629p
  - 638p
  - 644p
  - - 533p
  - 535p
  - 539p
  - 558p
  - 615p
  - 634p
  - 640p
  - 645p
  - 654p
  - 700p
  - - 603p
  - 605p
  - 609p
  - 628p
  - 642p
  - 658p
  - 704p
  - 709p
  - 718p
  - 724p
  - - 634p
  - 636p
  - 639p
  - 655p
  - 709p
  - 725p
  - 731p
  - 736p
  - 745p
  - 751p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 818p
  - 824p
  - 829p
  - 838p
  - 844p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 918p
  - 924p
  - 929p
  - 938p
  - 944p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1018p
  - 1024p
  - 1029p
  - 1038p
  - 1044p
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 1118p
  - 1124p
  - 1129p
  - 1138p
  - 1144p
  time_points:
  - Cohen St Bus Station - Platform 2
  - Lathlain St Bus Station - Platform 1
  - Cameron Ave Bus Station - Platform 1
  - City Interchange - Platform 1
  - Woden Interchange - Platform 6
  - Tuggeranong Interchange - Platform 4
  - Bonython Primary
  - St Clare of Assisi Primary
  - Conder Primary
  - Lanyon Market Place
  -
  long_name: To Woden Interchange
  between_stops: []
  short_name: "21"
  stop_times: [[657a, 703a, 706a, 712a, 724a], [727a, 734a, 737a, 744a, 757a], [757a, 804a, 807a, 814a, 827a], [827a, 834a, 837a, 844a, 857a], [904a, 911a, 914a, 921a, 934a], [1004a, 1010a, 1013a, 1019a, 1031a], [1104a, 1110a, 1113a, 1119a, 1131a], [1204p, 1210p, 1213p, 1219p, 1231p], [104p, 110p, 113p, 119p, 131p], [204p, 210p, 213p, 219p, 231p], [304p, 311p, 314p, 321p, 334p], [327p, 334p, 337p, 344p, 357p], [357p, 404p, 407p, 414p, 427p], [427p, 434p, 437p, 444p, 457p], [457p, 504p, 507p, 514p, 527p], [527p, 534p, 537p, 544p, 557p], [557p, 604p, 607p, 614p, 627p], [627p, 633p, 636p, 642p, 654p], [720p, 726p, 729p, 735p, 747p], [820p, 826p, 829p, 835p, 847p], [920p, 926p, 929p, 935p, 947p], [1020p, 1026p, 1029p, 1035p, 1047p], [1120p, 1126p, 1129p, 1135p, "-"]]
  time_points: [Woden Interchange - Platform 15, Pearce, Torrens Shops, Southlands Mawson, Woden Interchange]
  -
  long_name: To Woden Interchange
  between_stops: []
  short_name: "22"
  stop_times: [[635a, 648a, 656a, 659a, 707a], [705a, 718a, 726a, 729a, 738a], [735a, 749a, 758a, 801a, 810a], [805a, 819a, 828a, 831a, 840a], [843a, 857a, 906a, 909a, 918a], [943a, 956a, 1004a, 1007a, 1015a], [1043a, 1056a, 1104a, 1107a, 1115a], [1143a, 1156a, 1204p, 1207p, 1215p], [1243p, 1256p, 104p, 107p, 115p], [143p, 156p, 204p, 207p, 215p], [243p, 256p, 305p, 308p, 317p], [313p, 327p, 336p, 339p, 348p], [335p, 349p, 358p, 401p, 410p], [405p, 419p, 428p, 431p, 440p], [435p, 449p, 458p, 501p, 510p], [505p, 519p, 528p, 531p, 540p], [535p, 549p, 558p, 601p, 610p], [605p, 619p, 628p, 631p, 639p], [638p, 651p, 659p, 702p, 710p], [738p, 751p, 759p, 802p, 810p], [838p, 851p, 859p, 902p, 910p], [938p, 951p, 959p, 1002p, 1010p], [1038p, 1051p, 1059p, 1102p, 1110p]]
  time_points: [Woden Interchange - Platform 15, Southlands Mawson, Torrens Shops, Pearce, Woden Interchange]
  -
  long_name: To Woden Interchange
  between_stops: []
  short_name: "23"
  stop_times: [[607a, 609a, 613a, 622a, 628a, 634a, 642a, 647a], [644a, 646a, 650a, 659a, 705a, 711a, 719a, 724a], [714a, 716a, 720a, 729a, 736a, 742a, 752a, 757a], [744a, 748a, 753a, 801a, 808a, 814a, 824a, 829a], [814a, 818a, 823a, 831a, 838a, 844a, 854a, 859a], [844a, 848a, 853a, 901a, 908a, 914a, 924a, 929a], [926a, 930a, 934a, 943a, 949a, 955a, 1003a, 1008a], [1026a, 1028a, 1032a, 1041a, 1047a, 1053a, 1101a, 1106a], [1126a, 1128a, 1132a, 1141a, 1147a, 1153a, 1201p, 1206p], [1226p, 1228p, 1232p, 1241p, 1247p, 1253p, 101p, 106p], [126p, 128p, 132p, 141p, 147p, 153p, 201p, 206p], [226p, 228p, 232p, 241p, 247p, 253p, 301p, 306p], [314p, 318p, 323p, 331p, 338p, 344p, 354p, 359p], [344p, 348p, 353p, 401p, 408p, 414p, 424p, 429p], [414p, 418p, 423p, 431p, 438p, 444p, 454p, 459p], [444p, 448p, 453p, 501p, 508p, 514p, 524p, 529p], [514p, 518p, 523p, 531p, 538p, 544p, 554p, 559p], [544p, 548p, 553p, 601p, 608p, 614p, 624p, 629p], [626p, 630p, 634p, 643p, 649p, 655p, 703p, 708p], [726p, 728p, 732p, 741p, 747p, 753p, 801p, 806p], [826p, 828p, 832p, 841p, 847p, 853p, 901p, 906p], [926p, 928p, 932p, 941p, 947p, 953p, 1001p, 1006p], [1026p, 1028p, 1032p, 1041p, 1047p, 1053p, 1101p, 1106p], [1126p, 1128p, 1132p, 1141p, "-", "-", "-", "-"]]
  time_points: [Woden Interchange - Platform 15, Lyons, Chifley, Southlands Mawson, Farrer Terminus, Isaacs, Canberra Hospital, Woden Interchange]
  -
  long_name: To Woden Interchange
  between_stops: []
  short_name: "24"
  stop_times: [["-", "-", "-", 703a, 709a, 715a, 720a, 724a], [702a, 708a, 715a, 720a, 726a, 732a, 737a, 742a], [739a, 746a, 754a, 800a, 806a, 813a, 818a, 823a], [809a, 816a, 824a, 830a, 836a, 843a, 848a, 853a], [839a, 846a, 854a, 900a, 906a, 913a, 918a, 923a], [956a, 1002a, 1009a, 1014a, 1020a, 1026a, 1031a, 1035a], [1056a, 1102a, 1109a, 1114a, 1120a, 1126a, 1131a, 1135a], [1156a, 1202p, 1209p, 1214p, 1220p, 1226p, 1231p, 1235p], [1256p, 102p, 109p, 114p, 120p, 126p, 131p, 135p], [156p, 202p, 209p, 214p, 220p, 226p, 231p, 235p], [256p, 302p, 310p, 316p, 322p, 329p, 334p, 339p], [339p, 346p, 354p, 400p, 406p, 413p, 418p, 423p], [409p, 416p, 424p, 430p, 436p, 443p, 448p, 453p], [439p, 446p, 454p, 500p, 506p, 513p, 518p, 523p], [509p, 516p, 524p, 530p, 536p, 543p, 548p, 553p], [538p, 545p, 553p, 559p, 605p, 612p, 617p, 622p], [608p, 615p, 623p, 629p, 635p, 641p, 646p, 650p], [700p, 706p, 713p, 718p, 724p, 730p, 735p, 739p], [800p, 806p, 813p, 818p, 824p, 830p, 835p, 839p], [900p, 906p, 913p, 918p, 924p, 930p, 935p, 939p], [1000p, 1006p, 1013p, 1018p, 1024p, 1030p, 1035p, 1039p], [1100p, 1106p, 1113p, 1118p, 1124p, 1130p, 1135p, 1139p]]
  time_points: [Woden Interchange - Platform 15, Canberra Hospital, Isaacs, Farrer Terminus, Southlands Mawson, Chifley, Lyons, Woden Interchange]
  -
  long_name: To Campbell Park Offices
  between_stops: []
  short_name: 25/225
  stop_times: [[612a, 622a, 625a, 634a, "-", "-", "-", "-"], [642a, 652a, 655a, 705a, 719a, 722a, 726a, 730a], [702a, 712a, 715a, 725a, 739a, 743a, 747a, 751a], [734a, 749a, 752a, 805a, 819a, 823a, 827a, 831a], [808a, 823a, 826a, 838a, "-", "-", "-", "-"], [838a, 853a, 856a, 908a, "-", "-", "-", "-"], [910a, 925a, 928a, 938a, "-", "-", "-", "-"], [1012a, 1022a, 1025a, 1035a, "-", "-", "-", "-"], [1112a, 1122a, 1125a, 1135a, "-", "-", "-", "-"], [1212p, 1222p, 1225p, 1235p, "-", "-", "-", "-"], [112p, 122p, 125p, 135p, "-", "-", "-", "-"], [212p, 222p, 225p, 235p, "-", "-", "-", "-"], [312p, 324p, 327p, 336p, "-", "-", "-", "-"], [342p, 354p, 357p, 406p, "-", "-", "-", "-"], [412p, 424p, 427p, 436p, "-", "-", "-", "-"], [512p, 524p, 527p, 536p, "-", "-", "-", "-"], [622p, 633p, 636p, 645p, "-", "-", "-", "-"], [722p, 732p, 735p, 744p, "-", "-", "-", "-"], [822p, 832p, 835p, 844p, "-", "-", "-", "-"], [922p, 932p, 935p, 944p, "-", "-", "-", "-"], [1022p, 1032p, 1035p, 1044p, "-", "-", "-", "-"]]
  time_points: [Cooleman Court, Holder, Weston Primary, Woden Interchange - Platform 10, Kings Ave/National Crt, Russell Offices, ADFA, Campbell Park Offices]
  -
  long_name: To Cooleman Court
  between_stops: []
  short_name: 25/225
  stop_times: [["-", "-", "-", "-", 712a, 720a, 723a, 734a], ["-", "-", "-", "-", 807a, 819a, 823a, 835a], ["-", "-", "-", "-", 842a, 854a, 858a, 910a], ["-", "-", "-", "-", 940a, 949a, 952a, 1002a], ["-", "-", "-", "-", 1040a, 1049a, 1052a, 1102a], ["-", "-", "-", "-", 1140a, 1149a, 1152a, 1202p], ["-", "-", "-", "-", 1240p, 1249p, 1252p, 102p], ["-", "-", "-", "-", 140p, 149p, 152p, 202p], ["-", "-", "-", "-", 240p, 249p, 252p, 306p], ["-", "-", "-", "-", 342p, 352p, 356p, 408p], ["-", "-", "-", "-", 412p, 422p, 426p, 438p], [417p, 421p, 425p, 428p, 443p, 453p, 457p, 509p], [447p, 451p, 455p, 458p, 513p, 523p, 527p, 539p], [517p, 521p, 525p, 528p, 543p, 553p, 557p, 609p], ["-", "-", "-", "-", 612p, 622p, 626p, 637p], ["-", "-", "-", "-", 656p, 704p, 707p, 717p], ["-", "-", "-", "-", 756p, 804p, 807p, 817p], ["-", "-", "-", "-", 856p, 904p, 907p, 917p], ["-", "-", "-", "-", 956p, 1004p, 1007p, 1017p], ["-", "-", "-", "-", 1056p, 1104p, 1107p, 1117p]]
  time_points: [Campbell Park Offices, ADFA, Russell Offices, Kings Ave/National Crt, Woden Interchange - Platform 16, Weston Primary, Holder, Cooleman Court]
  -
  long_name: To Campbell Park Offices
  between_stops: []
  short_name: 26/226
  stop_times: [[615a, 619a, 623a, 625a, 632a, "-", "-", "-", "-"], [657a, 701a, 705a, 707a, 715a, 729a, 733a, 737a, 741a], [716a, 720a, 724a, 726a, 736a, 750a, 754a, 758a, 802a], [747a, 752a, 758a, 802a, 815a, 829a, 833a, 837a, 841a], [800a, 805a, 811a, 815a, 827a, "-", "-", "-", "-"], [820a, 825a, 831a, 835a, 847a, "-", "-", "-", "-"], [850a, 855a, 901a, 905a, 917a, "-", "-", "-", "-"], [925a, 930a, 935a, 938a, 948a, "-", "-", "-", "-"], [1025a, 1029a, 1034a, 1037a, 1047a, "-", "-", "-", "-"], [1125a, 1129a, 1134a, 1137a, 1147a, "-", "-", "-", "-"], [1225p, 1229p, 1234p, 1237p, 1247p, "-", "-", "-", "-"], [125p, 129p, 134p, 137p, 147p, "-", "-", "-", "-"], [225p, 229p, 234p, 237p, 247p, "-", "-", "-", "-"], [255p, 259p, 305p, 308p, 317p, "-", "-", "-", "-"], [320p, 324p, 330p, 333p, 342p, "-", "-", "-", "-"], [420p, 424p, 430p, 433p, 442p, "-", "-", "-", "-"], [520p, 524p, 530p, 533p, 542p, "-", "-", "-", "-"], [620p, 624p, 630p, 632p, 639p, "-", "-", "-", "-"], [714p, 718p, 722p, 724p, 731p, "-", "-", "-", "-"], [814p, 818p, 822p, 824p, 831p, "-", "-", "-", "-"], [914p, 918p, 922p, 924p, 931p, "-", "-", "-", "-"], [1014p, 1018p, 1022p, 1024p, 1031p, "-", "-", "-", "-"]]
  time_points: [Weston Creek Terminus, Chapman, Canberra College Weston, Cooleman Court, Woden Interchange - Platform 10, Kings Ave/National Crt, Russell Offices, ADFA, Campbell Park Offices]
  -
  long_name: To Weston Creek Terminus
  between_stops: []
  short_name: 26/226
  stop_times: [["-", "-", "-", "-", 718a, 725a, 727a, 731a, 735a], ["-", "-", "-", "-", 818a, 828a, 832a, 837a, 841a], ["-", "-", "-", "-", 858a, 908a, 912a, 917a, 921a], ["-", "-", "-", "-", 958a, 1007a, 1010a, 1015a, 1019a], ["-", "-", "-", "-", 1058a, 1107a, 1110a, 1115a, 1119a], ["-", "-", "-", "-", 1158a, 1207p, 1210p, 1215p, 1219p], ["-", "-", "-", "-", 1258p, 107p, 110p, 115p, 119p], ["-", "-", "-", "-", 158p, 207p, 210p, 215p, 219p], ["-", "-", "-", "-", 258p, 309p, 313p, 319p, 324p], ["-", "-", "-", "-", 328p, 340p, 344p, 350p, 355p], ["-", "-", "-", "-", 354p, 406p, 410p, 416p, 421p], ["-", "-", "-", "-", 418p, 430p, 434p, 440p, 445p], ["-", "-", "-", "-", 448p, 500p, 504p, 510p, 515p], [452p, 456p, 500p, 503p, 518p, 530p, 534p, 540p, 545p], [522p, 526p, 530p, 533p, 548p, 600p, 604p, 610p, 615p], ["-", "-", "-", "-", 618p, 630p, 632p, 636p, 640p], ["-", "-", "-", "-", 650p, 657p, 659p, 703p, 707p], ["-", "-", "-", "-", 750p, 757p, 759p, 803p, 807p], ["-", "-", "-", "-", 850p, 857p, 859p, 903p, 907p], ["-", "-", "-", "-", 950p, 957p, 959p, 1003p, 1007p], ["-", "-", "-", "-", 1050p, 1057p, 1059p, 1103p, 1107p]]
  time_points: [Campbell Park Offices, ADFA, Russell Offices, Kings Ave/National Crt, Woden Interchange - Platform 3, Cooleman Court, Canberra College Weston, Chapman, Weston Creek Terminus]
  -
  long_name: To Campbell Park Offices
  between_stops: []
  short_name: 27/227
  stop_times: [[629a, 635a, 643a, 647a, 655a, 709a, 712a, 716a, 720a], [654a, 700a, 708a, 712a, 720a, 734a, 738a, 742a, 746a], ["-", "-", 728a, 735a, 746a, "-", "-", "-", "-"], [722a, 728a, 736a, 743a, 755a, 809a, 813a, 817a, 821a], [740a, 746a, 754a, 801a, 812a, "-", "-", "-", "-"], [748a, 754a, 804a, 810a, 820a, "-", "-", "-", "-"], [823a, 829a, 837a, 844a, 855a, "-", "-", "-", "-"], [853a, 859a, 907a, 914a, 925a, "-", "-", "-", "-"], [925a, 931a, 938a, 942a, 949a, "-", "-", "-", "-"], [1025a, 1031a, 1038a, 1042a, 1049a, "-", "-", "-", "-"], [1125a, 1131a, 1138a, 1142a, 1149a, "-", "-", "-", "-"], [1225p, 1231p, 1238p, 1242p, 1249p, "-", "-", "-", "-"], [125p, 131p, 138p, 142p, 149p, "-", "-", "-", "-"], [225p, 231p, 238p, 242p, 249p, "-", "-", "-", "-"], [325p, 330p, 337p, 341p, 349p, "-", "-", "-", "-"], [355p, 400p, 407p, 411p, 419p, "-", "-", "-", "-"], [425p, 430p, 437p, 441p, 449p, "-", "-", "-", "-"], [525p, 530p, 537p, 541p, 549p, "-", "-", "-", "-"], [625p, 630p, 637p, 640p, 647p, "-", "-", "-", "-"], [700p, 705p, 712p, 715p, 722p, "-", "-", "-", "-"], [800p, 805p, 812p, 815p, 822p, "-", "-", "-", "-"], [900p, 905p, 912p, 915p, 922p, "-", "-", "-", "-"], [1000p, 1005p, 1012p, 1015p, 1022p, "-", "-", "-", "-"]]
  time_points: [Cooleman Court, Rivett, Fisher, Waramanga, Woden Interchange - Platform 10, Kings Ave/National Crt, Russell Offices, ADFA, Campbell Park Offices]
  -
  long_name: To Cooleman Court
  between_stops: []
  short_name: 27/227
  stop_times: [["-", "-", "-", "-", 821a, 829a, 833a, 840a, 845a], ["-", "-", "-", "-", 854a, 902a, 906a, 913a, 918a], ["-", "-", "-", "-", 954a, 1001a, 1005a, 1013a, 1019a], ["-", "-", "-", "-", 1054a, 1101a, 1105a, 1113a, 1119a], ["-", "-", "-", "-", 1154a, 1201p, 1205p, 1213p, 1219p], ["-", "-", "-", "-", 1254p, 101p, 105p, 113p, 119p], ["-", "-", "-", "-", 154p, 201p, 205p, 213p, 219p], ["-", "-", "-", "-", 254p, 302p, 307p, 314p, 322p], ["-", "-", "-", "-", 321p, 333p, 338p, 345p, 353p], ["-", "-", "-", "-", 351p, 403p, 408p, 415p, 423p], ["-", "-", "-", "-", 421p, 433p, 438p, 445p, 453p], [427p, 431p, 435p, 438p, 453p, 505p, 510p, 517p, 525p], ["-", "-", "-", "-", 521p, 533p, 538p, 545p, 553p], [527p, 531p, 535p, 538p, 553p, 605p, 610p, 617p, 625p], ["-", "-", "-", "-", 635p, 641p, 644p, 650p, 655p], ["-", "-", "-", "-", 735p, 741p, 744p, 750p, 755p], ["-", "-", "-", "-", 835p, 841p, 844p, 850p, 855p], ["-", "-", "-", "-", 935p, 941p, 944p, 950p, 955p], ["-", "-", "-", "-", 1035p, 1041p, 1044p, 1050p, 1055p]]
  time_points: [Campbell Park Offices, ADFA, Russell Offices, Kings Ave/National Crt, Woden Interchange - Platform 3, Waramanga, Fisher, Rivett, Cooleman Court]
  -
  long_name: To Cooleman Court
  between_stops: []
  short_name: "28"
  stop_times: [["-", "-", "-", "-", 742a, 746a, 751a, 759a, 811a], ["-", "-", "-", "-", 845a, 849a, 854a, 902a, 914a], ["-", "-", "-", "-", 952a, 956a, 1000a, 1007a, 1019a], ["-", "-", "-", "-", 1052a, 1056a, 1100a, 1107a, 1119a], ["-", "-", "-", "-", 1152a, 1156a, 1200p, 1207p, 1219p], ["-", "-", "-", "-", 1252p, 1256p, 100p, 107p, 119p], ["-", "-", "-", "-", 152p, 156p, 200p, 207p, 219p], ["-", "-", "-", "-", 252p, 256p, 300p, 308p, 320p], ["-", "-", "-", "-", 312p, 316p, 321p, 329p, 341p], ["-", "-", "-", "-", 342p, 346p, 351p, 359p, 411p], ["-", "-", "-", "-", 412p, 416p, 421p, 429p, 441p], ["-", "-", "-", "-", 442p, 446p, 451p, 459p, 511p], [429p, 438p, 454p, 457p, 512p, 516p, 521p, 529p, 541p], [449p, 508p, 524p, 527p, 542p, 546p, 551p, 559p, 611p], [519p, 538p, 554p, 557p, 612p, 616p, 621p, 629p, 638p], [549p, 608p, 624p, 627p, 642p, 645p, 649p, 656p, 705p], ["-", "-", "-", "-", 732p, 735p, 739p, 746p, 755p], ["-", "-", "-", "-", 832p, 835p, 839p, 846p, 855p], ["-", "-", "-", "-", 932p, 935p, 939p, 946p, 955p], ["-", "-", "-", "-", 1032p, 1035p, 1039p, 1046p, 1055p]]
  time_points: [Fairbairn Park, Brindabella Business Park, Russell Offices, Kings Ave/National Crt, Woden Interchange - Platform 16, Lyons, Police College Weston, Duffy Primary School, Cooleman Court]
  -
  long_name: To Fairbairn Park
  between_stops: []
  short_name: "28"
  stop_times: [[615a, 624a, 630a, 634a, 638a, 652a, 655a, 711a, 725a], [637a, 646a, 652a, 656a, 700a, 714a, 717a, 733a, 747a], [705a, 714a, 720a, 724a, 728a, 742a, 746a, 802a, 816a], [745a, 757a, 805a, 810a, 815a, 829a, 833a, 849a, 903a], [815a, 827a, 835a, 840a, 844a, "-", "-", "-", "-"], [844a, 856a, 904a, 909a, 913a, "-", "-", "-", "-"], [926a, 938a, 945a, 949a, 953a, "-", "-", "-", "-"], [1026a, 1038a, 1045a, 1049a, 1053a, "-", "-", "-", "-"], [1126a, 1138a, 1145a, 1149a, 1153a, "-", "-", "-", "-"], [1226p, 1238p, 1245p, 1249p, 1253p, "-", "-", "-", "-"], [126p, 138p, 145p, 149p, 153p, "-", "-", "-", "-"], [226p, 238p, 245p, 249p, 253p, "-", "-", "-", "-"], [326p, 338p, 346p, 351p, 354p, "-", "-", "-", "-"], [356p, 408p, 416p, 421p, 425p, "-", "-", "-", "-"], [415p, 427p, 435p, 440p, 444p, "-", "-", "-", "-"], [515p, 527p, 535p, 540p, 544p, "-", "-", "-", "-"], [615p, 627p, 634p, 638p, 641p, "-", "-", "-", "-"], [700p, 709p, 715p, 719p, 722p, "-", "-", "-", "-"], [800p, 809p, 815p, 819p, 822p, "-", "-", "-", "-"], [900p, 909p, 915p, 919p, 922p, "-", "-", "-", "-"], [1000p, 1009p, 1015p, 1019p, 1022p, "-", "-", "-", "-"]]
  time_points: [Cooleman Court, Duffy Primary School, Police College Weston, Lyons, Woden Interchange - Platform 10, Kings Ave/National Crt, Russell Offices, Brindabella Business Park, Fairbairn Park]
  -
  long_name: To Dickson
  between_stops: []
  short_name: "2"
  stop_times: [["-", "-", "-", "-", "-", "-", "-", 703a, 710a, 715a, 723a, 728a], [653a, 704a, 708a, 711a, 715a, 719a, 723a, 733a, 740a, 746a, 754a, 801a], [708a, 719a, 723a, 726a, 730a, 734a, 738a, 749a, 756a, 802a, 810a, 817a], [719a, 730a, 734a, 737a, 741a, 745a, 749a, 800a, 807a, 813a, 821a, 828a], [738a, 749a, 754a, 758a, 803a, 808a, 814a, 830a, 838a, 845a, 853a, 859a], [753a, 804a, 808a, 812a, 817a, 823a, 826a, 843a, 849a, 854a, 902a, 910a], [808a, 819a, 823a, 826a, 830a, 834a, 838a, 849a, 856a, 902a, 910a, 917a], [823a, 834a, 838a, 841a, 845a, 849a, 853a, 904a, 911a, 917a, 925a, 931a], [838a, 851a, 855a, 858a, 903a, 908a, 914a, 926a, "-", "-", "-", "-"], [853a, 904a, 908a, 911a, 915a, 919a, 923a, 934a, 941a, 946a, 954a, 959a], [923a, 934a, 938a, 941a, 945a, 949a, 953a, 1004a, 1011a, 1016a, 1024a, 1029a], [953a, 1004a, 1008a, 1011a, 1015a, 1019a, 1023a, 1034a, 1041a, 1046a, 1054a, 1059a], [1023a, 1034a, 1038a, 1041a, 1045a, 1049a, 1053a, 1104a, 1111a, 1116a, 1124a, 1129a], [1053a, 1104a, 1108a, 1111a, 1115a, 1119a, 1123a, 1134a, 1141a, 1146a, 1154a, 1159a], [1123a, 1134a, 1138a, 1141a, 1145a, 1149a, 1153a, 1204p, 1211p, 1216p, 1224p, 1229p], [1153a, 1204p, 1208p, 1211p, 1215p, 1219p, 1223p, 1234p, 1241p, 1246p, 1254p, 1259p], [1223p, 1234p, 1238p, 1241p, 1245p, 1249p, 1253p, 104p, 111p, 116p, 124p, 129p], [1253p, 104p, 108p, 111p, 115p, 119p, 123p, 134p, 141p, 146p, 154p, 159p], [123p, 134p, 138p, 141p, 145p, 149p, 153p, 204p, 211p, 216p, 224p, 229p], [153p, 204p, 208p, 211p, 215p, 219p, 223p, 234p, 241p, 246p, 254p, 259p], [223p, 234p, 238p, 241p, 245p, 249p, 253p, 304p, 311p, 316p, 324p, 329p], [238p, 249p, 253p, 256p, 300p, 304p, 308p, 319p, 326p, 332p, 340p, 347p], [253p, 304p, 308p, 311p, 315p, 319p, 323p, 334p, 341p, 346p, 354p, 359p], [308p, 319p, 323p, 326p, 330p, 334p, 338p, 349p, 356p, 402p, 410p, 417p], [323p, 334p, 338p, 341p, 345p, 349p, 353p, 404p, 411p, 417p, 425p, 432p], [338p, 349p, 353p, 356p, 400p, 404p, 408p, 419p, 426p, 432p, 440p, 447p], [353p, 404p, 408p, 411p, 415p, 419p, 423p, 434p, 441p, 447p, 455p, 502p], [408p, 419p, 423p, 426p, 430p, 434p, 438p, 449p, 456p, 502p, 510p, 517p], [423p, 434p, 438p, 441p, 445p, 449p, 453p, 504p, 511p, 517p, 525p, 532p], [438p, 449p, 453p, 456p, 500p, 504p, 508p, 519p, 526p, 532p, 540p, 547p], [453p, 504p, 508p, 511p, 515p, 519p, 523p, 534p, 541p, 547p, 555p, 602p], [508p, 519p, 523p, 526p, 530p, 534p, 538p, 549p, 556p, 602p, 610p, 617p], [523p, 534p, 538p, 541p, 545p, 549p, 553p, 604p, 611p, 617p, 625p, 631p], [538p, 549p, 553p, 556p, 600p, 604p, 608p, 619p, 626p, 632p, 638p, 642p], [553p, 604p, 608p, 611p, 615p, 619p, 623p, 634p, 639p, 644p, 650p, 654p], [640p, 650p, 653p, 656p, 700p, 703p, 707p, 717p, 722p, 727p, 733p, 737p], [740p, 750p, 753p, 756p, 800p, 803p, 807p, 817p, 822p, 827p, 833p, 837p], [840p, 850p, 853p, 856p, 900p, 903p, 907p, 917p, 922p, 927p, 933p, 937p], [940p, 950p, 953p, 956p, 1000p, 1003p, 1007p, 1017p, 1022p, 1027p, 1033p, 1037p], [1040p, 1050p, 1053p, 1056p, 1100p, 1103p, 1107p, 1117p, 1122p, 1127p, 1133p, 1137p]]
  time_points: [Woden Interchange - Platform 4, Curtin, John James Hospital, Yarralumla Shops, Deakin, Parliament House, Kings Ave/National Crt, City Interchange - Platform 10, Olims Hotel, Ainslie, Hackett, Dickson]
  -
  long_name: To Woden Interchange
  between_stops: []
  short_name: "2"
  stop_times: [["-", 634a, 639a, 647a, 653a, 702a, 711a, 715a, 720a, 724a, 727a, 731a, 742a], ["-", 704a, 709a, 717a, 723a, 732a, 742a, 747a, 752a, 756a, 759a, 803a, 814a], ["-", 719a, 724a, 732a, 738a, 747a, 757a, 802a, 807a, 811a, 814a, 818a, 829a], ["-", 732a, 739a, 747a, 753a, 802a, 812a, 817a, 822a, 826a, 829a, 833a, 844a], ["-", 749a, 756a, 804a, 810a, 819a, 829a, 834a, 839a, 843a, 846a, 850a, 901a], ["-", 802a, 809a, 817a, 825a, 838a, 847a, 853a, 857a, 901a, 905a, 908a, 921a], ["-", 819a, 826a, 834a, 840a, 848a, "-", "-", "-", "-", "-", "-", "-"], ["-", 832a, 839a, 847a, 853a, 902a, 912a, 917a, 922a, 926a, 929a, 933a, 944a], ["-", 849a, 856a, 904a, 910a, 918a, "-", "-", "-", "-", "-", "-", "-"], ["-", 904a, 909a, 917a, 923a, 932a, 942a, 946a, 951a, 955a, 958a, 1002a, 1013a], ["-", 934a, 939a, 947a, 953a, 1002a, 1012a, 1016a, 1021a, 1025a, 1028a, 1032a, 1043a], ["-", 1004a, 1009a, 1017a, 1023a, 1032a, 1042a, 1046a, 1051a, 1055a, 1058a, 1102a, 1113a], ["-", 1034a, 1039a, 1047a, 1053a, 1102a, 1112a, 1116a, 1121a, 1125a, 1128a, 1132a, 1143a], ["-", 1104a, 1109a, 1117a, 1123a, 1132a, 1142a, 1146a, 1151a, 1155a, 1158a, 1202p, 1213p], ["-", 1134a, 1139a, 1147a, 1153a, 1202p, 1212p, 1216p, 1221p, 1225p, 1228p, 1232p, 1243p], ["-", 1204p, 1209p, 1217p, 1223p, 1232p, 1242p, 1246p, 1251p, 1255p, 1258p, 102p, 113p], ["-", 1234p, 1239p, 1247p, 1253p, 102p, 112p, 116p, 121p, 125p, 128p, 132p, 143p], ["-", 104p, 109p, 117p, 123p, 132p, 142p, 146p, 151p, 155p, 158p, 202p, 213p], ["-", 134p, 139p, 147p, 153p, 202p, 212p, 216p, 221p, 225p, 228p, 232p, 243p], ["-", 204p, 209p, 217p, 223p, 232p, 242p, 246p, 251p, 255p, 258p, 302p, 313p], ["-", 234p, 239p, 247p, 253p, 302p, 312p, 316p, 321p, 325p, 328p, 332p, 343p], ["-", 249p, 254p, 302p, 308p, 317p, 327p, 332p, 337p, 341p, 344p, 348p, 359p], ["-", 304p, 309p, 317p, 323p, 332p, 342p, 346p, 351p, 355p, 358p, 402p, 413p], [313p, 319p, 326p, 334p, 340p, 349p, 359p, 404p, 409p, 413p, 416p, 420p, 431p], ["-", 332p, 339p, 347p, 353p, 402p, 412p, 417p, 422p, 426p, 429p, 433p, 444p], ["-", 349p, 356p, 404p, 410p, 419p, 429p, 434p, 439p, 443p, 446p, 450p, 501p], ["-", 402p, 409p, 417p, 423p, 432p, 442p, 447p, 452p, 456p, 459p, 503p, 514p], ["-", 419p, 426p, 434p, 440p, 449p, 459p, 504p, 509p, 513p, 516p, 520p, 531p], ["-", 432p, 439p, 447p, 453p, 502p, 512p, 517p, 522p, 526p, 529p, 533p, 544p], ["-", 449p, 456p, 504p, 510p, 519p, 529p, 534p, 539p, 543p, 546p, 550p, 601p], ["-", 502p, 509p, 517p, 523p, 532p, 542p, 547p, 552p, 556p, 559p, 603p, 614p], ["-", 519p, 526p, 534p, 540p, 549p, 559p, 604p, 609p, 613p, 616p, 620p, 631p], ["-", 532p, 539p, 547p, 553p, 602p, 612p, 617p, 622p, 626p, 629p, 633p, 643p], ["-", 549p, 556p, 604p, 610p, 619p, 629p, 634p, 638p, 642p, 645p, 649p, 659p], ["-", 603p, 610p, 618p, 624p, 632p, 641p, 646p, 650p, 654p, 657p, 701p, 711p], ["-", 626p, 632p, 638p, 643p, 649p, 658p, 703p, 707p, 711p, 714p, 718p, 728p], ["-", 726p, 731p, 737p, 742p, 748p, 757p, 802p, 806p, 810p, 813p, 817p, 827p], ["-", 826p, 831p, 837p, 842p, 848p, 857p, 902p, 906p, 910p, 913p, 917p, 927p], ["-", 926p, 931p, 937p, 942p, 948p, 957p, 1002p, 1006p, 1010p, 1013p, 1017p, 1027p], ["-", 1026p, 1031p, 1037p, 1042p, 1048p, 1057p, 1102p, 1106p, 1110p, 1113p, 1117p, 1127p], ["-", 1126p, 1131p, 1137p, 1142p, 1147p, "-", "-", "-", "-", "-", "-", "-"]]
  time_points: [Lyneham High, Dickson, Hackett, Ainslie, Olims Hotel, City Interchange - Platform 3, Kings Ave/National Crt, Parliament House, Deakin, Yarralumla Shops, John James Hospital, Curtin, Woden Interchange]
  -
  long_name: To City Interchange
  between_stops: []
   
  short_name: "30"
  stop_times:
  - - 549a
  - 551a
  - 555a
  - 558a
  - 606a
  - 613a
  - 619a
  - 624a
  - 630a
  - - 618a
  - 620a
  - 624a
  - 627a
  - 635a
  - 642a
  - 648a
  - 653a
  - 659a
  - - 634a
  - 636a
  - 640a
  - 643a
  - 651a
  - 658a
  - 704a
  - 709a
  - 715a
  - - 659a
  - 701a
  - 705a
  - 708a
  - 716a
  - 723a
  - 729a
  - 738a
  - 753a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 729a
  - 738a
  - 746a
  - 755a
  - 810a
  - - 727a
  - 729a
  - 733a
  - 736a
  - 744a
  - 753a
  - 801a
  - 810a
  - 825a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 803a
  - 812a
  - 824a
  - 833a
  - 848a
  - - 758a
  - 800a
  - 804a
  - 807a
  - 815a
  - 824a
  - 834a
  - 843a
  - 858a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 829a
  - 838a
  - 846a
  - 855a
  - 910a
  - - 827a
  - 829a
  - 833a
  - 836a
  - 844a
  - 853a
  - 901a
  - 910a
  - 925a
  - - 856a
  - 858a
  - 902a
  - 905a
  - 913a
  - 922a
  - 930a
  - 935a
  - 941a
  - - 956a
  - 958a
  - 1002a
  - 1005a
  - 1012a
  - 1020a
  - 1028a
  - 1033a
  - 1039a
  - - 1056a
  - 1058a
  - 1102a
  - 1105a
  - 1112a
  - 1120a
  - 1128a
  - 1133a
  - 1139a
  - - 1156a
  - 1158a
  - 1202p
  - 1205p
  - 1212p
  - 1220p
  - 1228p
  - 1233p
  - 1239p
  - - 1256p
  - 1258p
  - 102p
  - 105p
  - 112p
  - 120p
  - 128p
  - 133p
  - 139p
  - - 156p
  - 158p
  - 202p
  - 205p
  - 212p
  - 220p
  - 228p
  - 233p
  - 239p
  - - 245p
  - 247p
  - 251p
  - 254p
  - 301p
  - 309p
  - 317p
  - 323p
  - 330p
  - - 310p
  - 312p
  - 316p
  - 319p
  - 328p
  - 336p
  - 344p
  - 350p
  - 357p
  - - 334p
  - 336p
  - 340p
  - 343p
  - 352p
  - 400p
  - 408p
  - 414p
  - 421p
  - - 404p
  - 406p
  - 410p
  - 413p
  - 422p
  - 430p
  - 438p
  - 444p
  - 451p
  - - 434p
  - 436p
  - 440p
  - 443p
  - 452p
  - 500p
  - 508p
  - 514p
  - 521p
  - - 504p
  - 506p
  - 510p
  - 513p
  - 522p
  - 530p
  - 538p
  - 544p
  - 551p
  - - 534p
  - 536p
  - 540p
  - 543p
  - 552p
  - 600p
  - 608p
  - 614p
  - 621p
  - - 555p
  - 557p
  - 601p
  - 604p
  - 613p
  - 621p
  - 629p
  - 634p
  - 639p
  - - 656p
  - 658p
  - 701p
  - 704p
  - 712p
  - 719p
  - 725p
  - 730p
  - 735p
  - - 756p
  - 758p
  - 801p
  - 804p
  - 812p
  - 819p
  - 825p
  - 830p
  - 835p
  - - 856p
  - 858p
  - 901p
  - 904p
  - 912p
  - 919p
  - 925p
  - 930p
  - 935p
  - - 956p
  - 958p
  - 1001p
  - 1004p
  - 1012p
  - 1019p
  - 1025p
  - 1030p
  - 1035p
  - - 1056p
  - 1058p
  - 1101p
  - 1104p
  - 1112p
  - 1119p
  - 1125p
  - 1130p
  - 1135p
  time_points:
  - Cohen St Bus Station - Platform 1
  - Lathlain St Bus Station - Platform 3
  - Cameron Ave Bus Station - Platform 3
  - University of Canberra
  - Giralang
  - Kaleen Village/Maribyrnong
  - North Lyneham
  - Macarthur / Northbourne
  - City Interchange
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: "30"
  stop_times:
  - - 603a
  - 609a
  - 614a
  - 621a
  - 628a
  - 635a
  - 638a
  - 640a
  - 644a
  - - 633a
  - 639a
  - 644a
  - 651a
  - 658a
  - 705a
  - 708a
  - 710a
  - 714a
  - - 701a
  - 707a
  - 712a
  - 719a
  - 726a
  - 735a
  - 738a
  - 740a
  - 744a
  - - 726a
  - 732a
  - 737a
  - 745a
  - 753a
  - 805a
  - 808a
  - 810a
  - 814a
  - - 759a
  - 806a
  - 811a
  - 819a
  - 827a
  - 839a
  - 842a
  - 844a
  - 848a
  - - 829a
  - 836a
  - 841a
  - 849a
  - 857a
  - 909a
  - 912a
  - 914a
  - 918a
  - - 859a
  - 906a
  - 911a
  - 919a
  - 927a
  - 935a
  - 938a
  - 940a
  - 944a
  - - 933a
  - 939a
  - 944a
  - 951a
  - 958a
  - 1005a
  - 1008a
  - 1010a
  - 1014a
  - - 1002a
  - 1008a
  - 1013a
  - 1020a
  - 1027a
  - 1034a
  - 1037a
  - 1039a
  - 1043a
  - - 1102a
  - 1108a
  - 1113a
  - 1120a
  - 1127a
  - 1134a
  - 1137a
  - 1139a
  - 1143a
  - - 1202p
  - 1208p
  - 1213p
  - 1220p
  - 1227p
  - 1234p
  - 1237p
  - 1239p
  - 1243p
  - - 102p
  - 108p
  - 113p
  - 120p
  - 127p
  - 134p
  - 137p
  - 139p
  - 143p
  - - 202p
  - 208p
  - 213p
  - 220p
  - 227p
  - 234p
  - 237p
  - 239p
  - 243p
  - - 302p
  - 309p
  - 316p
  - 324p
  - 332p
  - 344p
  - 347p
  - 349p
  - 353p
  - - 334p
  - 341p
  - 348p
  - 356p
  - 404p
  - 416p
  - 419p
  - 421p
  - 425p
  - - 359p
  - 406p
  - 413p
  - 421p
  - 429p
  - 441p
  - 444p
  - 446p
  - 450p
  - - 429p
  - 436p
  - 443p
  - 451p
  - 459p
  - 511p
  - 514p
  - 516p
  - 520p
  - - 459p
  - 506p
  - 513p
  - 521p
  - 529p
  - 541p
  - 544p
  - 546p
  - 550p
  - - 514p
  - 521p
  - 528p
  - 536p
  - 544p
  - 556p
  - 559p
  - 601p
  - 605p
  - - 529p
  - 536p
  - 543p
  - 551p
  - 559p
  - 611p
  - 614p
  - 616p
  - 620p
  - - 544p
  - 551p
  - 558p
  - 606p
  - 614p
  - 626p
  - 629p
  - 631p
  - 634p
  - - 559p
  - 606p
  - 613p
  - 621p
  - 629p
  - 636p
  - 639p
  - 641p
  - 644p
  - - 633p
  - 639p
  - 644p
  - 651p
  - 658p
  - 705p
  - 708p
  - 710p
  - 713p
  - - 702p
  - 708p
  - 713p
  - 720p
  - 727p
  - 734p
  - 737p
  - 739p
  - 742p
  - - 802p
  - 808p
  - 813p
  - 820p
  - 827p
  - 834p
  - 837p
  - 839p
  - 842p
  - - 902p
  - 908p
  - 913p
  - 920p
  - 927p
  - 934p
  - 937p
  - 939p
  - 942p
  - - 1002p
  - 1008p
  - 1013p
  - 1020p
  - 1027p
  - 1034p
  - 1037p
  - 1039p
  - 1042p
  - - 1102p
  - 1108p
  - 1113p
  - 1120p
  - 1127p
  - 1134p
  - 1137p
  - 1139p
  - 1142p
  time_points:
  - City Interchange - Platform 8
  - Macarthur / Northbourne
  - North Lyneham
  - Kaleen Village/Maribyrnong
  - Giralang
  - University of Canberra
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To City Interchange
  between_stops: []
   
  short_name: "31"
  stop_times:
  - - 615a
  - 617a
  - 621a
  - 624a
  - 629a
  - 636a
  - 641a
  - 647a
  - - 645a
  - 647a
  - 651a
  - 654a
  - 659a
  - 706a
  - 711a
  - 717a
  - - 712a
  - 714a
  - 718a
  - 721a
  - 726a
  - 734a
  - 742a
  - 757a
  - - 741a
  - 743a
  - 747a
  - 750a
  - 757a
  - 806a
  - 814a
  - 829a
  - - 811a
  - 813a
  - 817a
  - 820a
  - 827a
  - 836a
  - 844a
  - 859a
  - - 841a
  - 843a
  - 847a
  - 850a
  - 857a
  - 906a
  - 914a
  - 929a
  - - 930a
  - 932a
  - 936a
  - 939a
  - 945a
  - 953a
  - 958a
  - 1004a
  - - 1030a
  - 1032a
  - 1036a
  - 1039a
  - 1045a
  - 1053a
  - 1058a
  - 1104a
  - - 1130a
  - 1132a
  - 1136a
  - 1139a
  - 1145a
  - 1153a
  - 1158a
  - 1204p
  - - 1230p
  - 1232p
  - 1236p
  - 1239p
  - 1245p
  - 1253p
  - 1258p
  - 104p
  - - 130p
  - 132p
  - 136p
  - 139p
  - 145p
  - 153p
  - 158p
  - 204p
  - - 230p
  - 232p
  - 236p
  - 239p
  - 245p
  - 253p
  - 258p
  - 305p
  - - 315p
  - 317p
  - 321p
  - 324p
  - 330p
  - 338p
  - 343p
  - 350p
  - - 345p
  - 347p
  - 351p
  - 354p
  - 400p
  - 408p
  - 413p
  - 420p
  - - 415p
  - 417p
  - 421p
  - 424p
  - 430p
  - 438p
  - 443p
  - 450p
  - - 445p
  - 447p
  - 451p
  - 454p
  - 500p
  - 508p
  - 513p
  - 520p
  - - 514p
  - 516p
  - 520p
  - 523p
  - 529p
  - 537p
  - 542p
  - 549p
  - - 545p
  - 547p
  - 551p
  - 554p
  - 600p
  - 608p
  - 613p
  - 620p
  - - 630p
  - 632p
  - 635p
  - 638p
  - 643p
  - 650p
  - 655p
  - 700p
  - - 730p
  - 732p
  - 735p
  - 738p
  - 743p
  - 750p
  - 755p
  - 800p
  - - 830p
  - 832p
  - 835p
  - 838p
  - 843p
  - 850p
  - 855p
  - 900p
  - - 930p
  - 932p
  - 935p
  - 938p
  - 943p
  - 950p
  - 955p
  - 1000p
  - - 1030p
  - 1032p
  - 1035p
  - 1038p
  - 1043p
  - 1050p
  - 1055p
  - 1100p
  time_points:
  - Cohen St Bus Station - Platform 1
  - Lathlain St Bus Station - Platform 3
  - Cameron Ave Bus Station - Platform 3
  - University of Canberra
  - Gwydir Square Kaleen
  - North Lyneham
  - Macarthur / Northbourne
  - City Interchange
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: "31"
  stop_times:
  - - "-"
  - "-"
  - 637a
  - 643a
  - 648a
  - 651a
  - 653a
  - 657a
  - - "-"
  - "-"
  - 707a
  - 713a
  - 718a
  - 721a
  - 723a
  - 727a
  - - 733a
  - 740a
  - 745a
  - 753a
  - 800a
  - 803a
  - 805a
  - 809a
  - - 803a
  - 810a
  - 815a
  - 823a
  - 830a
  - 833a
  - 835a
  - 839a
  - - 829a
  - 836a
  - 841a
  - 849a
  - 856a
  - 859a
  - 901a
  - 905a
  - - 910a
  - 917a
  - 922a
  - 930a
  - 936a
  - 939a
  - 941a
  - 945a
  - - 948a
  - 954a
  - 959a
  - 1005a
  - 1011a
  - 1014a
  - 1016a
  - 1020a
  - - 1048a
  - 1054a
  - 1059a
  - 1105a
  - 1111a
  - 1114a
  - 1116a
  - 1120a
  - - 1148a
  - 1154a
  - 1159a
  - 1205p
  - 1211p
  - 1214p
  - 1216p
  - 1220p
  - - 1248p
  - 1254p
  - 1259p
  - 105p
  - 111p
  - 114p
  - 116p
  - 120p
  - - 148p
  - 154p
  - 159p
  - 205p
  - 211p
  - 214p
  - 216p
  - 220p
  - - 248p
  - 254p
  - 259p
  - 307p
  - 315p
  - 318p
  - 320p
  - 324p
  - - 303p
  - 310p
  - 315p
  - 323p
  - 331p
  - 334p
  - 336p
  - 340p
  - - 333p
  - 340p
  - 345p
  - 353p
  - 401p
  - 404p
  - 406p
  - 410p
  - - 403p
  - 410p
  - 415p
  - 423p
  - 431p
  - 434p
  - 436p
  - 440p
  - - 433p
  - 440p
  - 445p
  - 453p
  - 501p
  - 504p
  - 506p
  - 510p
  - - 503p
  - 510p
  - 515p
  - 523p
  - 531p
  - 534p
  - 536p
  - 540p
  - - 533p
  - 540p
  - 545p
  - 553p
  - 601p
  - 604p
  - 606p
  - 610p
  - - 603p
  - 610p
  - 615p
  - 623p
  - 631p
  - 634p
  - 636p
  - 639p
  - - 648p
  - 654p
  - 659p
  - 705p
  - 710p
  - 713p
  - 715p
  - 718p
  - - 748p
  - 754p
  - 759p
  - 805p
  - 810p
  - 813p
  - 815p
  - 818p
  - - 848p
  - 854p
  - 859p
  - 905p
  - 910p
  - 913p
  - 915p
  - 918p
  - - 948p
  - 954p
  - 959p
  - 1005p
  - 1010p
  - 1013p
  - 1015p
  - 1018p
  - - 1048p
  - 1054p
  - 1059p
  - 1105p
  - 1110p
  - 1113p
  - 1115p
  - 1118p
  time_points:
  - City Interchange - Platform 8
  - Macarthur / Northbourne
  - North Lyneham
  - Gwydir Square Kaleen
  - University of Canberra
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To City Interchange
  between_stops: []
  short_name: "39"
  stop_times: [["-", "-", "-", 549a, 555a, 601a, 606a, 610a, 617a], [609a, 615a, 618a, 624a, 630a, 636a, 641a, 645a, 652a], [639a, 645a, 648a, 654a, 700a, 706a, 711a, 715a, 722a], ["-", "-", "-", 707a, 713a, 719a, 724a, 728a, 741a], [703a, 709a, 712a, 718a, 724a, 730a, 736a, 742a, 757a], ["-", "-", "-", 726a, 732a, 738a, 744a, 750a, 805a], [718a, 724a, 727a, 734a, 740a, 746a, 752a, 758a, 813a], ["-", "-", "-", 742a, 748a, 754a, 800a, 806a, 821a], [733a, 739a, 742a, 749a, 755a, 801a, 807a, 813a, 828a], ["-", "-", "-", 756a, 802a, 808a, 814a, 820a, 835a], [748a, 754a, 757a, 804a, 810a, 816a, 822a, 828a, 843a], [758a, 804a, 807a, 814a, 820a, 826a, 832a, 838a, 853a], ["-", "-", "-", 824a, 830a, 836a, 842a, 848a, 903a], [818a, 824a, 827a, 834a, 840a, 846a, 852a, 858a, 913a], [833a, 839a, 842a, 849a, 855a, 901a, 907a, 913a, 928a], [910a, 916a, 919a, 924a, 930a, 935a, 940a, 943a, 949a], [940a, 946a, 949a, 954a, 1000a, 1005a, 1010a, 1013a, 1019a], [1010a, 1016a, 1019a, 1024a, 1030a, 1035a, 1040a, 1043a, 1049a], [1040a, 1046a, 1049a, 1054a, 1100a, 1105a, 1110a, 1113a, 1119a], [1110a, 1116a, 1119a, 1124a, 1130a, 1135a, 1140a, 1143a, 1149a], [1140a, 1146a, 1149a, 1154a, 1200p, 1205p, 1210p, 1213p, 1219p], [1210p, 1216p, 1219p, 1224p, 1230p, 1235p, 1240p, 1243p, 1249p], [1240p, 1246p, 1249p, 1254p, 100p, 105p, 110p, 113p, 119p], [110p, 116p, 119p, 124p, 130p, 135p, 140p, 143p, 149p], [140p, 146p, 149p, 154p, 200p, 205p, 210p, 213p, 219p], [210p, 216p, 219p, 224p, 230p, 235p, 240p, 243p, 249p], [240p, 246p, 249p, 254p, 300p, 307p, 313p, 317p, 324p], [309p, 315p, 318p, 324p, 330p, 337p, 343p, 347p, 354p], [328p, 334p, 337p, 343p, 349p, 356p, 402p, 406p, 413p], [358p, 404p, 407p, 413p, 419p, 426p, 432p, 436p, 443p], [417p, 423p, 426p, 432p, 438p, 445p, 451p, 455p, 502p], [432p, 438p, 441p, 447p, 453p, 500p, 506p, 510p, 517p], [447p, 453p, 456p, 502p, 508p, 515p, 521p, 525p, 532p], [506p, 512p, 515p, 521p, 527p, 534p, 540p, 544p, 551p], [512p, 518p, 521p, 527p, 533p, 540p, "-", "-", "-"], [521p, 527p, 530p, 536p, 542p, 549p, 555p, 559p, 606p], [536p, 542p, 545p, 551p, 557p, 604p, 610p, 614p, 621p], [546p, 552p, 555p, 601p, 607p, 614p, "-", "-", "-"], [555p, 601p, 604p, 610p, 616p, 623p, 629p, 632p, 638p], [610p, 616p, 619p, 625p, 631p, 636p, 641p, 644p, 650p], [710p, 716p, 719p, 724p, 730p, 735p, 740p, 743p, 749p], [810p, 816p, 819p, 824p, 830p, 835p, 840p, 843p, 849p], [910p, 916p, 919p, 924p, 930p, 935p, 940p, 943p, 949p], [1010p, 1016p, 1019p, 1024p, 1030p, 1035p, 1040p, 1043p, 1049p], [1110p, 1116p, 1119p, 1124p, 1130p, 1135p, "-", "-", "-"]]
  time_points: [City Interchange - Platform 8, Macarthur / Northbourne, Dickson Shops/Antill St, Watson, Watson Terminus, Watson, Dickson Shops/Antill St, Macarthur / Northbourne, City Interchange]
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: "3"
  stop_times:
  - - 612a
  - 621a
  - 625a
  - 630a
  - 634a
  - 638a
  - 650a
  - 656a
  - 701a
  - 706a
  - 713a
  - 728a
  - 730a
  - 734a
  - - 642a
  - 651a
  - 655a
  - 700a
  - 704a
  - 708a
  - 720a
  - 726a
  - 731a
  - 736a
  - 745a
  - 802a
  - 804a
  - 808a
  - - 712a
  - 721a
  - 725a
  - 730a
  - 734a
  - 738a
  - 750a
  - 756a
  - 801a
  - 806a
  - 815a
  - 832a
  - 834a
  - 838a
  - - 738a
  - 748a
  - 753a
  - 800a
  - 804a
  - 808a
  - 820a
  - 826a
  - 831a
  - 836a
  - 845a
  - 902a
  - 904a
  - 908a
  - - 808a
  - 818a
  - 823a
  - 830a
  - 834a
  - 838a
  - 850a
  - 856a
  - 901a
  - 906a
  - 915a
  - 932a
  - 934a
  - 938a
  - - 838a
  - 848a
  - 853a
  - 900a
  - 904a
  - 908a
  - 920a
  - 926a
  - 931a
  - 936a
  - 943a
  - 958a
  - 1000a
  - 1004a
  - - 912a
  - 921a
  - 925a
  - 930a
  - 934a
  - 938a
  - 950a
  - 956a
  - 1001a
  - 1006a
  - 1013a
  - 1031a
  - 1033a
  - 1034a
  - - 942a
  - 951a
  - 955a
  - 1000a
  - 1004a
  - 1008a
  - 1020a
  - 1026a
  - 1031a
  - 1036a
  - 1043a
  - 1058a
  - 1100a
  - 1104a
  - - 1012a
  - 1021a
  - 1025a
  - 1030a
  - 1034a
  - 1038a
  - 1050a
  - 1056a
  - 1101a
  - 1106a
  - 1113a
  - 1128a
  - 1130a
  - 1134a
  - - 1042a
  - 1051a
  - 1055a
  - 1100a
  - 1104a
  - 1108a
  - 1120a
  - 1126a
  - 1131a
  - 1136a
  - 1143a
  - 1158a
  - 1200p
  - 1204p
  - - 1112a
  - 1121a
  - 1125a
  - 1130a
  - 1134a
  - 1138a
  - 1150a
  - 1156a
  - 1201p
  - 1206p
  - 1213p
  - 1228p
  - 1230p
  - 1234p
  - - 1142a
  - 1151a
  - 1155a
  - 1200p
  - 1204p
  - 1208p
  - 1220p
  - 1226p
  - 1231p
  - 1236p
  - 1243p
  - 1258p
  - 100p
  - 104p
  - - 1212p
  - 1221p
  - 1225p
  - 1230p
  - 1234p
  - 1238p
  - 1250p
  - 1256p
  - 101p
  - 106p
  - 113p
  - 128p
  - 130p
  - 134p
  - - 1242p
  - 1251p
  - 1255p
  - 100p
  - 104p
  - 108p
  - 120p
  - 126p
  - 131p
  - 136p
  - 143p
  - 158p
  - 200p
  - 204p
  - - 112p
  - 121p
  - 125p
  - 130p
  - 134p
  - 138p
  - 150p
  - 156p
  - 201p
  - 206p
  - 213p
  - 228p
  - 230p
  - 234p
  - - 142p
  - 151p
  - 155p
  - 200p
  - 204p
  - 208p
  - 220p
  - 226p
  - 231p
  - 236p
  - 243p
  - 258p
  - 300p
  - 304p
  - - 212p
  - 221p
  - 225p
  - 230p
  - 234p
  - 238p
  - 250p
  - 256p
  - 301p
  - 307p
  - 315p
  - 332p
  - 334p
  - 338p
  - - 242p
  - 251p
  - 255p
  - 300p
  - 304p
  - 308p
  - 320p
  - 326p
  - 332p
  - 338p
  - 346p
  - 403p
  - 405p
  - 409p
  - - 309p
  - 319p
  - 324p
  - 330p
  - 334p
  - 338p
  - 350p
  - 356p
  - 402p
  - 408p
  - 416p
  - 433p
  - 435p
  - 439p
  - - 339p
  - 349p
  - 354p
  - 400p
  - 404p
  - 408p
  - 420p
  - 426p
  - 432p
  - 438p
  - 446p
  - 503p
  - 505p
  - 509p
  - - 409p
  - 419p
  - 424p
  - 430p
  - 434p
  - 438p
  - 450p
  - 456p
  - 502p
  - 508p
  - 516p
  - 533p
  - 535p
  - 539p
  - - 439p
  - 449p
  - 454p
  - 500p
  - 504p
  - 508p
  - 520p
  - 526p
  - 532p
  - 538p
  - 546p
  - 603p
  - 605p
  - 609p
  - - 511p
  - 521p
  - 526p
  - 532p
  - 536p
  - 540p
  - 552p
  - 558p
  - 604p
  - 610p
  - 618p
  - 634p
  - 636p
  - 639p
  - - 539p
  - 549p
  - 554p
  - 600p
  - 604p
  - 608p
  - 620p
  - 626p
  - 632p
  - 637p
  - 644p
  - 659p
  - 701p
  - 704p
  - - 608p
  - 618p
  - 623p
  - 629p
  - 632p
  - 636p
  - 648p
  - 654p
  - 659p
  - 704p
  - 711p
  - 726p
  - 728p
  - 731p
  - - 643p
  - 651p
  - 655p
  - 700p
  - 703p
  - 707p
  - 719p
  - 725p
  - 730p
  - 735p
  - 742p
  - 757p
  - 759p
  - 802p
  - - 713p
  - 721p
  - 725p
  - 730p
  - 733p
  - 737p
  - 749p
  - 755p
  - 800p
  - 805p
  - 812p
  - 827p
  - 829p
  - 832p
  - - 813p
  - 821p
  - 825p
  - 830p
  - 833p
  - 837p
  - 849p
  - 855p
  - 900p
  - 905p
  - 912p
  - 927p
  - 929p
  - 932p
  - - 913p
  - 921p
  - 925p
  - 930p
  - 933p
  - 937p
  - 949p
  - 955p
  - 1000p
  - 1005p
  - 1012p
  - 1027p
  - 1029p
  - 1032p
  - - 1013p
  - 1021p
  - 1025p
  - 1030p
  - 1033p
  - 1037p
  - 1049p
  - 1055p
  - 1100p
  - 1105p
  - 1112p
  - 1127p
  - 1129p
  - 1132p
  - - 1113p
  - 1121p
  - 1125p
  - 1130p
  - 1133p
  - 1137p
  - 1147p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Woden Interchange - Platform 14
  - Garran
  - Hughes
  - Deakin
  - Parliament House
  - Kings Ave/National Crt
  - City Interchange - Platform 4
  - National Museum
  - Burton & Garran Hall/Daley Road ANU
  - O'Connor
  - Calvary Hospital
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To Woden Interchange
  between_stops: []
   
  short_name: "3"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 618a
  - 627a
  - 631a
  - 636a
  - 640a
  - 644a
  - 653a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 648a
  - 657a
  - 701a
  - 706a
  - 710a
  - 714a
  - 723a
  - - 631a
  - 633a
  - 637a
  - 652a
  - 658a
  - 702a
  - 706a
  - 718a
  - 727a
  - 731a
  - 736a
  - 742a
  - 746a
  - 758a
  - - 659a
  - 701a
  - 705a
  - 720a
  - 726a
  - 730a
  - 735a
  - 748a
  - 758a
  - 803a
  - 808a
  - 814a
  - 818a
  - 830a
  - - 724a
  - 726a
  - 730a
  - 747a
  - 755a
  - 800a
  - 805a
  - 818a
  - 828a
  - 833a
  - 838a
  - 844a
  - 848a
  - 900a
  - - 748a
  - 750a
  - 754a
  - 810a
  - 819a
  - 827a
  - 832a
  - 848a
  - 853a
  - 901a
  - 906a
  - 915a
  - 919a
  - 931a
  - - 824a
  - 826a
  - 830a
  - 847a
  - 855a
  - 900a
  - 905a
  - 918a
  - 928a
  - 932a
  - 937a
  - 942a
  - 946a
  - 955a
  - - 854a
  - 856a
  - 900a
  - 917a
  - 925a
  - 930a
  - 935a
  - 948a
  - 958a
  - 1002a
  - 1007a
  - 1012a
  - 1016a
  - 1025a
  - - 927a
  - 929a
  - 933a
  - 948a
  - 955a
  - 1000a
  - 1005a
  - 1018a
  - 1028a
  - 1032a
  - 1037a
  - 1042a
  - 1046a
  - 1055a
  - - 957a
  - 959a
  - 1003a
  - 1018a
  - 1025a
  - 1030a
  - 1035a
  - 1048a
  - 1058a
  - 1102a
  - 1107a
  - 1112a
  - 1116a
  - 1125a
  - - 1027a
  - 1029a
  - 1033a
  - 1048a
  - 1055a
  - 1100a
  - 1105a
  - 1118a
  - 1128a
  - 1132a
  - 1137a
  - 1142a
  - 1146a
  - 1155a
  - - 1057a
  - 1059a
  - 1103a
  - 1118a
  - 1125a
  - 1130a
  - 1135a
  - 1148a
  - 1158a
  - 1202p
  - 1207p
  - 1212p
  - 1216p
  - 1225p
  - - 1127a
  - 1129a
  - 1133a
  - 1148a
  - 1155a
  - 1200p
  - 1205p
  - 1218p
  - 1228p
  - 1232p
  - 1237p
  - 1242p
  - 1246p
  - 1255p
  - - 1157a
  - 1159a
  - 1203p
  - 1218p
  - 1225p
  - 1230p
  - 1235p
  - 1248p
  - 1258p
  - 102p
  - 107p
  - 112p
  - 116p
  - 125p
  - - 1227p
  - 1229p
  - 1233p
  - 1248p
  - 1255p
  - 100p
  - 105p
  - 118p
  - 128p
  - 132p
  - 137p
  - 142p
  - 146p
  - 155p
  - - 1257p
  - 1259p
  - 103p
  - 118p
  - 125p
  - 130p
  - 135p
  - 148p
  - 158p
  - 202p
  - 207p
  - 212p
  - 216p
  - 225p
  - - 127p
  - 129p
  - 133p
  - 148p
  - 155p
  - 200p
  - 205p
  - 218p
  - 228p
  - 232p
  - 237p
  - 242p
  - 246p
  - 255p
  - - 157p
  - 159p
  - 203p
  - 218p
  - 225p
  - 230p
  - 235p
  - 248p
  - 258p
  - 303p
  - 308p
  - 314p
  - 318p
  - 329p
  - - 232p
  - 234p
  - 238p
  - 248p
  - 258p
  - 303p
  - 310p
  - 324p
  - 334p
  - 339p
  - 344p
  - 350p
  - 354p
  - 405p
  - - 253p
  - 255p
  - 259p
  - 316p
  - 324p
  - 329p
  - 335p
  - 348p
  - 358p
  - 403p
  - 408p
  - 414p
  - 418p
  - 429p
  - - 320p
  - 322p
  - 326p
  - 343p
  - 351p
  - 356p
  - 402p
  - 415p
  - 425p
  - 430p
  - 435p
  - 441p
  - 445p
  - 456p
  - - 349p
  - 351p
  - 355p
  - 412p
  - 420p
  - 425p
  - 431p
  - 444p
  - 454p
  - 459p
  - 504p
  - 510p
  - 514p
  - 525p
  - - 421p
  - 423p
  - 427p
  - 444p
  - 452p
  - 457p
  - 503p
  - 516p
  - 526p
  - 531p
  - 536p
  - 542p
  - 546p
  - 557p
  - - 448p
  - 450p
  - 454p
  - 511p
  - 519p
  - 524p
  - 530p
  - 543p
  - 553p
  - 558p
  - 603p
  - 609p
  - 613p
  - 624p
  - - 518p
  - 520p
  - 524p
  - 541p
  - 549p
  - 554p
  - 600p
  - 613p
  - 623p
  - 628p
  - 632p
  - 637p
  - 641p
  - 650p
  - - 550p
  - 552p
  - 556p
  - 613p
  - 621p
  - 626p
  - 632p
  - 644p
  - 653p
  - 658p
  - 702p
  - 707p
  - 711p
  - 720p
  - - 623p
  - 625p
  - 629p
  - 644p
  - 651p
  - 656p
  - 701p
  - 713p
  - 722p
  - 727p
  - 731p
  - 736p
  - 740p
  - 749p
  - - 727p
  - 729p
  - 732p
  - 747p
  - 754p
  - 759p
  - 804p
  - 816p
  - 825p
  - 830p
  - 834p
  - 839p
  - 843p
  - 852p
  - - 829p
  - 831p
  - 834p
  - 849p
  - 856p
  - 901p
  - 906p
  - 918p
  - 927p
  - 932p
  - 936p
  - 941p
  - 945p
  - 954p
  - - 929p
  - 931p
  - 934p
  - 949p
  - 956p
  - 1001p
  - 1006p
  - 1018p
  - 1027p
  - 1032p
  - 1036p
  - 1041p
  - 1045p
  - 1054p
  - - 1029p
  - 1031p
  - 1034p
  - 1049p
  - 1056p
  - 1101p
  - 1106p
  - 1116p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Cohen St Bus Station - Platform 2
  - Lathlain St Bus Station - Platform 3
  - Cameron Ave Bus Station - Platform 3
  - Calvary Hospital
  - O'Connor
  - Burton & Garran Hall/Daley Road ANU
  - National Museum
  - City Interchange - Platform 3
  - Kings Ave/National Crt
  - Parliament House
  - Deakin
  - Hughes
  - Garran
  - Woden Interchange
  -
  long_name: To Cameron Ave Station
  between_stops: []
   
  short_name: "43"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - 622a
  - 629a
  - 638a
  - 643a
  - 648a
  - 650a
  - 654a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 641a
  - 648a
  - 657a
  - 702a
  - 707a
  - 709a
  - 713a
  - - 645a
  - 647a
  - 651a
  - 656a
  - 701a
  - 708a
  - 717a
  - 722a
  - 727a
  - 729a
  - 733a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 721a
  - 728a
  - 739a
  - 744a
  - 752a
  - 754a
  - 758a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 742a
  - 749a
  - 800a
  - 805a
  - 813a
  - 815a
  - 819a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 803a
  - 810a
  - 821a
  - 826a
  - 834a
  - 836a
  - 840a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 825a
  - 832a
  - 843a
  - 848a
  - 856a
  - 858a
  - 902a
  - - 824a
  - 826a
  - 830a
  - 838a
  - 843a
  - 850a
  - 901a
  - 906a
  - 914a
  - 916a
  - 920a
  - - 844a
  - 846a
  - 850a
  - 858a
  - 903a
  - 910a
  - 921a
  - 926a
  - 933a
  - 935a
  - 939a
  - - 904a
  - 906a
  - 910a
  - 918a
  - 923a
  - 930a
  - 939a
  - 944a
  - 950a
  - 952a
  - 956a
  - - 1004a
  - 1006a
  - 1010a
  - 1016a
  - 1021a
  - 1028a
  - 1037a
  - 1042a
  - 1048a
  - 1050a
  - 1054a
  - - 1104a
  - 1106a
  - 1110a
  - 1116a
  - 1121a
  - 1128a
  - 1137a
  - 1142a
  - 1148a
  - 1150a
  - 1154a
  - - 1204p
  - 1206p
  - 1210p
  - 1216p
  - 1221p
  - 1228p
  - 1237p
  - 1242p
  - 1248p
  - 1250p
  - 1254p
  - - 104p
  - 106p
  - 110p
  - 116p
  - 121p
  - 128p
  - 137p
  - 142p
  - 148p
  - 150p
  - 154p
  - - 204p
  - 206p
  - 210p
  - 216p
  - 221p
  - 228p
  - 237p
  - 242p
  - 248p
  - 250p
  - 254p
  - - 255p
  - 257p
  - 301p
  - 309p
  - 314p
  - 321p
  - 332p
  - 337p
  - 345p
  - 347p
  - 351p
  - - 324p
  - 326p
  - 330p
  - 338p
  - 343p
  - 350p
  - 401p
  - 406p
  - 414p
  - 416p
  - 420p
  - - 344p
  - 346p
  - 350p
  - 358p
  - 403p
  - 410p
  - 421p
  - 426p
  - 434p
  - 436p
  - 440p
  - - 404p
  - 406p
  - 410p
  - 418p
  - 423p
  - 430p
  - 441p
  - 446p
  - 454p
  - 456p
  - 500p
  - - 424p
  - 426p
  - 430p
  - 438p
  - 443p
  - 450p
  - 501p
  - 506p
  - 514p
  - 516p
  - 520p
  - - 444p
  - 446p
  - 450p
  - 458p
  - 503p
  - 510p
  - 521p
  - 526p
  - 534p
  - 536p
  - 540p
  - - 504p
  - 506p
  - 510p
  - 518p
  - 523p
  - 530p
  - 541p
  - 546p
  - 554p
  - 556p
  - 600p
  - - 524p
  - 526p
  - 530p
  - 538p
  - 543p
  - 550p
  - 601p
  - 606p
  - 614p
  - 616p
  - 620p
  - - 604p
  - 606p
  - 610p
  - 618p
  - 623p
  - 629p
  - 639p
  - 644p
  - 649p
  - 651p
  - 654p
  - - 704p
  - 706p
  - 709p
  - 714p
  - 719p
  - 726p
  - 735p
  - 740p
  - 745p
  - 747p
  - 750p
  - - 804p
  - 806p
  - 809p
  - 814p
  - 819p
  - 826p
  - 835p
  - 840p
  - 845p
  - 847p
  - 850p
  - - 904p
  - 906p
  - 909p
  - 914p
  - 919p
  - 926p
  - 935p
  - 940p
  - 945p
  - 947p
  - 950p
  - - 1004p
  - 1006p
  - 1009p
  - 1014p
  - 1019p
  - 1026p
  - 1035p
  - 1040p
  - 1045p
  - 1047p
  - 1050p
  - - 1104p
  - 1106p
  - 1109p
  - 1114p
  - 1119p
  - 1126p
  - 1135p
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Cameron Ave Bus Station - Platform 5
  - Lathlain St Bus Station - Platform 5
  - Cohen St Bus Station - Platform 5
  - Kippax
  - Macgregor Shops
  - Charnwood
  - Macgregor Shops
  - Kippax
  - Cohen St Bus Station
  - Lathlain St Bus Station
  - Cameron Ave Bus Station
  -
  long_name: To Cameron Ave Station
  between_stops: []
   
  short_name: "44"
  stop_times:
  - - 605a
  - 607a
  - 615a
  - 620a
  - 625a
  - 627a
  - 631a
  - - 638a
  - 640a
  - 648a
  - 653a
  - 658a
  - 700a
  - 704a
  - - 705a
  - 707a
  - 715a
  - 720a
  - 725a
  - 727a
  - 731a
  - - "-"
  - "-"
  - 732a
  - 739a
  - 745a
  - 747a
  - 751a
  - - 738a
  - 741a
  - 750a
  - 757a
  - 803a
  - 805a
  - 809a
  - - 807a
  - 810a
  - 819a
  - 826a
  - 832a
  - 834a
  - 838a
  - - 842a
  - 845a
  - 854a
  - 901a
  - 907a
  - 909a
  - 913a
  - - 912a
  - 915a
  - 924a
  - 931a
  - 937a
  - 939a
  - 943a
  - - 937a
  - 939a
  - 948a
  - 954a
  - 1000a
  - 1002a
  - 1006a
  - - 1037a
  - 1039a
  - 1048a
  - 1054a
  - 1100a
  - 1102a
  - 1106a
  - - 1137a
  - 1139a
  - 1148a
  - 1154a
  - 1200p
  - 1202p
  - 1206p
  - - 1237p
  - 1239p
  - 1248p
  - 1254p
  - 100p
  - 102p
  - 106p
  - - 137p
  - 139p
  - 148p
  - 154p
  - 200p
  - 202p
  - 206p
  - - 237p
  - 239p
  - 248p
  - 254p
  - 300p
  - 302p
  - 306p
  - - 313p
  - 315p
  - 324p
  - 331p
  - 337p
  - 339p
  - 343p
  - - 347p
  - 349p
  - 358p
  - 405p
  - 411p
  - 413p
  - 417p
  - - 418p
  - 420p
  - 429p
  - 436p
  - 442p
  - 444p
  - 448p
  - - 452p
  - 454p
  - 503p
  - 510p
  - 516p
  - 518p
  - 522p
  - - 523p
  - 525p
  - 534p
  - 541p
  - 547p
  - 549p
  - 553p
  - - 557p
  - 559p
  - 608p
  - 615p
  - 621p
  - 623p
  - 627p
  - - 628p
  - 630p
  - 639p
  - 645p
  - 650p
  - 652p
  - 655p
  - - 642p
  - 644p
  - 653p
  - 659p
  - 704p
  - 706p
  - 709p
  - - 737p
  - 739p
  - 748p
  - 754p
  - 759p
  - 801p
  - 804p
  - - 837p
  - 839p
  - 848p
  - 854p
  - 859p
  - 901p
  - 904p
  - - 937p
  - 939p
  - 948p
  - 954p
  - 959p
  - 1001p
  - 1004p
  - - 1037p
  - 1039p
  - 1048p
  - 1054p
  - 1059p
  - 1101p
  - 1104p
  time_points:
  - Kippax Centre
  - Holt
  - Higgins
  - Belconnen Way
  - Cohen St Bus Station
  - Lathlain St Bus Station
  - Cameron Ave Bus Station
  -
  long_name: To Kippax Centre
  between_stops: []
   
  short_name: "44"
  stop_times:
  - - 734a
  - 736a
  - 740a
  - 746a
  - 753a
  - 802a
  - 804a
  - - 803a
  - 805a
  - 809a
  - 815a
  - 822a
  - 831a
  - 833a
  - - 903a
  - 905a
  - 909a
  - 915a
  - 922a
  - 931a
  - 933a
  - - 1003a
  - 1005a
  - 1009a
  - 1014a
  - 1020a
  - 1030a
  - 1032a
  - - 1103a
  - 1105a
  - 1109a
  - 1114a
  - 1120a
  - 1130a
  - 1132a
  - - 1203p
  - 1205p
  - 1209p
  - 1214p
  - 1220p
  - 1230p
  - 1232p
  - - 103p
  - 105p
  - 109p
  - 114p
  - 120p
  - 130p
  - 132p
  - - 203p
  - 205p
  - 209p
  - 214p
  - 220p
  - 230p
  - 232p
  - - 313p
  - 315p
  - 319p
  - 325p
  - 332p
  - 341p
  - 344p
  - - 345p
  - 347p
  - 351p
  - 357p
  - 404p
  - 413p
  - 416p
  - - 419p
  - 421p
  - 425p
  - 431p
  - 438p
  - 447p
  - 450p
  - - 450p
  - 452p
  - 456p
  - 502p
  - 509p
  - 518p
  - 521p
  - - 524p
  - 526p
  - 530p
  - 536p
  - 543p
  - 552p
  - 555p
  - - 555p
  - 557p
  - 601p
  - 607p
  - 614p
  - 623p
  - 626p
  - - 629p
  - 631p
  - 634p
  - 639p
  - 645p
  - 655p
  - 657p
  - - 703p
  - 705p
  - 708p
  - 713p
  - 719p
  - 729p
  - 731p
  - - 803p
  - 805p
  - 808p
  - 813p
  - 819p
  - 829p
  - 831p
  - - 903p
  - 905p
  - 908p
  - 913p
  - 919p
  - 929p
  - 931p
  - - 1003p
  - 1005p
  - 1008p
  - 1013p
  - 1019p
  - 1029p
  - 1031p
  - - 1103p
  - 1105p
  - 1108p
  - 1113p
  - 1119p
  - 1129p
  - 1131p
  time_points:
  - Cameron Ave Bus Station - Platform 5
  - Lathlain St Bus Station - Platform 5
  - Cohen St Bus Station - Platform 5
  - Belconnen Way
  - Higgins
  - Holt
  - Kippax Centre
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: "45"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 627a
  - 631a
  - 637a
  - 639a
  - 647a
  - 654a
  - 656a
  - 700a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 657a
  - 701a
  - 707a
  - 709a
  - 717a
  - 724a
  - 726a
  - 730a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 729a
  - 733a
  - 739a
  - 741a
  - 749a
  - 756a
  - 758a
  - 802a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 759a
  - 803a
  - 809a
  - 811a
  - 819a
  - 826a
  - 828a
  - 832a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 822a
  - 826a
  - 832a
  - 834a
  - 842a
  - 849a
  - 851a
  - 855a
  - - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  - 844a
  - 848a
  - 854a
  - 856a
  - 904a
  - 911a
  - 913a
  - 917a
  - - 832a
  - 834a
  - 838a
  - 846a
  - 854a
  - 856a
  - 900a
  - 906a
  - 908a
  - 916a
  - 923a
  - 925a
  - 929a
  - - 902a
  - 904a
  - 908a
  - 916a
  - 924a
  - 926a
  - 930a
  - 936a
  - 938a
  - 946a
  - 953a
  - 955a
  - 959a
  - - 925a
  - 927a
  - 931a
  - 939a
  - 947a
  - 949a
  - 953a
  - 959a
  - 1001a
  - 1009a
  - 1016a
  - 1018a
  - 1022a
  - - 1025a
  - 1027a
  - 1031a
  - 1039a
  - 1047a
  - 1049a
  - 1053a
  - 1059a
  - 1101a
  - 1109a
  - 1116a
  - 1118a
  - 1122a
  - - 1125a
  - 1127a
  - 1131a
  - 1139a
  - 1147a
  - 1149a
  - 1153a
  - 1159a
  - 1201p
  - 1209p
  - 1216p
  - 1218p
  - 1222p
  - - 1225p
  - 1227p
  - 1231p
  - 1239p
  - 1247p
  - 1249p
  - 1253p
  - 1259p
  - 101p
  - 109p
  - 116p
  - 118p
  - 122p
  - - 125p
  - 127p
  - 131p
  - 139p
  - 147p
  - 149p
  - 153p
  - 159p
  - 201p
  - 209p
  - 216p
  - 218p
  - 222p
  - - 225p
  - 227p
  - 231p
  - 239p
  - 247p
  - 249p
  - 253p
  - 259p
  - 301p
  - 309p
  - 316p
  - 318p
  - 322p
  - - 302p
  - 304p
  - 308p
  - 316p
  - 324p
  - 326p
  - 330p
  - 336p
  - 338p
  - 346p
  - 353p
  - 355p
  - 359p
  - - 332p
  - 334p
  - 338p
  - 346p
  - 354p
  - 356p
  - 400p
  - 406p
  - 408p
  - 416p
  - 423p
  - 425p
  - 429p
  - - 402p
  - 404p
  - 408p
  - 416p
  - 424p
  - 426p
  - 430p
  - 436p
  - 438p
  - 446p
  - 453p
  - 455p
  - 459p
  - - 432p
  - 434p
  - 438p
  - 446p
  - 454p
  - 456p
  - 500p
  - 506p
  - 508p
  - 516p
  - 523p
  - 525p
  - 529p
  - - 502p
  - 504p
  - 508p
  - 516p
  - 524p
  - 526p
  - 530p
  - 536p
  - 538p
  - 546p
  - 553p
  - 555p
  - 559p
  - - 532p
  - 534p
  - 538p
  - 546p
  - 554p
  - 556p
  - 600p
  - 606p
  - 608p
  - 616p
  - 623p
  - 625p
  - 629p
  - - 602p
  - 604p
  - 608p
  - 616p
  - 624p
  - 626p
  - 630p
  - 636p
  - 638p
  - 646p
  - 652p
  - 654p
  - 657p
  - - 625p
  - 627p
  - 631p
  - 638p
  - 646p
  - 648p
  - 652p
  - 658p
  - 700p
  - 708p
  - 714p
  - 716p
  - 719p
  - - 725p
  - 727p
  - 730p
  - 737p
  - 745p
  - 747p
  - 751p
  - 757p
  - 759p
  - 807p
  - 813p
  - 815p
  - 818p
  - - 825p
  - 827p
  - 830p
  - 837p
  - 845p
  - 847p
  - 851p
  - 857p
  - 859p
  - 907p
  - 913p
  - 915p
  - 918p
  - - 925p
  - 927p
  - 930p
  - 937p
  - 945p
  - 947p
  - 951p
  - 957p
  - 959p
  - 1007p
  - 1013p
  - 1015p
  - 1018p
  - - 1025p
  - 1027p
  - 1030p
  - 1037p
  - 1045p
  - 1047p
  - 1051p
  - 1057p
  - 1059p
  - 1107p
  - 1113p
  - 1115p
  - 1118p
  - - 1125p
  - 1127p
  - 1130p
  - 1137p
  - 1145p
  - 1147p
  - 1151p
  - 1157p
  - "-"
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Cohen St Bus Station - Platform 1
  - Lathlain St Bus Station - Platform 3
  - Cameron Ave Bus Station - Platform 2
  - Copland College
  - Cnr Tillyard Dr & Spalding St
  - Charnwood
  - Cnr Kerrigan/Lhotsky
  - Charnwood
  - Cnr Tillyard Dr & Spalding St
  - Copland College
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To City Interchange
  between_stops: []
   
  short_name: "4"
  stop_times:
  - - 712a
  - "-"
  - 715a
  - 722a
  - 725a
  - 729a
  - 734a
  - 743a
  - - 743a
  - "-"
  - 746a
  - 755a
  - 759a
  - 804a
  - 809a
  - 818a
  - - 817a
  - "-"
  - 820a
  - 829a
  - 833a
  - 838a
  - 843a
  - 852a
  - - 847a
  - "-"
  - 850a
  - 859a
  - 903a
  - 908a
  - 913a
  - 922a
  - - 917a
  - "-"
  - 920a
  - 929a
  - 932a
  - 936a
  - 940a
  - 948a
  - - 946a
  - "-"
  - 949a
  - 956a
  - 959a
  - 1003a
  - 1007a
  - 1015a
  - - 1013a
  - "-"
  - 1016a
  - 1023a
  - 1026a
  - 1030a
  - 1034a
  - 1042a
  - - 1043a
  - "-"
  - 1046a
  - 1053a
  - 1056a
  - 1100a
  - 1104a
  - 1112a
  - - 1113a
  - "-"
  - 1116a
  - 1123a
  - 1126a
  - 1130a
  - 1134a
  - 1142a
  - - 1143a
  - "-"
  - 1146a
  - 1153a
  - 1156a
  - 1200p
  - 1204p
  - 1212p
  - - 1213p
  - "-"
  - 1216p
  - 1223p
  - 1226p
  - 1230p
  - 1234p
  - 1242p
  - - 1243p
  - "-"
  - 1246p
  - 1253p
  - 1256p
  - 100p
  - 104p
  - 112p
  - - 113p
  - "-"
  - 116p
  - 123p
  - 126p
  - 130p
  - 134p
  - 142p
  - - 143p
  - "-"
  - 146p
  - 153p
  - 156p
  - 200p
  - 204p
  - 212p
  - - 213p
  - "-"
  - 216p
  - 223p
  - 226p
  - 230p
  - 234p
  - 242p
  - - 243p
  - "-"
  - 246p
  - 253p
  - 256p
  - 300p
  - 305p
  - 314p
  - - 313p
  - "-"
  - 316p
  - 325p
  - 329p
  - 334p
  - 339p
  - 348p
  - - 346p
  - "-"
  - 349p
  - 358p
  - 402p
  - 407p
  - 412p
  - 421p
  - - 416p
  - "-"
  - 419p
  - 428p
  - 432p
  - 437p
  - 442p
  - 451p
  - - 446p
  - "-"
  - 449p
  - 456p
  - 500p
  - 505p
  - 510p
  - 521p
  - - 516p
  - "-"
  - 519p
  - 528p
  - 532p
  - 537p
  - 542p
  - 551p
  - - 546p
  - "-"
  - 549p
  - 558p
  - 602p
  - 607p
  - 612p
  - 621p
  - - "-"
  - 616p
  - 619p
  - 628p
  - 632p
  - 636p
  - 640p
  - 648p
  - - "-"
  - 709p
  - 712p
  - 717p
  - 720p
  - 724p
  - 728p
  - 736p
  - - "-"
  - 809p
  - 812p
  - 817p
  - 820p
  - 824p
  - 828p
  - 836p
  - - "-"
  - 909p
  - 912p
  - 917p
  - 920p
  - 924p
  - 928p
  - 936p
  - - "-"
  - 1009p
  - 1012p
  - 1017p
  - 1020p
  - 1024p
  - 1028p
  - 1036p
  - - "-"
  - 1109p
  - 1112p
  - 1117p
  - 1120p
  - 1124p
  - 1128p
  - 1136p
  time_points:
  - Geoscience Australia
  - Narrabundah Terminus
  - Narrabundah College
  - Manuka/Captain Cook
  - Kingston
  - Kings Ave/National Crt
  - Russell Offices
  - City Interchange
  -
  long_name: To Geoscience Australia
  between_stops: []
   
  short_name: "4"
  stop_times:
  - - 637a
  - 645a
  - 649a
  - 653a
  - 656a
  - 704a
  - "-"
  - 707a
  - - 707a
  - 715a
  - 719a
  - 723a
  - 726a
  - 735a
  - "-"
  - 738a
  - - 737a
  - 746a
  - 751a
  - 756a
  - 759a
  - 809a
  - "-"
  - 812a
  - - 807a
  - 816a
  - 821a
  - 826a
  - 829a
  - 839a
  - "-"
  - 842a
  - - 821a
  - 830a
  - 835a
  - 840a
  - 843a
  - 853a
  - "-"
  - 856a
  - - 837a
  - 846a
  - 851a
  - 856a
  - 859a
  - 909a
  - "-"
  - 912a
  - - 907a
  - 916a
  - 921a
  - 926a
  - 929a
  - 938a
  - "-"
  - 941a
  - - 937a
  - 945a
  - 949a
  - 953a
  - 956a
  - 1005a
  - "-"
  - 1008a
  - - 1007a
  - 1015a
  - 1019a
  - 1023a
  - 1026a
  - 1035a
  - "-"
  - 1038a
  - - 1037a
  - 1045a
  - 1049a
  - 1053a
  - 1056a
  - 1105a
  - "-"
  - 1108a
  - - 1107a
  - 1115a
  - 1119a
  - 1123a
  - 1126a
  - 1135a
  - "-"
  - 1138a
  - - 1137a
  - 1145a
  - 1149a
  - 1153a
  - 1156a
  - 1205p
  - "-"
  - 1208p
  - - 1207p
  - 1215p
  - 1219p
  - 1223p
  - 1226p
  - 1235p
  - "-"
  - 1238p
  - - 1237p
  - 1245p
  - 1249p
  - 1253p
  - 1256p
  - 105p
  - "-"
  - 108p
  - - 107p
  - 115p
  - 119p
  - 123p
  - 126p
  - 135p
  - "-"
  - 138p
  - - 137p
  - 145p
  - 149p
  - 153p
  - 156p
  - 205p
  - "-"
  - 208p
  - - 207p
  - 215p
  - 219p
  - 223p
  - 226p
  - 235p
  - "-"
  - 238p
  - - 237p
  - 245p
  - 249p
  - 253p
  - 256p
  - 305p
  - "-"
  - 308p
  - - 307p
  - 316p
  - 321p
  - 326p
  - 329p
  - 338p
  - "-"
  - 341p
  - - 337p
  - 346p
  - 351p
  - 356p
  - 359p
  - 408p
  - "-"
  - 411p
  - - 407p
  - 416p
  - 421p
  - 426p
  - 429p
  - 438p
  - "-"
  - 441p
  - - 437p
  - 446p
  - 451p
  - 456p
  - 459p
  - 508p
  - "-"
  - 511p
  - - 507p
  - 516p
  - 521p
  - 526p
  - 529p
  - 538p
  - "-"
  - 541p
  - - 537p
  - 546p
  - 551p
  - 556p
  - 559p
  - 608p
  - 611p
  - "-"
  - - 637p
  - 645p
  - 649p
  - 653p
  - 656p
  - 701p
  - 704p
  - "-"
  - - 737p
  - 745p
  - 749p
  - 753p
  - 756p
  - 801p
  - 804p
  - "-"
  - - 837p
  - 845p
  - 849p
  - 853p
  - 856p
  - 901p
  - 904p
  - "-"
  - - 937p
  - 945p
  - 949p
  - 953p
  - 956p
  - 1001p
  - 1004p
  - "-"
  - - 1037p
  - 1045p
  - 1049p
  - 1053p
  - 1056p
  - 1101p
  - 1104p
  - "-"
  - - 1137p
  - 1145p
  - 1149p
  - 1153p
  - 1156p
  - 1201a
  - 1204a
  - "-"
  time_points:
  - City Interchange - Platform 9
  - Russell Offices
  - Kings Ave/National Crt
  - Kingston
  - Manuka/Captain Cook
  - Narrabundah College
  - Narrabundah Terminus
  - Geoscience Australia
  -
  long_name: To City Interchange
  between_stops: []
   
  short_name: "51"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - 532a
  - 541a
  - 550a
  - 559a
  - 602a
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - 616a
  - 625a
  - 634a
  - 643a
  - 646a
  - "-"
  - "-"
  - "-"
  - "-"
  - - 618a
  - 620a
  - 624a
  - 631a
  - 636a
  - 645a
  - 654a
  - 703a
  - 706a
  - 709a
  - 716a
  - 718a
  - 725a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 656a
  - 705a
  - 714a
  - 723a
  - 726a
  - 729a
  - 736a
  - 738a
  - 745a
  - - 654a
  - 656a
  - 700a
  - 707a
  - 712a
  - 721a
  - 730a
  - 739a
  - 742a
  - 745a
  - 756a
  - 801a
  - 815a
  - - "-"
  - "-"
  - "-"
  - 721a
  - 726a
  - 735a
  - 744a
  - 753a
  - 756a
  - 801a
  - 812a
  - 817a
  - 832a
  - - 732a
  - 734a
  - 738a
  - 745a
  - 750a
  - 800a
  - 810a
  - 819a
  - 822a
  - 827a
  - 838a
  - 843a
  - 858a
  - - 751a
  - 753a
  - 757a
  - 805a
  - 810a
  - 820a
  - 830a
  - 839a
  - 842a
  - 847a
  - 856a
  - 901a
  - 912a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 830a
  - 840a
  - 850a
  - 859a
  - 902a
  - 905a
  - 912a
  - 917a
  - 928a
  - - 838a
  - 840a
  - 844a
  - 852a
  - 857a
  - 906a
  - 915a
  - 924a
  - 927a
  - 930a
  - 937a
  - 939a
  - 946a
  - - 913a
  - 915a
  - 919a
  - 926a
  - 931a
  - 940a
  - 949a
  - 958a
  - 1001a
  - "-"
  - "-"
  - "-"
  - "-"
  - - 943a
  - 945a
  - 949a
  - 956a
  - 1001a
  - 1010a
  - 1019a
  - 1028a
  - 1031a
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1043a
  - 1045a
  - 1049a
  - 1056a
  - 1101a
  - 1110a
  - 1119a
  - 1128a
  - 1131a
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1143a
  - 1145a
  - 1149a
  - 1156a
  - 1201p
  - 1210p
  - 1219p
  - 1228p
  - 1231p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1243p
  - 1245p
  - 1249p
  - 1256p
  - 101p
  - 110p
  - 119p
  - 128p
  - 131p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 143p
  - 145p
  - 149p
  - 156p
  - 201p
  - 210p
  - 219p
  - 228p
  - 231p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 243p
  - 245p
  - 249p
  - 256p
  - 301p
  - 310p
  - 319p
  - 328p
  - 331p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 338p
  - 340p
  - 344p
  - 351p
  - 356p
  - 406p
  - 416p
  - 425p
  - 428p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 418p
  - 420p
  - 424p
  - 432p
  - 437p
  - 448p
  - 458p
  - 507p
  - 510p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 438p
  - 440p
  - 444p
  - 452p
  - 457p
  - 508p
  - 518p
  - 527p
  - 530p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 458p
  - 500p
  - 504p
  - 512p
  - 517p
  - 528p
  - 538p
  - 547p
  - 550p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 517p
  - 519p
  - 523p
  - 531p
  - 536p
  - 547p
  - 557p
  - 606p
  - 609p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 539p
  - 541p
  - 545p
  - 553p
  - 558p
  - 607p
  - 616p
  - 625p
  - 628p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 643p
  - 645p
  - 648p
  - 655p
  - 700p
  - 709p
  - 718p
  - 727p
  - 730p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 743p
  - 745p
  - 748p
  - 755p
  - 800p
  - 809p
  - 818p
  - 827p
  - 830p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 843p
  - 845p
  - 848p
  - 855p
  - 900p
  - 909p
  - 918p
  - 927p
  - 930p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 943p
  - 945p
  - 948p
  - 955p
  - 1000p
  - 1009p
  - 1018p
  - 1027p
  - 1030p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1043p
  - 1045p
  - 1048p
  - 1055p
  - 1100p
  - 1109p
  - 1118p
  - 1127p
  - 1130p
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Cohen St Bus Station - Platform 1
  - Lathlain St Bus Station - Platform 2
  - Cameron Ave Bus Station - Platform 2
  - Chuculba/William Slim
  - Federation Square
  - Nicholls Primary
  - Ngunnawal Primary
  - Gungahlin Market Place
  - Hibberson/Kate Crace
  - Flemington Rd/Sandford St
  - Northbourne Ave/Antill St
  - Macarthur / Northbourne
  - City Interchange
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: "51"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - 701a
  - 704a
  - 713a
  - 723a
  - 733a
  - 738a
  - 748a
  - 750a
  - 754a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 721a
  - 724a
  - 733a
  - 743a
  - 753a
  - 758a
  - 809a
  - 811a
  - 815a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 741a
  - 744a
  - 753a
  - 803a
  - 813a
  - 818a
  - 829a
  - 831a
  - 835a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 800a
  - 803a
  - 812a
  - 822a
  - 832a
  - 837a
  - 848a
  - 850a
  - 854a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 821a
  - 824a
  - 833a
  - 843a
  - 853a
  - 858a
  - 906a
  - 908a
  - 912a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 840a
  - 843a
  - 852a
  - 902a
  - 911a
  - 916a
  - 923a
  - 925a
  - 929a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 940a
  - 943a
  - 952a
  - 1001a
  - 1010a
  - 1015a
  - 1022a
  - 1024a
  - 1028a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1040a
  - 1043a
  - 1052a
  - 1101a
  - 1110a
  - 1115a
  - 1122a
  - 1124a
  - 1128a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1140a
  - 1143a
  - 1152a
  - 1201p
  - 1210p
  - 1215p
  - 1222p
  - 1224p
  - 1228p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1240p
  - 1243p
  - 1252p
  - 101p
  - 110p
  - 115p
  - 122p
  - 124p
  - 128p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 140p
  - 143p
  - 152p
  - 201p
  - 210p
  - 215p
  - 222p
  - 224p
  - 228p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 240p
  - 243p
  - 252p
  - 301p
  - 310p
  - 315p
  - 322p
  - 324p
  - 328p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 307p
  - 310p
  - 319p
  - 328p
  - 337p
  - 342p
  - 349p
  - 351p
  - 355p
  - - 328p
  - 334p
  - 336p
  - 344p
  - 347p
  - 350p
  - 359p
  - 409p
  - 419p
  - 424p
  - 432p
  - 434p
  - 438p
  - - 404p
  - 411p
  - 413p
  - 422p
  - 427p
  - 430p
  - 439p
  - 449p
  - 459p
  - 504p
  - 512p
  - 514p
  - 518p
  - - 424p
  - 431p
  - 433p
  - 442p
  - 447p
  - 450p
  - 459p
  - 509p
  - 519p
  - 524p
  - 532p
  - 534p
  - 538p
  - - 444p
  - 451p
  - 453p
  - 502p
  - 507p
  - 510p
  - 519p
  - 529p
  - 539p
  - 544p
  - 552p
  - 554p
  - 558p
  - - 508p
  - 515p
  - 517p
  - 526p
  - 531p
  - 534p
  - 543p
  - 553p
  - 603p
  - 608p
  - 615p
  - 617p
  - 620p
  - - 524p
  - 531p
  - 533p
  - 542p
  - 547p
  - 550p
  - 559p
  - 608p
  - 617p
  - 622p
  - 629p
  - 631p
  - 634p
  - - 535p
  - 542p
  - 544p
  - 553p
  - 558p
  - 601p
  - 610p
  - 619p
  - 628p
  - 633p
  - 640p
  - 642p
  - 645p
  - - 547p
  - 554p
  - 556p
  - 604p
  - 607p
  - 610p
  - 619p
  - 628p
  - 637p
  - 642p
  - 649p
  - 651p
  - 654p
  - - 613p
  - 619p
  - 621p
  - 628p
  - 631p
  - 634p
  - 643p
  - 652p
  - 701p
  - 706p
  - 713p
  - 715p
  - 718p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 740p
  - 743p
  - 752p
  - 801p
  - 810p
  - 815p
  - 822p
  - 824p
  - 827p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 840p
  - 843p
  - 852p
  - 901p
  - 910p
  - 915p
  - 922p
  - 924p
  - 927p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 940p
  - 943p
  - 952p
  - 1001p
  - 1010p
  - 1015p
  - 1022p
  - 1024p
  - 1027p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1040p
  - 1043p
  - 1052p
  - 1101p
  - 1110p
  - 1115p
  - 1122p
  - 1124p
  - 1127p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1140p
  - 1143p
  - 1152p
  - 1201a
  - 1210a
  - 1215a
  - 1222a
  - 1224a
  - 1227a
  time_points:
  - City Interchange - Platform 8
  - Macarthur / Northbourne
  - Northbourne Ave/Antill St
  - Flemington Rd/Sandford St
  - Hibberson/Kate Crace
  - Gungahlin Market Place
  - Ngunnawal Primary
  - Nicholls Primary
  - Federation Square
  - Chuculba/William Slim
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To City Interchange
  between_stops: []
   
  short_name: "52"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - 539a
  - 547a
  - 555a
  - 601a
  - 604a
  - "-"
  - "-"
  - "-"
  - "-"
  - - "-"
  - "-"
  - "-"
  - "-"
  - 618a
  - 626a
  - 634a
  - 640a
  - 643a
  - "-"
  - "-"
  - "-"
  - "-"
  - - 630a
  - 632a
  - 636a
  - 646a
  - 651a
  - 659a
  - 707a
  - 713a
  - 716a
  - 719a
  - 726a
  - 728a
  - 735a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 708a
  - 716a
  - 724a
  - 730a
  - 733a
  - 736a
  - 743a
  - 745a
  - 800a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 725a
  - 733a
  - 741a
  - 747a
  - 750a
  - 755a
  - 806a
  - 811a
  - 826a
  - - 723a
  - 725a
  - 729a
  - 739a
  - 744a
  - 752a
  - 800a
  - 807a
  - 810a
  - 815a
  - 826a
  - 831a
  - 846a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 806a
  - 814a
  - 822a
  - 829a
  - 832a
  - 837a
  - 848a
  - 853a
  - 905a
  - - 801a
  - 803a
  - 807a
  - 818a
  - 823a
  - 831a
  - 839a
  - 846a
  - 849a
  - 854a
  - 902a
  - 907a
  - 918a
  - - 830a
  - 832a
  - 836a
  - 847a
  - 852a
  - 900a
  - 908a
  - 914a
  - 917a
  - 920a
  - 927a
  - 929a
  - 936a
  - - 916a
  - 918a
  - 922a
  - 932a
  - 937a
  - 945a
  - 953a
  - 959a
  - 1002a
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1016a
  - 1018a
  - 1022a
  - 1032a
  - 1037a
  - 1045a
  - 1053a
  - 1059a
  - 1102a
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1116a
  - 1118a
  - 1122a
  - 1132a
  - 1137a
  - 1145a
  - 1153a
  - 1159a
  - 1202p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1216p
  - 1218p
  - 1222p
  - 1232p
  - 1237p
  - 1245p
  - 1253p
  - 1259p
  - 102p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 116p
  - 118p
  - 122p
  - 132p
  - 137p
  - 145p
  - 153p
  - 159p
  - 202p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 216p
  - 218p
  - 222p
  - 232p
  - 237p
  - 245p
  - 253p
  - 259p
  - 302p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 233p
  - 235p
  - 239p
  - 249p
  - 254p
  - 302p
  - 310p
  - 316p
  - 319p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 316p
  - 318p
  - 322p
  - 332p
  - 337p
  - 345p
  - 353p
  - 359p
  - 402p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 356p
  - 358p
  - 402p
  - 413p
  - 418p
  - 427p
  - 435p
  - 442p
  - 445p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 416p
  - 418p
  - 422p
  - 433p
  - 438p
  - 447p
  - 455p
  - 502p
  - 505p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 436p
  - 438p
  - 442p
  - 453p
  - 458p
  - 507p
  - 515p
  - 522p
  - 525p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 456p
  - 458p
  - 502p
  - 513p
  - 518p
  - 527p
  - 535p
  - 542p
  - 545p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 516p
  - 518p
  - 522p
  - 533p
  - 538p
  - 547p
  - 555p
  - 602p
  - 605p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 536p
  - 538p
  - 542p
  - 553p
  - 558p
  - 606p
  - 614p
  - 620p
  - 623p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 616p
  - 618p
  - 621p
  - 631p
  - 636p
  - 644p
  - 652p
  - 658p
  - 701p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 716p
  - 718p
  - 721p
  - 731p
  - 736p
  - 744p
  - 752p
  - 758p
  - 801p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 816p
  - 818p
  - 821p
  - 831p
  - 836p
  - 844p
  - 852p
  - 858p
  - 901p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 916p
  - 918p
  - 921p
  - 931p
  - 936p
  - 944p
  - 952p
  - 958p
  - 1001p
  - "-"
  - "-"
  - "-"
  - "-"
  - - 1016p
  - 1018p
  - 1021p
  - 1031p
  - 1036p
  - 1044p
  - 1052p
  - 1058p
  - 1101p
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - Cohen St Bus Station - Platform 1
  - Lathlain St Bus Station - Platform 2
  - Cameron Ave Bus Station - Platform 2
  - Chuculba/William Slim
  - Federation Square
  - Nicholls Primary
  - Ngunnawal Primary
  - Gungahlin Market Place
  - Hibberson/Kate Crace
  - Flemington Rd/Sandford St
  - Northbourne Ave/Antill St
  - Macarthur / Northbourne
  - City Interchange
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: "52"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - 715a
  - 718a
  - 724a
  - 732a
  - 740a
  - 745a
  - 756a
  - 758a
  - 802a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 735a
  - 738a
  - 744a
  - 753a
  - 801a
  - 806a
  - 817a
  - 819a
  - 823a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 755a
  - 758a
  - 804a
  - 813a
  - 821a
  - 826a
  - 837a
  - 839a
  - 843a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 815a
  - 818a
  - 824a
  - 833a
  - 841a
  - 846a
  - 857a
  - 859a
  - 903a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 835a
  - 838a
  - 844a
  - 853a
  - 901a
  - 906a
  - 916a
  - 918a
  - 922a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 855a
  - 858a
  - 904a
  - 912a
  - 920a
  - 925a
  - 935a
  - 937a
  - 941a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 915a
  - 918a
  - 924a
  - 932a
  - 940a
  - 945a
  - 955a
  - 957a
  - 1001a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 942a
  - 945a
  - 951a
  - 959a
  - 1007a
  - 1012a
  - 1022a
  - 1024a
  - 1028a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1005a
  - 1008a
  - 1014a
  - 1022a
  - 1030a
  - 1035a
  - 1045a
  - 1047a
  - 1051a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1105a
  - 1108a
  - 1114a
  - 1122a
  - 1130a
  - 1135a
  - 1145a
  - 1147a
  - 1151a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1205p
  - 1208p
  - 1214p
  - 1222p
  - 1230p
  - 1235p
  - 1245p
  - 1247p
  - 1251p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 105p
  - 108p
  - 114p
  - 122p
  - 130p
  - 135p
  - 145p
  - 147p
  - 151p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 205p
  - 208p
  - 214p
  - 222p
  - 230p
  - 235p
  - 245p
  - 247p
  - 251p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 301p
  - 304p
  - 310p
  - 318p
  - 326p
  - 331p
  - 341p
  - 343p
  - 347p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 340p
  - 343p
  - 349p
  - 357p
  - 405p
  - 410p
  - 421p
  - 423p
  - 427p
  - - 341p
  - 347p
  - 349p
  - 357p
  - 400p
  - 403p
  - 409p
  - 418p
  - 426p
  - 431p
  - 442p
  - 444p
  - 448p
  - - 357p
  - 404p
  - 406p
  - 415p
  - 420p
  - 423p
  - 429p
  - 438p
  - 446p
  - 451p
  - 502p
  - 504p
  - 508p
  - - 417p
  - 424p
  - 426p
  - 435p
  - 440p
  - 443p
  - 449p
  - 458p
  - 506p
  - 511p
  - 522p
  - 524p
  - 528p
  - - 437p
  - 444p
  - 446p
  - 455p
  - 500p
  - 503p
  - 509p
  - 518p
  - 526p
  - 531p
  - 542p
  - 544p
  - 548p
  - - 457p
  - 504p
  - 506p
  - 515p
  - 520p
  - 523p
  - 529p
  - 538p
  - 546p
  - 551p
  - 602p
  - 604p
  - 607p
  - - 517p
  - 524p
  - 526p
  - 535p
  - 540p
  - 543p
  - 549p
  - 558p
  - 606p
  - 611p
  - 621p
  - 623p
  - 626p
  - - 534p
  - 541p
  - 543p
  - 552p
  - 557p
  - 600p
  - 606p
  - 614p
  - 622p
  - 627p
  - 637p
  - 639p
  - 642p
  - - 557p
  - 603p
  - 605p
  - 612p
  - 615p
  - 618p
  - 624p
  - 632p
  - 640p
  - 645p
  - 655p
  - 657p
  - 700p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 705p
  - 708p
  - 714p
  - 722p
  - 730p
  - 735p
  - 745p
  - 747p
  - 750p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 805p
  - 808p
  - 814p
  - 822p
  - 830p
  - 835p
  - 845p
  - 847p
  - 850p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 905p
  - 908p
  - 914p
  - 922p
  - 930p
  - 935p
  - 945p
  - 947p
  - 950p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1005p
  - 1008p
  - 1014p
  - 1022p
  - 1030p
  - 1035p
  - 1045p
  - 1047p
  - 1050p
  - - "-"
  - "-"
  - "-"
  - "-"
  - 1105p
  - 1108p
  - 1114p
  - 1122p
  - 1130p
  - "-"
  - "-"
  - "-"
  - "-"
  time_points:
  - City Interchange - Platform 8
  - Macarthur / Northbourne
  - Northbourne Ave/Antill St
  - Flemington Rd/Sandford St
  - Hibberson/Kate Crace
  - Gungahlin Market Place
  - Ngunnawal Primary
  - Nicholls Primary
  - Federation Square
  - Chuculba/William Slim
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To City Interchange
  between_stops: []
   
  short_name: "56"
  stop_times:
  - - 537a
  - 539a
  - 543a
  - 557a
  - 608a
  - 618a
  - 625a
  - 631a
  - 633a
  - 639a
  - - 617a
  - 619a
  - 623a
  - 637a
  - 648a
  - 658a
  - 705a
  - 711a
  - 713a
  - 719a
  - - 637a
  - 639a
  - 643a
  - 657a
  - 708a
  - 718a
  - 725a
  - 731a
  - 733a
  - 739a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 722a
  - 731a
  - 738a
  - 744a
  - 749a
  - 804a
  - - 701a
  - 703a
  - 707a
  - 721a
  - 732a
  - 741a
  - 749a
  - 800a
  - 805a
  - 820a
  - - 720a
  - 722a
  - 726a
  - 740a
  - 751a
  - 805a
  - 813a
  - 824a
  - 829a
  - 844a
  - - 741a
  - 743a
  - 747a
  - 802a
  - 813a
  - 827a
  - 835a
  - 846a
  - 851a
  - 902a
  - - 805a
  - 807a
  - 811a
  - 826a
  - 837a
  - 851a
  - 858a
  - 904a
  - 909a
  - 919a
  - - 850a
  - 852a
  - 856a
  - 910a
  - 920a
  - 930a
  - 937a
  - 943a
  - 945a
  - 951a
  - - 933a
  - 935a
  - 939a
  - 953a
  - 1003a
  - 1013a
  - 1020a
  - 1026a
  - 1028a
  - 1034a
  - - 1033a
  - 1035a
  - 1039a
  - 1053a
  - 1103a
  - 1113a
  - 1120a
  - 1126a
  - 1128a
  - 1134a
  - - 1133a
  - 1135a
  - 1139a
  - 1153a
  - 1203p
  - 1213p
  - 1220p
  - 1226p
  - 1228p
  - 1234p
  - - 1233p
  - 1235p
  - 1239p
  - 1253p
  - 103p
  - 113p
  - 120p
  - 126p
  - 128p
  - 134p
  - - 133p
  - 135p
  - 139p
  - 153p
  - 203p
  - 213p
  - 220p
  - 226p
  - 228p
  - 234p
  - - 238p
  - 240p
  - 244p
  - 258p
  - 308p
  - 318p
  - 325p
  - 331p
  - 333p
  - 339p
  - - 315p
  - 317p
  - 321p
  - 335p
  - 345p
  - 355p
  - 402p
  - 409p
  - 411p
  - 418p
  - - 343p
  - 345p
  - 349p
  - 403p
  - 414p
  - 426p
  - 434p
  - 441p
  - 443p
  - 450p
  - - 423p
  - 425p
  - 429p
  - 444p
  - 455p
  - 507p
  - 515p
  - 522p
  - 524p
  - 531p
  - - 443p
  - 445p
  - 449p
  - 504p
  - 515p
  - 525p
  - 533p
  - 540p
  - 542p
  - 549p
  - - 459p
  - 501p
  - 505p
  - 520p
  - 531p
  - 543p
  - 551p
  - 558p
  - 600p
  - 605p
  - - 519p
  - 521p
  - 525p
  - 540p
  - 551p
  - 603p
  - 610p
  - 616p
  - 618p
  - 623p
  - - 539p
  - 541p
  - 545p
  - 600p
  - 610p
  - 620p
  - 627p
  - 633p
  - 635p
  - 640p
  - - 600p
  - 602p
  - 605p
  - 619p
  - 629p
  - 639p
  - 646p
  - 652p
  - 654p
  - 659p
  - - 633p
  - 635p
  - 638p
  - 652p
  - 702p
  - 712p
  - 719p
  - 725p
  - 727p
  - 732p
  - - 733p
  - 735p
  - 738p
  - 752p
  - 802p
  - 812p
  - 819p
  - 825p
  - 827p
  - 832p
  - - 833p
  - 835p
  - 838p
  - 852p
  - 902p
  - 912p
  - 919p
  - 925p
  - 927p
  - 932p
  - - 933p
  - 935p
  - 938p
  - 952p
  - 1002p
  - 1012p
  - 1019p
  - 1025p
  - 1027p
  - 1032p
  - - 1033p
  - 1035p
  - 1038p
  - 1052p
  - 1102p
  - 1112p
  - 1119p
  - 1125p
  - 1127p
  - 1132p
  time_points:
  - Cohen St Bus Station - Platform 1
  - Lathlain St Bus Station - Platform 2
  - Cameron Ave Bus Station - Platform 2
  - Chuculba/William Slim
  - Gungahlin Market Place
  - Kosciuszko/Everard
  - Flemington Rd/Sandford St
  - Northbourne Ave/Antill St
  - Macarthur / Northbourne
  - City Interchange
  -
  long_name: To Cohen St Station
  between_stops: []
   
  short_name: "56"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - "-"
  - 602a
  - 612a
  - 623a
  - 637a
  - 639a
  - 643a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 636a
  - 646a
  - 657a
  - 711a
  - 713a
  - 717a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 706a
  - 716a
  - 727a
  - 741a
  - 743a
  - 747a
  - - 651a
  - 657a
  - 659a
  - 705a
  - 712a
  - 722a
  - 733a
  - 747a
  - 749a
  - 753a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 726a
  - 736a
  - 747a
  - 802a
  - 804a
  - 808a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 744a
  - 756a
  - 807a
  - 822a
  - 824a
  - 828a
  - - 741a
  - 747a
  - 749a
  - 755a
  - 803a
  - 815a
  - 826a
  - 841a
  - 843a
  - 847a
  - - 801a
  - 808a
  - 810a
  - 816a
  - 824a
  - 836a
  - 847a
  - 902a
  - 904a
  - 908a
  - - 821a
  - 828a
  - 830a
  - 836a
  - 844a
  - 856a
  - 906a
  - 920a
  - 922a
  - 926a
  - - 851a
  - 858a
  - 900a
  - 906a
  - 913a
  - 925a
  - 935a
  - 949a
  - 951a
  - 955a
  - - 1004a
  - 1010a
  - 1012a
  - 1018a
  - 1025a
  - 1037a
  - 1047a
  - 1101a
  - 1103a
  - 1107a
  - - 1104a
  - 1110a
  - 1112a
  - 1118a
  - 1125a
  - 1137a
  - 1147a
  - 1201p
  - 1203p
  - 1207p
  - - 1204p
  - 1210p
  - 1212p
  - 1218p
  - 1225p
  - 1237p
  - 1247p
  - 101p
  - 103p
  - 107p
  - - 104p
  - 110p
  - 112p
  - 118p
  - 125p
  - 137p
  - 147p
  - 201p
  - 203p
  - 207p
  - - 204p
  - 210p
  - 212p
  - 218p
  - 225p
  - 237p
  - 247p
  - 301p
  - 303p
  - 307p
  - - 304p
  - 311p
  - 313p
  - 320p
  - 328p
  - 340p
  - 351p
  - 406p
  - 408p
  - 412p
  - - 358p
  - 405p
  - 407p
  - 414p
  - 422p
  - 434p
  - 445p
  - 501p
  - 502p
  - 509p
  - - 409p
  - 416p
  - 418p
  - 425p
  - 433p
  - 445p
  - 456p
  - 511p
  - 513p
  - 517p
  - - 429p
  - 436p
  - 438p
  - 445p
  - 453p
  - 505p
  - 516p
  - 531p
  - 533p
  - 537p
  - - 449p
  - 456p
  - 458p
  - 505p
  - 513p
  - 525p
  - 536p
  - 551p
  - 553p
  - 557p
  - - 510p
  - 517p
  - 519p
  - 526p
  - 534p
  - 546p
  - 557p
  - 611p
  - 613p
  - 616p
  - - 530p
  - 537p
  - 539p
  - 546p
  - 554p
  - 605p
  - 615p
  - 629p
  - 631p
  - 634p
  - - 550p
  - 557p
  - 559p
  - 604p
  - 611p
  - 621p
  - 631p
  - 645p
  - 647p
  - 650p
  - - 610p
  - 616p
  - 618p
  - 623p
  - 630p
  - 640p
  - 650p
  - 704p
  - 706p
  - 709p
  - - 704p
  - 710p
  - 712p
  - 717p
  - 724p
  - 734p
  - 744p
  - 758p
  - 800p
  - 803p
  - - 804p
  - 810p
  - 812p
  - 817p
  - 824p
  - 834p
  - 844p
  - 858p
  - 900p
  - 903p
  - - 904p
  - 910p
  - 912p
  - 917p
  - 924p
  - 934p
  - 944p
  - 958p
  - 1000p
  - 1003p
  - - 1004p
  - 1010p
  - 1012p
  - 1017p
  - 1024p
  - 1034p
  - 1044p
  - 1058p
  - 1100p
  - 1103p
  - - 1104p
  - 1110p
  - 1112p
  - 1117p
  - 1124p
  - 1134p
  - 1144p
  - 1158p
  - 1200a
  - 1203a
  time_points:
  - City Interchange - Platform 8
  - Macarthur / Northbourne
  - Northbourne Ave/Antill St
  - Flemington Rd/Sandford St
  - Kosciuszko/Everard
  - Gungahlin Market Place
  - Chuculba/William Slim
  - Cameron Ave Bus Station
  - Lathlain St Bus Station
  - Cohen St Bus Station
  -
  long_name: To City Interchange
  between_stops: []
   
  short_name: "58"
  stop_times:
  - - "-"
  - "-"
  - "-"
  - 543a
  - 554a
  - 602a
  - 609a
  - 615a
  - 621a
  - 623a
  - 629a
  - - "-"
  - "-"
  - "-"
  - 623a
  - 634a
  - 642a
  - 649a
  - 655a
  - 701a
  - 703a
  - 709a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 654a
  - 702a
  - 709a
  - 715a
  - 721a
  - 723a
  - 729a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 713a
  - 721a
  - 728a
  - 734a
  - 740a
  - 742a
  - 752a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 723a
  - 731a
  - 738a
  - 744a
  - 754a
  - 759a
  - 814a
  - - "-"
  - "-"
  - "-"
  - "-"
  - 740a
  - 748a
  - 755a
  - 803a
  - 814a
  - 819a
  - 834a
  - - 726a
  - 728a
  - 732a
  - 746a
  - 757a
  - 806a
  - 813a
  - 821a
  - 833a
  - 839a
  - 854a
  - - 747a
  - 749a
  - 753a
  - 808a
  - 819a
  - 828a
  - 835a
  - 843a
  - 854a
  - 859a
  - 909a
  - - 829a
  - 831a
  - 835a
  - 850a
  - 901a
  - 909a
  - 916a
  - 923a
  - 929a
  - 931a
  - 937a
  - - 909a
  - 911a
  - 915a
  - 929a
  - 939a
  - 947a
  - 954a
  - 1001a
  - 1007a
  - 1009a
  - 1015a
  - - 1009a
  - 1011a
  - 1015a
  - 1029a
  - 1039a
  - 1047a
  - 1054a
  - 1101a
  - 1107a
  - 1109a
  - 1115a
  - - 1109a
  - 1111a
  - 1115a
  - 1129a
  - 1139a
  - 1147a
  - 1154a
  - 1201p
  - 1207p
  - 1209p
  - 1215p
  - - 1209p
  - 1211p
  - 1215p
  - 1229p
  - 1239p
  - 1247p
  - 1254p
  - 101p
  - 107p
  - 109p
  - 115p
  - - 109p
  - 111p
  - 115p
  - 129p
  - 139p
  - 147p
  - 154p
  - 201p
  - 207p
  - 209p
  - 215p
  - - 209p
  - 211p
  - 215p
  - 229p
  - 239p
  - 247p
  - 254p
  - 301p
  - 307p
  - 309p
  - 315p
  - - 309p
  - 311p
  - 315p
  - 329p
  - 339p
  - 347p
  - 354p
  - 401p
  - 408p
  - 410p
  - 417p
  - - 409p
  - 411p
  - 415p
  - 430p
  - 441p
  - 450p
  - 457p
  - 505p
  - 512p
  - 514p
  - 521p
  - - 429p
  - 431p
  - 435p
  - 450p
  - 501p
  - 510p
  - 517p
  - 525p
  - 532p
  - 534p
  - 541p
  - - 449p
  - 451p
  - 455p