public int highestCrimeAction(Law laws, LegalWarrant W, MOB criminal)
	{
		int highest=0;
		if(CMath.bset(W.punishment(),Law.PUNISHMENTMASK_SEPARATE))
			return W.punishment();
		final List<LegalWarrant> V=getRelevantWarrants(laws.warrants(),W,criminal);
		for(int w2=0;w2<V.size();w2++)
		{
			final LegalWarrant W2=V.get(w2);
			if(!CMath.bset(W2.punishment(),Law.PUNISHMENTMASK_SEPARATE))
			{
				if(((W2.punishment()&Law.PUNISHMENT_MASK)+W2.offenses())>(highest&Law.PUNISHMENT_MASK))
					highest=(W2.punishment()&Law.PUNISHMENT_MASK)+((W2.offenses()<4)?W2.offenses():3);
			}
		}
		for(int w2=0;w2<V.size();w2++)
		{
			final LegalWarrant W2=V.get(w2);
			if((!CMath.bset(W2.punishment(),Law.PUNISHMENTMASK_SEPARATE))
			&&(highest<((W2.punishment()&Law.PUNISHMENT_MASK)+4)))
				highest++;
		}
		if(highest>Law.PUNISHMENT_HIGHEST)
			highest=Law.PUNISHMENT_HIGHEST;
		String cap = W.getPunishmentParm(Law.PUNISHMENTMASK_PUNISHCAP);
		if((cap != null)&&(cap.trim().length()>0))
		{
			cap=cap.trim();
			if(CMath.isInteger(cap))
			{
				if(highest>CMath.s_int(cap))
					highest=CMath.s_int(cap);
			}
			else
			{
				int x=CMParms.indexOf(Law.PUNISHMENT_DESCS,cap.toUpperCase());
				if(highest>x)
					highest=x;
			}
		}
			
		int adjusted=highest;
		if((CMLib.flags().isGood(criminal))&&(adjusted>0))
			adjusted--;
		return adjusted;
	}