docs: private static CharSequence convertReverseDNSIPv6(String str, int suffixStartIndex) throws AddressStringException {
  		StringBuilder builder = new StringBuilder(suffixStartIndex);
  		StringBuilder low = new StringBuilder();
  		StringBuilder high = new StringBuilder();
  		int segCount = 0;
  		for(int i = suffixStartIndex - 1; i >= 0; ) {
  			boolean isRange = false;
  			for(int j = 0; j < 4; j++) {
  				char c1 = str.charAt(i--);
  				if(i >= 0) {
  					char c2 = str.charAt(i--);
  					if(c2 == IPv4Address.SEGMENT_SEPARATOR) {
  						if(c1 == IPAddress.SEGMENT_WILDCARD) {
  							isRange = true;
  							low.append('0');
  							high.append('f');
  						} else {
  							if(isRange) {
  								throw new AddressStringException(str, i + 1);
  							}
  							low.append(c1);
  							high.append(c1);
  						}
  					} else if(c2 == IPAddress.RANGE_SEPARATOR) {
  						high.append(c1);
  						if(i >= 1) {
  							c2 = str.charAt(i--);
  							low.append(c2);
  							boolean isFullRange = (c2 == '0' && c1 == 'f');
  							if(isRange && !isFullRange) {
  								throw new AddressStringException(str, i + 1);
  							}
  							c2 = str.charAt(i--);
  							if(c2 != IPv4Address.SEGMENT_SEPARATOR) {
  								throw new AddressStringException(str, i + 1);
  							}
  						} else {
  							throw new AddressStringException(str, i);
  						}
  						isRange = true;
  					} else {
  						throw new AddressStringException(str, i + 1);
  					}
  				} else if(j < 3) {
  					throw new AddressStringException(str, i + 1);
  				} else {
  					if(c1 == IPAddress.SEGMENT_WILDCARD) {
  						isRange = true;
  						low.append('0');
  						high.append('f');
  					} else {
  						if(isRange) {
  							throw new AddressStringException(str, 0);
  						}
  						low.append(c1);
  						high.append(c1);
  					}
  				}
  			}
  			segCount++;
  			if(builder.length() > 0) {
  				builder.append(IPv6Address.SEGMENT_SEPARATOR);
  			}
  			builder.append(low);
  			if(isRange) {
  				builder.append(IPAddress.RANGE_SEPARATOR).append(high);
  			}
  			low.setLength(0);
  			high.setLength(0);
  		}
  		if(segCount != IPv6Address.SEGMENT_COUNT) {
  			throw new AddressStringException(str, 0);
  		}
  		return builder;
  	}