anchor.diff:        Interlocked.Increment(&this.version) |> ignore
         exitWriteLockIf &this.locker entered
         #if PRERELEASE
  +      Trace.Assert(outerMap.Version = this.version)
         if entered && this.version <> this.nextVersion then raise (ApplicationException("this.orderVersion <> this.nextVersion"))
         #else
         if entered && this.version <> this.nextVersion then Environment.FailFast("this.orderVersion <> this.nextVersion")
  
positive.code:           let hash = hasher.Hash(key)
            let c = comparer.Compare(hash, prevHash)
            let mutable prevBucket' = Unchecked.defaultof<_>
            if c = 0 && prevBucketIsSet(&prevBucket') then // avoid generic equality and null compare
              prevBucket'.[key] <- value
              outerMap.Version <- outerMap.Version + 1L
              if this.subscribersCounter > 0 then this.onUpdateEvent.Trigger(false)
  
negative.code:         if entered && this.version <> this.nextVersion then Environment.FailFast("this.orderVersion <> this.nextVersion")
          #endif
  
    
    member private this.FirstUnsafe
      with get() = 
        if outerMap.IsEmpty then 
          raise (InvalidOperationException("Could not get the first element of an empty map"))
        let bucket = outerMap.First
        bucket.Value.First
        
    member this.First
      with get() = 
        readLockIf &this.nextVersion &this.version this.isSynchronized (fun _ -> this.FirstUnsafe)
  
    member private this.LastUnsafe
      with get() = 
        if outerMap.IsEmpty then raise (InvalidOperationException("Could not get the first element of an empty map"))
        let bucket = outerMap.Last
        bucket.Value.Last
        
    member this.Last
      with get() = 
        readLockIf &this.nextVersion &this.version this.isSynchronized (fun _ -> this.LastUnsafe )
  
    member private this.FlushUnchecked() =
      prevBucket.SetTarget (null)
  