anchor.diff:                                   
                               ArrayNode(thread1, n + 1, nodes) :> INode
                           else
  -                            let newArray = Array.create (2*(n+4)) null
  -                            System.Array.Copy(this.array, 0, newArray, 0, 2*idx)
  -                            newArray.[2*idx] <- key
  +                            let newArray = Array.create (n'+8) null
  +                            System.Array.Copy(this.array, 0, newArray, 0, idx')
  +                            newArray.[idx'] <- key
                               addedLeaf.Value <- addedLeaf :> obj
  -                            newArray.[2*idx+1] <- value
  -                            System.Array.Copy(this.array, 2*idx, newArray, 2*(idx+1), 2*(n-idx))
  +                            newArray.[idx'+1] <- value
  +                            System.Array.Copy(this.array, idx', newArray, idx'+2, n'-idx')
                               let editable = this.ensureEditable(thread1)
                               editable.array <- newArray
                               editable.bitmap <- this.bitmap ||| bit
  
positive.code: 
              member this.assoc(shift, hashKey, key, value, addedLeaf) = 
                  let bit = BitCount.bitpos(hashKey, shift)
                  let idx = BitCount.index(this.bitmap,bit)
                  if (this.bitmap &&& bit) <> 0 then
                      let keyOrNull = this.array.[2*idx]
                      let valOrNode = this.array.[2*idx+1]
                      if keyOrNull = null then
                          let n = (valOrNode :?> INode).assoc(shift + 5, hashKey, key, value, addedLeaf)
                          if n = (valOrNode :?> INode) then this :> INode else BitmapIndexedNode(ref null, this.bitmap, NodeHelpers.cloneAndSet(this.array, 2*idx+1, n)) :> INode
                      else
                          if key = keyOrNull then
                              if value = valOrNode then this  :> INode else BitmapIndexedNode(ref null, this.bitmap, NodeHelpers.cloneAndSet(this.array, 2*idx+1, value)) :> INode
                          else
                              addedLeaf.Value <- addedLeaf
                              BitmapIndexedNode(ref null, this.bitmap, NodeHelpers.cloneAndSet2(this.array, 2*idx, null, 2*idx+1, NodeHelpers.createNode(ref null, shift + 5, keyOrNull, valOrNode, hashKey, key, value))) :> INode
                  else
                      let n = BitCount.NumberOfSetBits(this.bitmap)
                      if n >= 16 then
  
negative.code:             member this.find(shift, hash, key) =
                  let bit = BitCount.bitpos(hash, shift)
                  if this.bitmap &&& bit = 0 then null else
                  let idx' = BitCount.index(this.bitmap,bit) * 2
                  let keyOrNull = this.array.[idx']
                  let valOrNode = this.array.[idx'+1]
                  if keyOrNull = null then (valOrNode :?> INode).find(shift + 5, hash, key) else
                  if key = keyOrNull then
                      valOrNode
  