anchor.diff:  
     Future<bool> _processNewRoute(Route base, String path, UrlMatch match,
         Route newRoute) {
  +    _logger.finest('_processNewRoute $path');
       var event = new RouteEvent(match.match, match.parameters);
       // before we make this a new current route, leave the old
       return _leaveCurrentRoute(base, event).then((bool allowNavigation) {
  
positive.code:         baseRoute._getHead(baseRoute._getTailUrl(routePath, parameters));
    }
  
    Router getRouter(String routePath) {
      var routeName = routePath.split('.').first;
      if (!_routes.containsKey(routeName)) {
        throw new StateError('Invalid route name: $routeName');
      }
      var routeToGo = _routes[routeName];
      var childPath = routePath.substring(routeName.length);
      if (routeToGo.child != null && childPath.length > 0) {
        return routeToGo.getRouter(childPath.substring(1));
      }
      return routeToGo.router;
    }
  
    UrlMatch _getMatch(Route route, String path) {
      var match = route.path.match(path);
      if (match == null) { // default route
  
negative.code:     _routes[name] = route;
    }
  
    /**
     * Returns a route node at the end of the given route path. Route path
     * dot delimited string of route names.
     */
    Route getRoute(String routePath) {
      var routeName = routePath.split('.').first;
      if (!_routes.containsKey(routeName)) {
  