class MD5Digester {

	private ByteBuffer convertToP4dServerEndingsIfRequired(@Nonnull byte[] sourceBytes,
	                                                       final int start, final int length, @Nullable ClientLineEnding clientLineEnding) {
		ByteBuffer convertedByteBuffer;
		if (isRequireConvertClientOrLocalLineEndingToServerFormat(clientLineEnding)) {
			convertedByteBuffer = ByteBuffer.allocate(length);
			byte p4dServerLineEnding = ClientLineEnding.FST_L_LF_BYTES[0];
			byte[] clientLineEndBytes = ClientLineEnding.getLineEndBytes(clientLineEnding);
			for (int i = start; i < length; i++) {
				if (doesSourceBytesUseSameClientLineEnding(sourceBytes, i, length,
						clientLineEndBytes)) {
					convertedByteBuffer.put(p4dServerLineEnding);
					i += clientLineEndBytes.length - 1;
				} else {
					convertedByteBuffer.put(sourceBytes[i]);
				}
			}
			convertedByteBuffer.flip();
		} else {
			convertedByteBuffer = ByteBuffer.wrap(sourceBytes, start, length);
		}
		return convertedByteBuffer;
	}

	public  MD5Digester();
	public  MD5Digester(@Nonnull int bufferSize);

}