code: public static EUI64 fromString(String name) {
          long bits = 0;
          char sep = 0;
          for (int n = 0;; ++n) {
              if (n == name.length()) {
                  if (n == 23) {
                      return new EUI64(bits);
                  }
                  else {
                      break;
                  }
              }
              char c = name.charAt(n);
              if (n == 2) {
                  if (c != ':' && c != '-') {
                      break;
                  }
                  sep = c;
              }
              else if ((n - 2) % 3 == 0) {
                  if (c != sep) {
                      break;
                  }
              }
              else if (c >= '0' && c <= '9') {
                  bits = (bits << 4) | (c - '0');
              }
              else if (c >= 'a' && c <= 'f') {
                  bits = (bits << 4) | (10 + c - 'a');
              }
              else if (c >= 'A' && c <= 'F') {
                  bits = (bits << 4) | (10 + c - 'A');
              }
              else {
                  break;
              }
          }
          throw new IllegalArgumentException("Invalid EUI-64 string: " + name);
      }
docs: Creates a {@link EUI64} from a string standard representation in {@code name}. The standard
  representation is eight groups of two hexadecimal digits, separated by hyphens ({@code -}) or
  colons ({@code :}), in transmission order.
  
  @param name The string representation of of an EUI-64.
  @return The EUI-64 represented by the specified {@code name}.
  @throws IllegalArgumentException if {@code name} is not a valid string representation of an
  EUI-64.
  @throws NullPointerException if {@code name} is {@code null}.
  @see #toString()