void maybeTimestampDuration(V1Span source, V1Annotation begin, @Nullable V1Annotation end) {
    Span.Builder span2 = forEndpoint(source, begin.endpoint);
    if (source.timestamp != 0 && source.duration != 0) {
      span2.timestamp(source.timestamp).duration(source.duration);
    } else {
      span2.timestamp(begin.timestamp);
      if (end != null) span2.duration(end.timestamp - begin.timestamp);
    }
  }
Allows you to split a v1 span when necessary. This can be the case when reading merged
client+server spans from storage or parsing old data formats.

<p>This type isn't thread-safe: it re-uses state to avoid re-allocations in conversion loops.
zipkin/src/main/java/zipkin2/v1/V1SpanConverter.java