rem: DES_bs_all.s2[index] = bit + DES_bs_all.s1[index >> bit];
add: bit += DES_bs_all.s1[index >> bit]; DES_bs_all.s2[index] = bit < 8 ? bit : 57;
context: void DES_bs_init(int LM){	ARCH_WORD **k;	int round, index, bit;	int p, q, s;	int c;	DES_bs_all.KS_updates = 0;	if (LM)		DES_bs_clear_keys_LM();	else		DES_bs_clear_keys();#if DES_BS_EXPAND	if (LM)		k = DES_bs_all.KS.p;	else		k = DES_bs_all.KSp;#else	k = DES_bs_all.KS.p;#endif	s = 0;	for (round = 0; round < 16; round++) {		s += DES_ROT[round];		for (index = 0; index < 48; index++) {			p = DES_PC2[index];			q = p < 28 ? 0 : 28;			p += s;			while (p >= 28) p -= 28;			bit = DES_PC1[p + q];			bit ^= 070;			bit -= bit >> 3;			bit = 55 - bit;			if (LM) bit = DES_LM_KP[bit];			*k++ = &DES_bs_all.K[bit] START;		}	}/* Initialize the array with right shifts needed to get past the first * non-zero bit in the index. */	for (bit = 0; bit <= 7; bit++)	for (index = 1 << bit; index < 0x100; index += 2 << bit)		DES_bs_all.s1[index] = bit + 1;/* Special case: instead of doing an extra check in *_set_key*(), we * might overrun into DES_bs_all.B, which is harmless as long as the * order of fields is unchanged. */	DES_bs_all.s1[0] = 57;/* The same for second bits. */	for (index = 0; index < 0x100; index++) {		bit = DES_bs_all.s1[index];		DES_bs_all.s2[index] = bit + DES_bs_all.s1[index >> bit];	}	if (LM) {		for (c = 0; c < 0x100; c++)		if (c >= 'a' && c <= 'z')			DES_bs_all.E.extras.u[c] = c & ~0x20;		else			DES_bs_all.E.extras.u[c] = c;	}#if DES_BS_ASM	DES_bs_init_asm();#endif}