code: func (v Vector) Merge(b Vector) Vector {
  	var vi, bi int
  	for bi < len(b.Counters) {
  		if vi == len(v.Counters) {
  			// We've reach the end of v, all that remains are appends
  			return Vector{Counters: append(v.Counters, b.Counters[bi:]...)}
  		}
  
  		if v.Counters[vi].ID > b.Counters[bi].ID {
  			// The index from b should be inserted here
  			n := make([]Counter, len(v.Counters)+1)
  			copy(n, v.Counters[:vi])
  			n[vi] = b.Counters[bi]
  			copy(n[vi+1:], v.Counters[vi:])
  			v.Counters = n
  		}
  
  		if v.Counters[vi].ID == b.Counters[bi].ID {
  			if val := b.Counters[bi].Value; val > v.Counters[vi].Value {
  				v.Counters[vi].Value = val
  			}
  		}
  
  		if bi < len(b.Counters) && v.Counters[vi].ID == b.Counters[bi].ID {
  			bi++
  		}
  		vi++
  	}
  
  	return v
  }
docs: // Merge returns the vector containing the maximum indexes from v and b. If it
  // is possible, the vector v is updated and returned. If it is not, a copy
  // will be created, updated and returned.