anchor.diff:      type History = { histUri  : string;
                        title    : string;
                        visits   : HistoryPayload;
  -                     date     : int; // datetime of the visit
  +                     date     : Int64; // datetime of the visit
                        ``type`` : HistoryTransition }
       
       type Passwords = { hostname      : string;
  
positive.code:         let url = (clusterURL username) + "1.1/" + username
          fetchUrlResponse url "GET" (Some (username, password)) None None None
  
      let ic = fetchInfoCollections s.username s.password
  
      let iq = fetchInfoQuota s.username s.password
  
      let icu = fetchInfoCollectionUsage s.username s.password
  
      let icc = fetchInfoCollectionCounts s.username s.password
  
  
  module Collections =
      open Secrets
      open ServerAPI
      open CryptoKeys
  
      let s = Secrets.secrets
      let url = clusterURL s.username
      
      // https://github.com/mikerowehl/firefox-sync-client-php/blob/master/sync.php#L94
      let fetchCollection username password collection =
          let url = (clusterURL username) + "1.1/" + username + "/storage/" + collection + "?full=1"
          fetchUrlResponse url "GET" (Some (username, password)) None None None
  
      let bm' = fetchCollection s.username s.password "bookmarks"
  
      let parseCollection collection = 
          collection
          |> JsonValue.Parse 
          |> fun x -> x.AsArray() 
          |> Array.map string 
          |> Array.map (fun x -> JsonValue.Parse x) 
          |> Array.map (fun x -> (x?payload).AsString())
          |> Array.map (fun x -> JsonValue.Parse x)
          |> Array.map (fun x -> { iv = x?IV.AsString(); ciphertext = x?ciphertext.AsString(); hmac = x?hmac.AsString() } )
  
      let bm = parseCollection bm'
      let cryptoKeysCleartext = 
          readCryptoKeysFromDisk None 
          |> JsonValue.Parse 
          |> decryptCryptoKeys secrets
      let key = 
          cryptoKeysCleartext 
          |> keepAsciiPrintableChars
          |> JsonValue.Parse 
          |> fun x -> (x.GetProperty "default").AsArray()
          |> fun x -> x.[0].AsString()
          |> Convert.FromBase64String
      let cleartext = [|for b in bm do yield DecryptAES b.ciphertext key (b.iv |> Convert.FromBase64String) |]
  
  
      let cleartext' = 
          cleartext
          |> Array.map keepAsciiPrintableChars 
          |> Array.map JsonValue.Parse
  
      let x = 
          cleartext'.[0] 
          |> fun x -> x.TryGetProperty "keyword"
          |> fun x -> match x with | Some x -> x.AsString() | _ -> ""
  
      let x' = 
          cleartext'.[0] 
          |> fun x -> x.TryGetProperty "parentName"
          |> fun x -> match x with | Some x -> x.AsString() | _ -> ""
  
  
  module Test = 
      open Utilities
      open CryptoKeys
  
      // base32Decode
  
  
negative.code:     // writeCryptoKeysToDisk
  
      try
          writeCryptoKeysToDisk Secrets.secrets.username Secrets.secrets.password None
      with | _ -> failwith "writeCryptoKeysToDisk failed"
  
  
  