static Match[] makeMatches( int len, BitSet versions, 
		MVD mvd, int endPair, int endIndex, 
		boolean multiple, ChunkState state ) throws Exception
	{
		BitSet bs = versions;
		Vector<Match> matches = new Vector<Match>();
		for ( int i=bs.nextSetBit(0); i>=0; i=bs.nextSetBit(i+1) ) 
		{
			// start from one byte after the match
			int offset = endIndex+1;
			// and add on the length of all relevant 
			// pairs up to the first one
			for ( int j=endPair-1;j>=0;j-- )
			{
				Pair p = mvd.pairs.get( j );
				if ( p.contains((short)i) )
				{
					offset += p.length();
				}
			}
			// now offset is len plus the real offset
			offset -= len;
			String shortName = mvd.getVersionShortName( i );
			Match m = new Match( (short)i, offset, len, shortName, 
				state );
			matches.add( m );
			if ( !multiple )
				break;
		}
		Match[] result = new Match[matches.size()];
		matches.toArray( result );
		return result;
	}