code: public static long lowerHexToUnsignedLong(String lowerHex, int index) {
      long result = 0;
      for (int endIndex = Math.min(index + 16, lowerHex.length()); index < endIndex; index++) {
        char c = lowerHex.charAt(index);
        result <<= 4;
        if (c >= '0' && c <= '9') {
          result |= c - '0';
        } else if (c >= 'a' && c <= 'f') {
          result |= c - 'a' + 10;
        } else {
          throw isntLowerHexLong(lowerHex);
        }
      }
      return result;
    }
docs: Parses a 16 character lower-hex string with no prefix into an unsigned long, starting at the
  spe index.