code: func (op *op) UnmarshalBinary(data []byte) error {
  	if len(data) < minOpSize {
  		return fmt.Errorf("op data out of bounds: len=%d", len(data))
  	}
  	statsHit("op/UnmarshalBinary")
  
  	op.typ = opType(data[0])
  	// op.value will actually contain the length of values for batch ops
  	op.value = binary.LittleEndian.Uint64(data[1:9])
  
  	// Verify checksum.
  	h := fnv.New32a()
  	_, _ = h.Write(data[0:9])
  
  	if op.typ > 1 {
  		if len(data) < int(13+op.value*8) {
  			return fmt.Errorf("op data truncated - expected %d, got %d", 13+op.value*8, len(data))
  		}
  		_, _ = h.Write(data[13 : 13+op.value*8])
  		op.values = make([]uint64, op.value)
  		for i := uint64(0); i < op.value; i++ {
  			start := 13 + i*8
  			op.values[i] = binary.LittleEndian.Uint64(data[start : start+8])
  		}
  		op.value = 0
  	}
  	if chk := binary.LittleEndian.Uint32(data[9:13]); chk != h.Sum32() {
  		return fmt.Errorf("checksum mismatch: exp=%08x, got=%08x", h.Sum32(), chk)
  	}
  
  	return nil
  }
docs: // UnmarshalBinary decodes data into an op.