public int hashCode()
	{
		final int MOD_ADLER = 65521;
		int a = 1;
		int b = 0;
		String nodeStr = Integer.toString(startIndex);
		String offsetStr = Integer.toString(startOffset);
		String vStr = versions.toString();
		int hDataLen = data.length+nodeStr.length()
			+offsetStr.length()+vStr.length();
		char[] hashData = new char[hDataLen];
		int j = 0;
		for ( int i=0;i<nodeStr.length();i++ )
			hashData[j++] = nodeStr.charAt(i);
		for ( int i=0;i<offsetStr.length();i++ )
			hashData[j++] = offsetStr.charAt(i);
		for ( int i=0;i<vStr.length();i++ )
			hashData[j++] = vStr.charAt(i);
		for ( int i=0;i<data.length;i++ )
			hashData[j++] = data[i];
		for ( int i=0;i<hashData.length;++i )
		{
			a = (a+hashData[i])%MOD_ADLER;
			b = (a+b)%MOD_ADLER;
		}
		return (b<<16)|a;
	}