anchor.diff:          /////////// Start read-locked code /////////////
   
             if (this.source.isReadOnly) && (this.index = -1) && this.source.size > 0 then
  +            this.cursorVersion <- this.source.orderVersion
               newIndex <- this.source.size - 1 // at the last element of the batch
               newKey <- this.source.GetKeyByIndexUnchecked(newIndex)
               newValue <- this.source.values.[newIndex]
  
positive.code:       if removed then Interlocked.Increment(&this.version) |> ignore else Interlocked.Decrement(&this.nextVersion) |> ignore
        exitWriteLockIf &this.locker entered
        #if PRERELEASE
        if this.version <> this.nextVersion then raise (ApplicationException("this.orderVersion <> this.nextVersion"))
        #else
        if this.version <> this.nextVersion then Environment.FailFast("this.orderVersion <> this.nextVersion")
        #endif
  
  
  
negative.code:               true
              else
                false
            else // source order change
              //NB: we no longer recover on order change, some cursor require special logic to recover
              raise (new OutOfOrderKeyException<'K>(this.currentKey, "SortedMap order was changed since last move. Catch OutOfOrderKeyException and use its CurrentKey property together with MoveAt(key, Lookup.GT) to recover."))
              
  
          /////////// End read-locked code /////////////
          if doSpin then
            let nextVersion = Volatile.Read(&this.source.nextVersion)
  