       catch ex
         Object.prototype.toString.call(obj)
 
-  _.reduce(stringVal, ((code, c) -> code * 37 + c.charCodeAt(0)), 0)
+  util.reduce(stringVal, ((code, c) -> code * 37 + c.charCodeAt(0)), 0)
 
 areEqual = (obj1, obj2) ->
   if obj1? and typeof(obj1.equals) == "function"

    else
      remaining = j for j in [1...@table.length] when j != i and @table[j]
      if remaining.length <= 4
        bitmap = _.reduce(remaining, ((b, j) -> b | (1 << j)), 0)
        array  = @table[j] for j in remaining
        new BitmapIndexedNode(bitmap, array, @size - 1)
      else

# You must not remove this notice, or any other, from this software.
# --------------------------------------------------------------------

# --------------------------------------------------------------------
# Nodes and support functions used by several collections.
# --------------------------------------------------------------------

# A collection of utility functions used by interior nodes.
util = {
  find: (a, test) ->
    for x in a
      return x if test(x) == true
    ()

  reduce: (a, step, init) ->
    result = init
    for x in a
      result = step(result, x)
    result

  arrayWith: (a, i, x) -> a[...i].concat([x], a[i+1..])

  arrayWithInsertion: (a, i, x) -> a[...i].concat([x], a[i..])
