anchor.diff:                                  None
                               else
                                   try Some (spl.[0], Some (SemVer.Parse spl.[1]))
  -                                with e -> 
  +                                with e ->
                                       eprintfn "Failed to parse @type '%s' in nuget v3: %O" res e
                                       None
                           | _ ->
                               if verbose then
                                   eprintfn "Unable to parse @type in nuget v3: '%s'" res
                               None
  -                    match name_version with 
  +                    match name_version with
                       | None -> None
                       | Some (name, version) ->
                           let resType =
  
positive.code:         traceWarnfn "Create page cache \"%s\" -- long delay expected" directory.FullName
          directory.Create()
      directory;
      
  let private getPageFileContent(pageFileName:String) =
      let pageFileInfo = new FileInfo(pageFileName+".gz")
      if pageFileInfo.Exists then
          try 
              // File.ReadAllText(pageFileInfo.FullName)
              use archive = File.OpenRead(pageFileInfo.FullName)
              use compressed = new GZipStream(archive,CompressionMode.Decompress)
              use reader = new StreamReader(compressed,Encoding.UTF8)
              reader.ReadToEnd()
              |> JsonConvert.DeserializeObject<NugetV3CatalogPage> 
              |> Some
          with 
          | ex ->
              traceWarnfn "Cannot read/parse %A: %A" pageFileInfo ex
              pageFileInfo.Delete() 
              None
      else None
      
  let private setPageFileContent(pageFileName:String,responseData:String) = 
      try
          // File.WriteAllText(pageFileName,responseData)
          let bytes = Encoding.UTF8.GetBytes(responseData)
  
negative.code: 
  let private semVerOrder versions =
      let getSemVer original =
          let parts =
              original |> String.split[|'!'|]
          try
              SemVer.Parse(parts.[0])
          with
          | ex ->
              { SemVer.Zero with
                  Original = Some (parts.[0]) }
  
      let semVerStr (semVersion:SemVerInfo) =
          let normal = semVersion.Normalize()
          let normalized =
              match semVersion.BuildMetaData with
              | null | "" -> normal
              | some -> normal + "+" + some
  