   dump: (offset, snapshot) ->
     end = offset.traverse(@extent)
     @ids.forEach (id) ->
-      if snapshot[id]?
-        snapshot[id].end = end
-      else
-        snapshot[id] = Range(offset, end)
+      snapshot[id].start ?= offset
+      snapshot[id].end = end
     end
 
   findContaining: (point, set) ->

    result

  clear: ->
    @exclusiveIds = new Set
    @rootNode = new Leaf(Point.infinity(), new Set)

  dump: ->
    snapshot = {}
    @rootNode.dump(Point.zero(), snapshot)
    snapshot

  ###
  Section: Private
  ###

  condenseIfNeeded: ->
    while @rootNode.children?.length is 1

assertValidId = (id) ->
  unless typeof id is 'string'
    throw new TypeError("Marker ID must be a string")

templateRange = ->
  range = new Range(Zero, Zero)
  range.start = range.end = null
  range
