anchor.diff:        throw new ArgumentError.value(uri, "uri", "Must not have authority");
       }
       if (uri.path.startsWith("/")) {
  -      throw new ArgumentError.value(uri, "uri",
  -      "Path must not start with '/'.");
  +      throw new ArgumentError.value(
  +          uri, "uri", "Path must not start with '/'.");
       }
       // Normalizes the path by removing '.' and '..' segments.
       uri = uri.normalizePath();
  
positive.code:     return buffer.toString();
    }
  
    static Uri relativize(Uri uri,
                          Uri baseUri) {
      if (uri.hasQuery || uri.hasFragment) {
        uri = new Uri(scheme: uri.scheme,
        userInfo: uri.hasAuthority ? uri.userInfo : null,
        host: uri.hasAuthority ? uri.host : null,
        port: uri.hasAuthority ? uri.port : null,
        path: uri.path);
      }
      if (!baseUri.isAbsolute) {
        throw new ArgumentError("Base uri '$baseUri' must be absolute.");
  
negative.code:     if (uri.hasAuthority != baseUri.hasAuthority) return uri;
      if (uri.hasAuthority) {
        if (uri.userInfo != baseUri.userInfo ||
            uri.host.toLowerCase() != baseUri.host.toLowerCase() ||
            uri.port != baseUri.port) {
          return uri;
        }
      }
  
      baseUri = baseUri.normalizePath();
      List<String> base = baseUri.pathSegments.toList();
      if (base.isNotEmpty) {
        base = new List<String>.from(base)..removeLast();
      }
      uri = uri.normalizePath();
      List<String> target = uri.pathSegments.toList();
      int index = 0;
      while (index < base.length && index < target.length) {
        if (base[index] != target[index]) {
  