/**
   * Parses standard hex and sortable url safe base64
   *
   * @param s
   * @param offset
   * @param len
   * @return
   * @see TimeUUIDUtils#toSortableUrlSafeBase64(UUID)
   */
  public static UUID parse(CharSequence s, int offset, int len) {

    // if (!isValid(s, offset, len))
    // throw new IllegalArgumentException("invalid TimeUUID ["
    // + s.subSequence(offset, offset + len) + "]");

    UUID retval = null;
    if (len == 32) {
      long msb = Hex.parseLong(s.subSequence(offset, offset + len));
      long lsb = Hex.parseLong(s.subSequence(offset + 16, offset + 32));
      retval = new UUID(msb, lsb);
    } else if (len == 36) {
      long msb = Hex.parseLong(s.subSequence(offset, offset + len));
      long lsb = Hex.parseLong(s.subSequence(offset + 19, offset + 36));
      retval = new UUID(msb, lsb);
    } else if (len == 22) {
      retval = TimeUUIDUtils.fromSortableUrlSafeBase64(s, offset);
    }

    if (retval == null) {
      throw new IllegalArgumentException(
          "String not in expected format [" + s.subSequence(offset, offset + len) + "]");
    }
    return retval;
  }
 public static String getAsSortableUrlSafeBase64() {
   return TimeUUIDUtils.toSortableUrlSafeBase64(get());
 }
 public static UUID get(Date time, Random rand) {
   return TimeUUIDUtils.createForGivenTimeAndRand(time.getTime() * 10000, rand);
 }