code: private static Set<List<?>> cloneNames(Collection<List<?>> names) {
          try {
              return cloneAndCheckNames(names);
          } catch (IOException e) {
              throw new RuntimeException("cloneNames encountered IOException: " +
                                         e.getMessage());
          }
      }
docs: Clone an object of the form passed to
  setSubjectAlternativeNames and setPathToNames.
  Throw a {@code RuntimeException} if the argument is malformed.
  <p>
  This method wraps cloneAndCheckNames, changing any
  {@code IOException} into a {@code RuntimeException}. This
  method should be used when the object being
  cloned has already been checked, so there should never be any exceptions.
  
  @param names a {@code Collection} with one entry per name.
  Each entry is a {@code List} whose first entry
  is an Integer (the name type, 0-8) and whose second
  entry is a String or a byte array (the name, in
  string or ASN.1 DER encoded form, respectively).
  There can be multiple names of the same type. Null
  is not an acceptable value.
  @return a deep copy of the specified {@code Collection}
  @throws RuntimeException if a parsing error occurs