// ************************************************************************** //
//                                                                            //
//    eses                   eses                                             //
//   eses                     eses                                            //
//  eses    eseses  esesese    eses   Embedded Systems Group                  //
//  ese    ese  ese ese         ese                                           //
//  ese    eseseses eseseses    ese   Department of Computer Science          //
//  eses   eses          ese   eses                                           //
//   eses   eseses  eseseses  eses    University of Kaiserslautern            //
//    eses                   eses                                             //
//                                                                            //
// ************************************************************************** //


[256]nat x;
[256]nat y;
[257]nat s;

thread RadixBAddCarryLookahead256 {
    [256]bool g;
    [256]bool p;
    // preliminary sum digits
    s[0] = x[0] + y[0];
    s[1] = x[1] + y[1];
    s[2] = x[2] + y[2];
    s[3] = x[3] + y[3];
    s[4] = x[4] + y[4];
    s[5] = x[5] + y[5];
    s[6] = x[6] + y[6];
    s[7] = x[7] + y[7];
    s[8] = x[8] + y[8];
    s[9] = x[9] + y[9];
    s[10] = x[10] + y[10];
    s[11] = x[11] + y[11];
    s[12] = x[12] + y[12];
    s[13] = x[13] + y[13];
    s[14] = x[14] + y[14];
    s[15] = x[15] + y[15];
    s[16] = x[16] + y[16];
    s[17] = x[17] + y[17];
    s[18] = x[18] + y[18];
    s[19] = x[19] + y[19];
    s[20] = x[20] + y[20];
    s[21] = x[21] + y[21];
    s[22] = x[22] + y[22];
    s[23] = x[23] + y[23];
    s[24] = x[24] + y[24];
    s[25] = x[25] + y[25];
    s[26] = x[26] + y[26];
    s[27] = x[27] + y[27];
    s[28] = x[28] + y[28];
    s[29] = x[29] + y[29];
    s[30] = x[30] + y[30];
    s[31] = x[31] + y[31];
    s[32] = x[32] + y[32];
    s[33] = x[33] + y[33];
    s[34] = x[34] + y[34];
    s[35] = x[35] + y[35];
    s[36] = x[36] + y[36];
    s[37] = x[37] + y[37];
    s[38] = x[38] + y[38];
    s[39] = x[39] + y[39];
    s[40] = x[40] + y[40];
    s[41] = x[41] + y[41];
    s[42] = x[42] + y[42];
    s[43] = x[43] + y[43];
    s[44] = x[44] + y[44];
    s[45] = x[45] + y[45];
    s[46] = x[46] + y[46];
    s[47] = x[47] + y[47];
    s[48] = x[48] + y[48];
    s[49] = x[49] + y[49];
    s[50] = x[50] + y[50];
    s[51] = x[51] + y[51];
    s[52] = x[52] + y[52];
    s[53] = x[53] + y[53];
    s[54] = x[54] + y[54];
    s[55] = x[55] + y[55];
    s[56] = x[56] + y[56];
    s[57] = x[57] + y[57];
    s[58] = x[58] + y[58];
    s[59] = x[59] + y[59];
    s[60] = x[60] + y[60];
    s[61] = x[61] + y[61];
    s[62] = x[62] + y[62];
    s[63] = x[63] + y[63];
    s[64] = x[64] + y[64];
    s[65] = x[65] + y[65];
    s[66] = x[66] + y[66];
    s[67] = x[67] + y[67];
    s[68] = x[68] + y[68];
    s[69] = x[69] + y[69];
    s[70] = x[70] + y[70];
    s[71] = x[71] + y[71];
    s[72] = x[72] + y[72];
    s[73] = x[73] + y[73];
    s[74] = x[74] + y[74];
    s[75] = x[75] + y[75];
    s[76] = x[76] + y[76];
    s[77] = x[77] + y[77];
    s[78] = x[78] + y[78];
    s[79] = x[79] + y[79];
    s[80] = x[80] + y[80];
    s[81] = x[81] + y[81];
    s[82] = x[82] + y[82];
    s[83] = x[83] + y[83];
    s[84] = x[84] + y[84];
    s[85] = x[85] + y[85];
    s[86] = x[86] + y[86];
    s[87] = x[87] + y[87];
    s[88] = x[88] + y[88];
    s[89] = x[89] + y[89];
    s[90] = x[90] + y[90];
    s[91] = x[91] + y[91];
    s[92] = x[92] + y[92];
    s[93] = x[93] + y[93];
    s[94] = x[94] + y[94];
    s[95] = x[95] + y[95];
    s[96] = x[96] + y[96];
    s[97] = x[97] + y[97];
    s[98] = x[98] + y[98];
    s[99] = x[99] + y[99];
    s[100] = x[100] + y[100];
    s[101] = x[101] + y[101];
    s[102] = x[102] + y[102];
    s[103] = x[103] + y[103];
    s[104] = x[104] + y[104];
    s[105] = x[105] + y[105];
    s[106] = x[106] + y[106];
    s[107] = x[107] + y[107];
    s[108] = x[108] + y[108];
    s[109] = x[109] + y[109];
    s[110] = x[110] + y[110];
    s[111] = x[111] + y[111];
    s[112] = x[112] + y[112];
    s[113] = x[113] + y[113];
    s[114] = x[114] + y[114];
    s[115] = x[115] + y[115];
    s[116] = x[116] + y[116];
    s[117] = x[117] + y[117];
    s[118] = x[118] + y[118];
    s[119] = x[119] + y[119];
    s[120] = x[120] + y[120];
    s[121] = x[121] + y[121];
    s[122] = x[122] + y[122];
    s[123] = x[123] + y[123];
    s[124] = x[124] + y[124];
    s[125] = x[125] + y[125];
    s[126] = x[126] + y[126];
    s[127] = x[127] + y[127];
    s[128] = x[128] + y[128];
    s[129] = x[129] + y[129];
    s[130] = x[130] + y[130];
    s[131] = x[131] + y[131];
    s[132] = x[132] + y[132];
    s[133] = x[133] + y[133];
    s[134] = x[134] + y[134];
    s[135] = x[135] + y[135];
    s[136] = x[136] + y[136];
    s[137] = x[137] + y[137];
    s[138] = x[138] + y[138];
    s[139] = x[139] + y[139];
    s[140] = x[140] + y[140];
    s[141] = x[141] + y[141];
    s[142] = x[142] + y[142];
    s[143] = x[143] + y[143];
    s[144] = x[144] + y[144];
    s[145] = x[145] + y[145];
    s[146] = x[146] + y[146];
    s[147] = x[147] + y[147];
    s[148] = x[148] + y[148];
    s[149] = x[149] + y[149];
    s[150] = x[150] + y[150];
    s[151] = x[151] + y[151];
    s[152] = x[152] + y[152];
    s[153] = x[153] + y[153];
    s[154] = x[154] + y[154];
    s[155] = x[155] + y[155];
    s[156] = x[156] + y[156];
    s[157] = x[157] + y[157];
    s[158] = x[158] + y[158];
    s[159] = x[159] + y[159];
    s[160] = x[160] + y[160];
    s[161] = x[161] + y[161];
    s[162] = x[162] + y[162];
    s[163] = x[163] + y[163];
    s[164] = x[164] + y[164];
    s[165] = x[165] + y[165];
    s[166] = x[166] + y[166];
    s[167] = x[167] + y[167];
    s[168] = x[168] + y[168];
    s[169] = x[169] + y[169];
    s[170] = x[170] + y[170];
    s[171] = x[171] + y[171];
    s[172] = x[172] + y[172];
    s[173] = x[173] + y[173];
    s[174] = x[174] + y[174];
    s[175] = x[175] + y[175];
    s[176] = x[176] + y[176];
    s[177] = x[177] + y[177];
    s[178] = x[178] + y[178];
    s[179] = x[179] + y[179];
    s[180] = x[180] + y[180];
    s[181] = x[181] + y[181];
    s[182] = x[182] + y[182];
    s[183] = x[183] + y[183];
    s[184] = x[184] + y[184];
    s[185] = x[185] + y[185];
    s[186] = x[186] + y[186];
    s[187] = x[187] + y[187];
    s[188] = x[188] + y[188];
    s[189] = x[189] + y[189];
    s[190] = x[190] + y[190];
    s[191] = x[191] + y[191];
    s[192] = x[192] + y[192];
    s[193] = x[193] + y[193];
    s[194] = x[194] + y[194];
    s[195] = x[195] + y[195];
    s[196] = x[196] + y[196];
    s[197] = x[197] + y[197];
    s[198] = x[198] + y[198];
    s[199] = x[199] + y[199];
    s[200] = x[200] + y[200];
    s[201] = x[201] + y[201];
    s[202] = x[202] + y[202];
    s[203] = x[203] + y[203];
    s[204] = x[204] + y[204];
    s[205] = x[205] + y[205];
    s[206] = x[206] + y[206];
    s[207] = x[207] + y[207];
    s[208] = x[208] + y[208];
    s[209] = x[209] + y[209];
    s[210] = x[210] + y[210];
    s[211] = x[211] + y[211];
    s[212] = x[212] + y[212];
    s[213] = x[213] + y[213];
    s[214] = x[214] + y[214];
    s[215] = x[215] + y[215];
    s[216] = x[216] + y[216];
    s[217] = x[217] + y[217];
    s[218] = x[218] + y[218];
    s[219] = x[219] + y[219];
    s[220] = x[220] + y[220];
    s[221] = x[221] + y[221];
    s[222] = x[222] + y[222];
    s[223] = x[223] + y[223];
    s[224] = x[224] + y[224];
    s[225] = x[225] + y[225];
    s[226] = x[226] + y[226];
    s[227] = x[227] + y[227];
    s[228] = x[228] + y[228];
    s[229] = x[229] + y[229];
    s[230] = x[230] + y[230];
    s[231] = x[231] + y[231];
    s[232] = x[232] + y[232];
    s[233] = x[233] + y[233];
    s[234] = x[234] + y[234];
    s[235] = x[235] + y[235];
    s[236] = x[236] + y[236];
    s[237] = x[237] + y[237];
    s[238] = x[238] + y[238];
    s[239] = x[239] + y[239];
    s[240] = x[240] + y[240];
    s[241] = x[241] + y[241];
    s[242] = x[242] + y[242];
    s[243] = x[243] + y[243];
    s[244] = x[244] + y[244];
    s[245] = x[245] + y[245];
    s[246] = x[246] + y[246];
    s[247] = x[247] + y[247];
    s[248] = x[248] + y[248];
    s[249] = x[249] + y[249];
    s[250] = x[250] + y[250];
    s[251] = x[251] + y[251];
    s[252] = x[252] + y[252];
    s[253] = x[253] + y[253];
    s[254] = x[254] + y[254];
    s[255] = x[255] + y[255];
    // initial generate conditions
    g[0] = s[0]>255;
    g[1] = s[1]>255;
    g[2] = s[2]>255;
    g[3] = s[3]>255;
    g[4] = s[4]>255;
    g[5] = s[5]>255;
    g[6] = s[6]>255;
    g[7] = s[7]>255;
    g[8] = s[8]>255;
    g[9] = s[9]>255;
    g[10] = s[10]>255;
    g[11] = s[11]>255;
    g[12] = s[12]>255;
    g[13] = s[13]>255;
    g[14] = s[14]>255;
    g[15] = s[15]>255;
    g[16] = s[16]>255;
    g[17] = s[17]>255;
    g[18] = s[18]>255;
    g[19] = s[19]>255;
    g[20] = s[20]>255;
    g[21] = s[21]>255;
    g[22] = s[22]>255;
    g[23] = s[23]>255;
    g[24] = s[24]>255;
    g[25] = s[25]>255;
    g[26] = s[26]>255;
    g[27] = s[27]>255;
    g[28] = s[28]>255;
    g[29] = s[29]>255;
    g[30] = s[30]>255;
    g[31] = s[31]>255;
    g[32] = s[32]>255;
    g[33] = s[33]>255;
    g[34] = s[34]>255;
    g[35] = s[35]>255;
    g[36] = s[36]>255;
    g[37] = s[37]>255;
    g[38] = s[38]>255;
    g[39] = s[39]>255;
    g[40] = s[40]>255;
    g[41] = s[41]>255;
    g[42] = s[42]>255;
    g[43] = s[43]>255;
    g[44] = s[44]>255;
    g[45] = s[45]>255;
    g[46] = s[46]>255;
    g[47] = s[47]>255;
    g[48] = s[48]>255;
    g[49] = s[49]>255;
    g[50] = s[50]>255;
    g[51] = s[51]>255;
    g[52] = s[52]>255;
    g[53] = s[53]>255;
    g[54] = s[54]>255;
    g[55] = s[55]>255;
    g[56] = s[56]>255;
    g[57] = s[57]>255;
    g[58] = s[58]>255;
    g[59] = s[59]>255;
    g[60] = s[60]>255;
    g[61] = s[61]>255;
    g[62] = s[62]>255;
    g[63] = s[63]>255;
    g[64] = s[64]>255;
    g[65] = s[65]>255;
    g[66] = s[66]>255;
    g[67] = s[67]>255;
    g[68] = s[68]>255;
    g[69] = s[69]>255;
    g[70] = s[70]>255;
    g[71] = s[71]>255;
    g[72] = s[72]>255;
    g[73] = s[73]>255;
    g[74] = s[74]>255;
    g[75] = s[75]>255;
    g[76] = s[76]>255;
    g[77] = s[77]>255;
    g[78] = s[78]>255;
    g[79] = s[79]>255;
    g[80] = s[80]>255;
    g[81] = s[81]>255;
    g[82] = s[82]>255;
    g[83] = s[83]>255;
    g[84] = s[84]>255;
    g[85] = s[85]>255;
    g[86] = s[86]>255;
    g[87] = s[87]>255;
    g[88] = s[88]>255;
    g[89] = s[89]>255;
    g[90] = s[90]>255;
    g[91] = s[91]>255;
    g[92] = s[92]>255;
    g[93] = s[93]>255;
    g[94] = s[94]>255;
    g[95] = s[95]>255;
    g[96] = s[96]>255;
    g[97] = s[97]>255;
    g[98] = s[98]>255;
    g[99] = s[99]>255;
    g[100] = s[100]>255;
    g[101] = s[101]>255;
    g[102] = s[102]>255;
    g[103] = s[103]>255;
    g[104] = s[104]>255;
    g[105] = s[105]>255;
    g[106] = s[106]>255;
    g[107] = s[107]>255;
    g[108] = s[108]>255;
    g[109] = s[109]>255;
    g[110] = s[110]>255;
    g[111] = s[111]>255;
    g[112] = s[112]>255;
    g[113] = s[113]>255;
    g[114] = s[114]>255;
    g[115] = s[115]>255;
    g[116] = s[116]>255;
    g[117] = s[117]>255;
    g[118] = s[118]>255;
    g[119] = s[119]>255;
    g[120] = s[120]>255;
    g[121] = s[121]>255;
    g[122] = s[122]>255;
    g[123] = s[123]>255;
    g[124] = s[124]>255;
    g[125] = s[125]>255;
    g[126] = s[126]>255;
    g[127] = s[127]>255;
    g[128] = s[128]>255;
    g[129] = s[129]>255;
    g[130] = s[130]>255;
    g[131] = s[131]>255;
    g[132] = s[132]>255;
    g[133] = s[133]>255;
    g[134] = s[134]>255;
    g[135] = s[135]>255;
    g[136] = s[136]>255;
    g[137] = s[137]>255;
    g[138] = s[138]>255;
    g[139] = s[139]>255;
    g[140] = s[140]>255;
    g[141] = s[141]>255;
    g[142] = s[142]>255;
    g[143] = s[143]>255;
    g[144] = s[144]>255;
    g[145] = s[145]>255;
    g[146] = s[146]>255;
    g[147] = s[147]>255;
    g[148] = s[148]>255;
    g[149] = s[149]>255;
    g[150] = s[150]>255;
    g[151] = s[151]>255;
    g[152] = s[152]>255;
    g[153] = s[153]>255;
    g[154] = s[154]>255;
    g[155] = s[155]>255;
    g[156] = s[156]>255;
    g[157] = s[157]>255;
    g[158] = s[158]>255;
    g[159] = s[159]>255;
    g[160] = s[160]>255;
    g[161] = s[161]>255;
    g[162] = s[162]>255;
    g[163] = s[163]>255;
    g[164] = s[164]>255;
    g[165] = s[165]>255;
    g[166] = s[166]>255;
    g[167] = s[167]>255;
    g[168] = s[168]>255;
    g[169] = s[169]>255;
    g[170] = s[170]>255;
    g[171] = s[171]>255;
    g[172] = s[172]>255;
    g[173] = s[173]>255;
    g[174] = s[174]>255;
    g[175] = s[175]>255;
    g[176] = s[176]>255;
    g[177] = s[177]>255;
    g[178] = s[178]>255;
    g[179] = s[179]>255;
    g[180] = s[180]>255;
    g[181] = s[181]>255;
    g[182] = s[182]>255;
    g[183] = s[183]>255;
    g[184] = s[184]>255;
    g[185] = s[185]>255;
    g[186] = s[186]>255;
    g[187] = s[187]>255;
    g[188] = s[188]>255;
    g[189] = s[189]>255;
    g[190] = s[190]>255;
    g[191] = s[191]>255;
    g[192] = s[192]>255;
    g[193] = s[193]>255;
    g[194] = s[194]>255;
    g[195] = s[195]>255;
    g[196] = s[196]>255;
    g[197] = s[197]>255;
    g[198] = s[198]>255;
    g[199] = s[199]>255;
    g[200] = s[200]>255;
    g[201] = s[201]>255;
    g[202] = s[202]>255;
    g[203] = s[203]>255;
    g[204] = s[204]>255;
    g[205] = s[205]>255;
    g[206] = s[206]>255;
    g[207] = s[207]>255;
    g[208] = s[208]>255;
    g[209] = s[209]>255;
    g[210] = s[210]>255;
    g[211] = s[211]>255;
    g[212] = s[212]>255;
    g[213] = s[213]>255;
    g[214] = s[214]>255;
    g[215] = s[215]>255;
    g[216] = s[216]>255;
    g[217] = s[217]>255;
    g[218] = s[218]>255;
    g[219] = s[219]>255;
    g[220] = s[220]>255;
    g[221] = s[221]>255;
    g[222] = s[222]>255;
    g[223] = s[223]>255;
    g[224] = s[224]>255;
    g[225] = s[225]>255;
    g[226] = s[226]>255;
    g[227] = s[227]>255;
    g[228] = s[228]>255;
    g[229] = s[229]>255;
    g[230] = s[230]>255;
    g[231] = s[231]>255;
    g[232] = s[232]>255;
    g[233] = s[233]>255;
    g[234] = s[234]>255;
    g[235] = s[235]>255;
    g[236] = s[236]>255;
    g[237] = s[237]>255;
    g[238] = s[238]>255;
    g[239] = s[239]>255;
    g[240] = s[240]>255;
    g[241] = s[241]>255;
    g[242] = s[242]>255;
    g[243] = s[243]>255;
    g[244] = s[244]>255;
    g[245] = s[245]>255;
    g[246] = s[246]>255;
    g[247] = s[247]>255;
    g[248] = s[248]>255;
    g[249] = s[249]>255;
    g[250] = s[250]>255;
    g[251] = s[251]>255;
    g[252] = s[252]>255;
    g[253] = s[253]>255;
    g[254] = s[254]>255;
    g[255] = s[255]>255;
    // initial propagate conditions
    p[0] = s[0]==255;
    p[1] = s[1]==255;
    p[2] = s[2]==255;
    p[3] = s[3]==255;
    p[4] = s[4]==255;
    p[5] = s[5]==255;
    p[6] = s[6]==255;
    p[7] = s[7]==255;
    p[8] = s[8]==255;
    p[9] = s[9]==255;
    p[10] = s[10]==255;
    p[11] = s[11]==255;
    p[12] = s[12]==255;
    p[13] = s[13]==255;
    p[14] = s[14]==255;
    p[15] = s[15]==255;
    p[16] = s[16]==255;
    p[17] = s[17]==255;
    p[18] = s[18]==255;
    p[19] = s[19]==255;
    p[20] = s[20]==255;
    p[21] = s[21]==255;
    p[22] = s[22]==255;
    p[23] = s[23]==255;
    p[24] = s[24]==255;
    p[25] = s[25]==255;
    p[26] = s[26]==255;
    p[27] = s[27]==255;
    p[28] = s[28]==255;
    p[29] = s[29]==255;
    p[30] = s[30]==255;
    p[31] = s[31]==255;
    p[32] = s[32]==255;
    p[33] = s[33]==255;
    p[34] = s[34]==255;
    p[35] = s[35]==255;
    p[36] = s[36]==255;
    p[37] = s[37]==255;
    p[38] = s[38]==255;
    p[39] = s[39]==255;
    p[40] = s[40]==255;
    p[41] = s[41]==255;
    p[42] = s[42]==255;
    p[43] = s[43]==255;
    p[44] = s[44]==255;
    p[45] = s[45]==255;
    p[46] = s[46]==255;
    p[47] = s[47]==255;
    p[48] = s[48]==255;
    p[49] = s[49]==255;
    p[50] = s[50]==255;
    p[51] = s[51]==255;
    p[52] = s[52]==255;
    p[53] = s[53]==255;
    p[54] = s[54]==255;
    p[55] = s[55]==255;
    p[56] = s[56]==255;
    p[57] = s[57]==255;
    p[58] = s[58]==255;
    p[59] = s[59]==255;
    p[60] = s[60]==255;
    p[61] = s[61]==255;
    p[62] = s[62]==255;
    p[63] = s[63]==255;
    p[64] = s[64]==255;
    p[65] = s[65]==255;
    p[66] = s[66]==255;
    p[67] = s[67]==255;
    p[68] = s[68]==255;
    p[69] = s[69]==255;
    p[70] = s[70]==255;
    p[71] = s[71]==255;
    p[72] = s[72]==255;
    p[73] = s[73]==255;
    p[74] = s[74]==255;
    p[75] = s[75]==255;
    p[76] = s[76]==255;
    p[77] = s[77]==255;
    p[78] = s[78]==255;
    p[79] = s[79]==255;
    p[80] = s[80]==255;
    p[81] = s[81]==255;
    p[82] = s[82]==255;
    p[83] = s[83]==255;
    p[84] = s[84]==255;
    p[85] = s[85]==255;
    p[86] = s[86]==255;
    p[87] = s[87]==255;
    p[88] = s[88]==255;
    p[89] = s[89]==255;
    p[90] = s[90]==255;
    p[91] = s[91]==255;
    p[92] = s[92]==255;
    p[93] = s[93]==255;
    p[94] = s[94]==255;
    p[95] = s[95]==255;
    p[96] = s[96]==255;
    p[97] = s[97]==255;
    p[98] = s[98]==255;
    p[99] = s[99]==255;
    p[100] = s[100]==255;
    p[101] = s[101]==255;
    p[102] = s[102]==255;
    p[103] = s[103]==255;
    p[104] = s[104]==255;
    p[105] = s[105]==255;
    p[106] = s[106]==255;
    p[107] = s[107]==255;
    p[108] = s[108]==255;
    p[109] = s[109]==255;
    p[110] = s[110]==255;
    p[111] = s[111]==255;
    p[112] = s[112]==255;
    p[113] = s[113]==255;
    p[114] = s[114]==255;
    p[115] = s[115]==255;
    p[116] = s[116]==255;
    p[117] = s[117]==255;
    p[118] = s[118]==255;
    p[119] = s[119]==255;
    p[120] = s[120]==255;
    p[121] = s[121]==255;
    p[122] = s[122]==255;
    p[123] = s[123]==255;
    p[124] = s[124]==255;
    p[125] = s[125]==255;
    p[126] = s[126]==255;
    p[127] = s[127]==255;
    p[128] = s[128]==255;
    p[129] = s[129]==255;
    p[130] = s[130]==255;
    p[131] = s[131]==255;
    p[132] = s[132]==255;
    p[133] = s[133]==255;
    p[134] = s[134]==255;
    p[135] = s[135]==255;
    p[136] = s[136]==255;
    p[137] = s[137]==255;
    p[138] = s[138]==255;
    p[139] = s[139]==255;
    p[140] = s[140]==255;
    p[141] = s[141]==255;
    p[142] = s[142]==255;
    p[143] = s[143]==255;
    p[144] = s[144]==255;
    p[145] = s[145]==255;
    p[146] = s[146]==255;
    p[147] = s[147]==255;
    p[148] = s[148]==255;
    p[149] = s[149]==255;
    p[150] = s[150]==255;
    p[151] = s[151]==255;
    p[152] = s[152]==255;
    p[153] = s[153]==255;
    p[154] = s[154]==255;
    p[155] = s[155]==255;
    p[156] = s[156]==255;
    p[157] = s[157]==255;
    p[158] = s[158]==255;
    p[159] = s[159]==255;
    p[160] = s[160]==255;
    p[161] = s[161]==255;
    p[162] = s[162]==255;
    p[163] = s[163]==255;
    p[164] = s[164]==255;
    p[165] = s[165]==255;
    p[166] = s[166]==255;
    p[167] = s[167]==255;
    p[168] = s[168]==255;
    p[169] = s[169]==255;
    p[170] = s[170]==255;
    p[171] = s[171]==255;
    p[172] = s[172]==255;
    p[173] = s[173]==255;
    p[174] = s[174]==255;
    p[175] = s[175]==255;
    p[176] = s[176]==255;
    p[177] = s[177]==255;
    p[178] = s[178]==255;
    p[179] = s[179]==255;
    p[180] = s[180]==255;
    p[181] = s[181]==255;
    p[182] = s[182]==255;
    p[183] = s[183]==255;
    p[184] = s[184]==255;
    p[185] = s[185]==255;
    p[186] = s[186]==255;
    p[187] = s[187]==255;
    p[188] = s[188]==255;
    p[189] = s[189]==255;
    p[190] = s[190]==255;
    p[191] = s[191]==255;
    p[192] = s[192]==255;
    p[193] = s[193]==255;
    p[194] = s[194]==255;
    p[195] = s[195]==255;
    p[196] = s[196]==255;
    p[197] = s[197]==255;
    p[198] = s[198]==255;
    p[199] = s[199]==255;
    p[200] = s[200]==255;
    p[201] = s[201]==255;
    p[202] = s[202]==255;
    p[203] = s[203]==255;
    p[204] = s[204]==255;
    p[205] = s[205]==255;
    p[206] = s[206]==255;
    p[207] = s[207]==255;
    p[208] = s[208]==255;
    p[209] = s[209]==255;
    p[210] = s[210]==255;
    p[211] = s[211]==255;
    p[212] = s[212]==255;
    p[213] = s[213]==255;
    p[214] = s[214]==255;
    p[215] = s[215]==255;
    p[216] = s[216]==255;
    p[217] = s[217]==255;
    p[218] = s[218]==255;
    p[219] = s[219]==255;
    p[220] = s[220]==255;
    p[221] = s[221]==255;
    p[222] = s[222]==255;
    p[223] = s[223]==255;
    p[224] = s[224]==255;
    p[225] = s[225]==255;
    p[226] = s[226]==255;
    p[227] = s[227]==255;
    p[228] = s[228]==255;
    p[229] = s[229]==255;
    p[230] = s[230]==255;
    p[231] = s[231]==255;
    p[232] = s[232]==255;
    p[233] = s[233]==255;
    p[234] = s[234]==255;
    p[235] = s[235]==255;
    p[236] = s[236]==255;
    p[237] = s[237]==255;
    p[238] = s[238]==255;
    p[239] = s[239]==255;
    p[240] = s[240]==255;
    p[241] = s[241]==255;
    p[242] = s[242]==255;
    p[243] = s[243]==255;
    p[244] = s[244]==255;
    p[245] = s[245]==255;
    p[246] = s[246]==255;
    p[247] = s[247]==255;
    p[248] = s[248]==255;
    p[249] = s[249]==255;
    p[250] = s[250]==255;
    p[251] = s[251]==255;
    p[252] = s[252]==255;
    p[253] = s[253]==255;
    p[254] = s[254]==255;
    p[255] = s[255]==255;
    // carry propagation prefix tree
    // up-level 1
    g[1] = g[0] & p[1] | g[1];
    p[1] = p[1] & p[0];
    g[3] = g[2] & p[3] | g[3];
    p[3] = p[3] & p[2];
    g[5] = g[4] & p[5] | g[5];
    p[5] = p[5] & p[4];
    g[7] = g[6] & p[7] | g[7];
    p[7] = p[7] & p[6];
    g[9] = g[8] & p[9] | g[9];
    p[9] = p[9] & p[8];
    g[11] = g[10] & p[11] | g[11];
    p[11] = p[11] & p[10];
    g[13] = g[12] & p[13] | g[13];
    p[13] = p[13] & p[12];
    g[15] = g[14] & p[15] | g[15];
    p[15] = p[15] & p[14];
    g[17] = g[16] & p[17] | g[17];
    p[17] = p[17] & p[16];
    g[19] = g[18] & p[19] | g[19];
    p[19] = p[19] & p[18];
    g[21] = g[20] & p[21] | g[21];
    p[21] = p[21] & p[20];
    g[23] = g[22] & p[23] | g[23];
    p[23] = p[23] & p[22];
    g[25] = g[24] & p[25] | g[25];
    p[25] = p[25] & p[24];
    g[27] = g[26] & p[27] | g[27];
    p[27] = p[27] & p[26];
    g[29] = g[28] & p[29] | g[29];
    p[29] = p[29] & p[28];
    g[31] = g[30] & p[31] | g[31];
    p[31] = p[31] & p[30];
    g[33] = g[32] & p[33] | g[33];
    p[33] = p[33] & p[32];
    g[35] = g[34] & p[35] | g[35];
    p[35] = p[35] & p[34];
    g[37] = g[36] & p[37] | g[37];
    p[37] = p[37] & p[36];
    g[39] = g[38] & p[39] | g[39];
    p[39] = p[39] & p[38];
    g[41] = g[40] & p[41] | g[41];
    p[41] = p[41] & p[40];
    g[43] = g[42] & p[43] | g[43];
    p[43] = p[43] & p[42];
    g[45] = g[44] & p[45] | g[45];
    p[45] = p[45] & p[44];
    g[47] = g[46] & p[47] | g[47];
    p[47] = p[47] & p[46];
    g[49] = g[48] & p[49] | g[49];
    p[49] = p[49] & p[48];
    g[51] = g[50] & p[51] | g[51];
    p[51] = p[51] & p[50];
    g[53] = g[52] & p[53] | g[53];
    p[53] = p[53] & p[52];
    g[55] = g[54] & p[55] | g[55];
    p[55] = p[55] & p[54];
    g[57] = g[56] & p[57] | g[57];
    p[57] = p[57] & p[56];
    g[59] = g[58] & p[59] | g[59];
    p[59] = p[59] & p[58];
    g[61] = g[60] & p[61] | g[61];
    p[61] = p[61] & p[60];
    g[63] = g[62] & p[63] | g[63];
    p[63] = p[63] & p[62];
    g[65] = g[64] & p[65] | g[65];
    p[65] = p[65] & p[64];
    g[67] = g[66] & p[67] | g[67];
    p[67] = p[67] & p[66];
    g[69] = g[68] & p[69] | g[69];
    p[69] = p[69] & p[68];
    g[71] = g[70] & p[71] | g[71];
    p[71] = p[71] & p[70];
    g[73] = g[72] & p[73] | g[73];
    p[73] = p[73] & p[72];
    g[75] = g[74] & p[75] | g[75];
    p[75] = p[75] & p[74];
    g[77] = g[76] & p[77] | g[77];
    p[77] = p[77] & p[76];
    g[79] = g[78] & p[79] | g[79];
    p[79] = p[79] & p[78];
    g[81] = g[80] & p[81] | g[81];
    p[81] = p[81] & p[80];
    g[83] = g[82] & p[83] | g[83];
    p[83] = p[83] & p[82];
    g[85] = g[84] & p[85] | g[85];
    p[85] = p[85] & p[84];
    g[87] = g[86] & p[87] | g[87];
    p[87] = p[87] & p[86];
    g[89] = g[88] & p[89] | g[89];
    p[89] = p[89] & p[88];
    g[91] = g[90] & p[91] | g[91];
    p[91] = p[91] & p[90];
    g[93] = g[92] & p[93] | g[93];
    p[93] = p[93] & p[92];
    g[95] = g[94] & p[95] | g[95];
    p[95] = p[95] & p[94];
    g[97] = g[96] & p[97] | g[97];
    p[97] = p[97] & p[96];
    g[99] = g[98] & p[99] | g[99];
    p[99] = p[99] & p[98];
    g[101] = g[100] & p[101] | g[101];
    p[101] = p[101] & p[100];
    g[103] = g[102] & p[103] | g[103];
    p[103] = p[103] & p[102];
    g[105] = g[104] & p[105] | g[105];
    p[105] = p[105] & p[104];
    g[107] = g[106] & p[107] | g[107];
    p[107] = p[107] & p[106];
    g[109] = g[108] & p[109] | g[109];
    p[109] = p[109] & p[108];
    g[111] = g[110] & p[111] | g[111];
    p[111] = p[111] & p[110];
    g[113] = g[112] & p[113] | g[113];
    p[113] = p[113] & p[112];
    g[115] = g[114] & p[115] | g[115];
    p[115] = p[115] & p[114];
    g[117] = g[116] & p[117] | g[117];
    p[117] = p[117] & p[116];
    g[119] = g[118] & p[119] | g[119];
    p[119] = p[119] & p[118];
    g[121] = g[120] & p[121] | g[121];
    p[121] = p[121] & p[120];
    g[123] = g[122] & p[123] | g[123];
    p[123] = p[123] & p[122];
    g[125] = g[124] & p[125] | g[125];
    p[125] = p[125] & p[124];
    g[127] = g[126] & p[127] | g[127];
    p[127] = p[127] & p[126];
    g[129] = g[128] & p[129] | g[129];
    p[129] = p[129] & p[128];
    g[131] = g[130] & p[131] | g[131];
    p[131] = p[131] & p[130];
    g[133] = g[132] & p[133] | g[133];
    p[133] = p[133] & p[132];
    g[135] = g[134] & p[135] | g[135];
    p[135] = p[135] & p[134];
    g[137] = g[136] & p[137] | g[137];
    p[137] = p[137] & p[136];
    g[139] = g[138] & p[139] | g[139];
    p[139] = p[139] & p[138];
    g[141] = g[140] & p[141] | g[141];
    p[141] = p[141] & p[140];
    g[143] = g[142] & p[143] | g[143];
    p[143] = p[143] & p[142];
    g[145] = g[144] & p[145] | g[145];
    p[145] = p[145] & p[144];
    g[147] = g[146] & p[147] | g[147];
    p[147] = p[147] & p[146];
    g[149] = g[148] & p[149] | g[149];
    p[149] = p[149] & p[148];
    g[151] = g[150] & p[151] | g[151];
    p[151] = p[151] & p[150];
    g[153] = g[152] & p[153] | g[153];
    p[153] = p[153] & p[152];
    g[155] = g[154] & p[155] | g[155];
    p[155] = p[155] & p[154];
    g[157] = g[156] & p[157] | g[157];
    p[157] = p[157] & p[156];
    g[159] = g[158] & p[159] | g[159];
    p[159] = p[159] & p[158];
    g[161] = g[160] & p[161] | g[161];
    p[161] = p[161] & p[160];
    g[163] = g[162] & p[163] | g[163];
    p[163] = p[163] & p[162];
    g[165] = g[164] & p[165] | g[165];
    p[165] = p[165] & p[164];
    g[167] = g[166] & p[167] | g[167];
    p[167] = p[167] & p[166];
    g[169] = g[168] & p[169] | g[169];
    p[169] = p[169] & p[168];
    g[171] = g[170] & p[171] | g[171];
    p[171] = p[171] & p[170];
    g[173] = g[172] & p[173] | g[173];
    p[173] = p[173] & p[172];
    g[175] = g[174] & p[175] | g[175];
    p[175] = p[175] & p[174];
    g[177] = g[176] & p[177] | g[177];
    p[177] = p[177] & p[176];
    g[179] = g[178] & p[179] | g[179];
    p[179] = p[179] & p[178];
    g[181] = g[180] & p[181] | g[181];
    p[181] = p[181] & p[180];
    g[183] = g[182] & p[183] | g[183];
    p[183] = p[183] & p[182];
    g[185] = g[184] & p[185] | g[185];
    p[185] = p[185] & p[184];
    g[187] = g[186] & p[187] | g[187];
    p[187] = p[187] & p[186];
    g[189] = g[188] & p[189] | g[189];
    p[189] = p[189] & p[188];
    g[191] = g[190] & p[191] | g[191];
    p[191] = p[191] & p[190];
    g[193] = g[192] & p[193] | g[193];
    p[193] = p[193] & p[192];
    g[195] = g[194] & p[195] | g[195];
    p[195] = p[195] & p[194];
    g[197] = g[196] & p[197] | g[197];
    p[197] = p[197] & p[196];
    g[199] = g[198] & p[199] | g[199];
    p[199] = p[199] & p[198];
    g[201] = g[200] & p[201] | g[201];
    p[201] = p[201] & p[200];
    g[203] = g[202] & p[203] | g[203];
    p[203] = p[203] & p[202];
    g[205] = g[204] & p[205] | g[205];
    p[205] = p[205] & p[204];
    g[207] = g[206] & p[207] | g[207];
    p[207] = p[207] & p[206];
    g[209] = g[208] & p[209] | g[209];
    p[209] = p[209] & p[208];
    g[211] = g[210] & p[211] | g[211];
    p[211] = p[211] & p[210];
    g[213] = g[212] & p[213] | g[213];
    p[213] = p[213] & p[212];
    g[215] = g[214] & p[215] | g[215];
    p[215] = p[215] & p[214];
    g[217] = g[216] & p[217] | g[217];
    p[217] = p[217] & p[216];
    g[219] = g[218] & p[219] | g[219];
    p[219] = p[219] & p[218];
    g[221] = g[220] & p[221] | g[221];
    p[221] = p[221] & p[220];
    g[223] = g[222] & p[223] | g[223];
    p[223] = p[223] & p[222];
    g[225] = g[224] & p[225] | g[225];
    p[225] = p[225] & p[224];
    g[227] = g[226] & p[227] | g[227];
    p[227] = p[227] & p[226];
    g[229] = g[228] & p[229] | g[229];
    p[229] = p[229] & p[228];
    g[231] = g[230] & p[231] | g[231];
    p[231] = p[231] & p[230];
    g[233] = g[232] & p[233] | g[233];
    p[233] = p[233] & p[232];
    g[235] = g[234] & p[235] | g[235];
    p[235] = p[235] & p[234];
    g[237] = g[236] & p[237] | g[237];
    p[237] = p[237] & p[236];
    g[239] = g[238] & p[239] | g[239];
    p[239] = p[239] & p[238];
    g[241] = g[240] & p[241] | g[241];
    p[241] = p[241] & p[240];
    g[243] = g[242] & p[243] | g[243];
    p[243] = p[243] & p[242];
    g[245] = g[244] & p[245] | g[245];
    p[245] = p[245] & p[244];
    g[247] = g[246] & p[247] | g[247];
    p[247] = p[247] & p[246];
    g[249] = g[248] & p[249] | g[249];
    p[249] = p[249] & p[248];
    g[251] = g[250] & p[251] | g[251];
    p[251] = p[251] & p[250];
    g[253] = g[252] & p[253] | g[253];
    p[253] = p[253] & p[252];
    g[255] = g[254] & p[255] | g[255];
    p[255] = p[255] & p[254];
    // up-level 2
    g[3] = g[1] & p[3] | g[3];
    p[3] = p[3] & p[1];
    g[7] = g[5] & p[7] | g[7];
    p[7] = p[7] & p[5];
    g[11] = g[9] & p[11] | g[11];
    p[11] = p[11] & p[9];
    g[15] = g[13] & p[15] | g[15];
    p[15] = p[15] & p[13];
    g[19] = g[17] & p[19] | g[19];
    p[19] = p[19] & p[17];
    g[23] = g[21] & p[23] | g[23];
    p[23] = p[23] & p[21];
    g[27] = g[25] & p[27] | g[27];
    p[27] = p[27] & p[25];
    g[31] = g[29] & p[31] | g[31];
    p[31] = p[31] & p[29];
    g[35] = g[33] & p[35] | g[35];
    p[35] = p[35] & p[33];
    g[39] = g[37] & p[39] | g[39];
    p[39] = p[39] & p[37];
    g[43] = g[41] & p[43] | g[43];
    p[43] = p[43] & p[41];
    g[47] = g[45] & p[47] | g[47];
    p[47] = p[47] & p[45];
    g[51] = g[49] & p[51] | g[51];
    p[51] = p[51] & p[49];
    g[55] = g[53] & p[55] | g[55];
    p[55] = p[55] & p[53];
    g[59] = g[57] & p[59] | g[59];
    p[59] = p[59] & p[57];
    g[63] = g[61] & p[63] | g[63];
    p[63] = p[63] & p[61];
    g[67] = g[65] & p[67] | g[67];
    p[67] = p[67] & p[65];
    g[71] = g[69] & p[71] | g[71];
    p[71] = p[71] & p[69];
    g[75] = g[73] & p[75] | g[75];
    p[75] = p[75] & p[73];
    g[79] = g[77] & p[79] | g[79];
    p[79] = p[79] & p[77];
    g[83] = g[81] & p[83] | g[83];
    p[83] = p[83] & p[81];
    g[87] = g[85] & p[87] | g[87];
    p[87] = p[87] & p[85];
    g[91] = g[89] & p[91] | g[91];
    p[91] = p[91] & p[89];
    g[95] = g[93] & p[95] | g[95];
    p[95] = p[95] & p[93];
    g[99] = g[97] & p[99] | g[99];
    p[99] = p[99] & p[97];
    g[103] = g[101] & p[103] | g[103];
    p[103] = p[103] & p[101];
    g[107] = g[105] & p[107] | g[107];
    p[107] = p[107] & p[105];
    g[111] = g[109] & p[111] | g[111];
    p[111] = p[111] & p[109];
    g[115] = g[113] & p[115] | g[115];
    p[115] = p[115] & p[113];
    g[119] = g[117] & p[119] | g[119];
    p[119] = p[119] & p[117];
    g[123] = g[121] & p[123] | g[123];
    p[123] = p[123] & p[121];
    g[127] = g[125] & p[127] | g[127];
    p[127] = p[127] & p[125];
    g[131] = g[129] & p[131] | g[131];
    p[131] = p[131] & p[129];
    g[135] = g[133] & p[135] | g[135];
    p[135] = p[135] & p[133];
    g[139] = g[137] & p[139] | g[139];
    p[139] = p[139] & p[137];
    g[143] = g[141] & p[143] | g[143];
    p[143] = p[143] & p[141];
    g[147] = g[145] & p[147] | g[147];
    p[147] = p[147] & p[145];
    g[151] = g[149] & p[151] | g[151];
    p[151] = p[151] & p[149];
    g[155] = g[153] & p[155] | g[155];
    p[155] = p[155] & p[153];
    g[159] = g[157] & p[159] | g[159];
    p[159] = p[159] & p[157];
    g[163] = g[161] & p[163] | g[163];
    p[163] = p[163] & p[161];
    g[167] = g[165] & p[167] | g[167];
    p[167] = p[167] & p[165];
    g[171] = g[169] & p[171] | g[171];
    p[171] = p[171] & p[169];
    g[175] = g[173] & p[175] | g[175];
    p[175] = p[175] & p[173];
    g[179] = g[177] & p[179] | g[179];
    p[179] = p[179] & p[177];
    g[183] = g[181] & p[183] | g[183];
    p[183] = p[183] & p[181];
    g[187] = g[185] & p[187] | g[187];
    p[187] = p[187] & p[185];
    g[191] = g[189] & p[191] | g[191];
    p[191] = p[191] & p[189];
    g[195] = g[193] & p[195] | g[195];
    p[195] = p[195] & p[193];
    g[199] = g[197] & p[199] | g[199];
    p[199] = p[199] & p[197];
    g[203] = g[201] & p[203] | g[203];
    p[203] = p[203] & p[201];
    g[207] = g[205] & p[207] | g[207];
    p[207] = p[207] & p[205];
    g[211] = g[209] & p[211] | g[211];
    p[211] = p[211] & p[209];
    g[215] = g[213] & p[215] | g[215];
    p[215] = p[215] & p[213];
    g[219] = g[217] & p[219] | g[219];
    p[219] = p[219] & p[217];
    g[223] = g[221] & p[223] | g[223];
    p[223] = p[223] & p[221];
    g[227] = g[225] & p[227] | g[227];
    p[227] = p[227] & p[225];
    g[231] = g[229] & p[231] | g[231];
    p[231] = p[231] & p[229];
    g[235] = g[233] & p[235] | g[235];
    p[235] = p[235] & p[233];
    g[239] = g[237] & p[239] | g[239];
    p[239] = p[239] & p[237];
    g[243] = g[241] & p[243] | g[243];
    p[243] = p[243] & p[241];
    g[247] = g[245] & p[247] | g[247];
    p[247] = p[247] & p[245];
    g[251] = g[249] & p[251] | g[251];
    p[251] = p[251] & p[249];
    g[255] = g[253] & p[255] | g[255];
    p[255] = p[255] & p[253];
    // up-level 3
    g[7] = g[3] & p[7] | g[7];
    p[7] = p[7] & p[3];
    g[15] = g[11] & p[15] | g[15];
    p[15] = p[15] & p[11];
    g[23] = g[19] & p[23] | g[23];
    p[23] = p[23] & p[19];
    g[31] = g[27] & p[31] | g[31];
    p[31] = p[31] & p[27];
    g[39] = g[35] & p[39] | g[39];
    p[39] = p[39] & p[35];
    g[47] = g[43] & p[47] | g[47];
    p[47] = p[47] & p[43];
    g[55] = g[51] & p[55] | g[55];
    p[55] = p[55] & p[51];
    g[63] = g[59] & p[63] | g[63];
    p[63] = p[63] & p[59];
    g[71] = g[67] & p[71] | g[71];
    p[71] = p[71] & p[67];
    g[79] = g[75] & p[79] | g[79];
    p[79] = p[79] & p[75];
    g[87] = g[83] & p[87] | g[87];
    p[87] = p[87] & p[83];
    g[95] = g[91] & p[95] | g[95];
    p[95] = p[95] & p[91];
    g[103] = g[99] & p[103] | g[103];
    p[103] = p[103] & p[99];
    g[111] = g[107] & p[111] | g[111];
    p[111] = p[111] & p[107];
    g[119] = g[115] & p[119] | g[119];
    p[119] = p[119] & p[115];
    g[127] = g[123] & p[127] | g[127];
    p[127] = p[127] & p[123];
    g[135] = g[131] & p[135] | g[135];
    p[135] = p[135] & p[131];
    g[143] = g[139] & p[143] | g[143];
    p[143] = p[143] & p[139];
    g[151] = g[147] & p[151] | g[151];
    p[151] = p[151] & p[147];
    g[159] = g[155] & p[159] | g[159];
    p[159] = p[159] & p[155];
    g[167] = g[163] & p[167] | g[167];
    p[167] = p[167] & p[163];
    g[175] = g[171] & p[175] | g[175];
    p[175] = p[175] & p[171];
    g[183] = g[179] & p[183] | g[183];
    p[183] = p[183] & p[179];
    g[191] = g[187] & p[191] | g[191];
    p[191] = p[191] & p[187];
    g[199] = g[195] & p[199] | g[199];
    p[199] = p[199] & p[195];
    g[207] = g[203] & p[207] | g[207];
    p[207] = p[207] & p[203];
    g[215] = g[211] & p[215] | g[215];
    p[215] = p[215] & p[211];
    g[223] = g[219] & p[223] | g[223];
    p[223] = p[223] & p[219];
    g[231] = g[227] & p[231] | g[231];
    p[231] = p[231] & p[227];
    g[239] = g[235] & p[239] | g[239];
    p[239] = p[239] & p[235];
    g[247] = g[243] & p[247] | g[247];
    p[247] = p[247] & p[243];
    g[255] = g[251] & p[255] | g[255];
    p[255] = p[255] & p[251];
    // up-level 4
    g[15] = g[7] & p[15] | g[15];
    p[15] = p[15] & p[7];
    g[31] = g[23] & p[31] | g[31];
    p[31] = p[31] & p[23];
    g[47] = g[39] & p[47] | g[47];
    p[47] = p[47] & p[39];
    g[63] = g[55] & p[63] | g[63];
    p[63] = p[63] & p[55];
    g[79] = g[71] & p[79] | g[79];
    p[79] = p[79] & p[71];
    g[95] = g[87] & p[95] | g[95];
    p[95] = p[95] & p[87];
    g[111] = g[103] & p[111] | g[111];
    p[111] = p[111] & p[103];
    g[127] = g[119] & p[127] | g[127];
    p[127] = p[127] & p[119];
    g[143] = g[135] & p[143] | g[143];
    p[143] = p[143] & p[135];
    g[159] = g[151] & p[159] | g[159];
    p[159] = p[159] & p[151];
    g[175] = g[167] & p[175] | g[175];
    p[175] = p[175] & p[167];
    g[191] = g[183] & p[191] | g[191];
    p[191] = p[191] & p[183];
    g[207] = g[199] & p[207] | g[207];
    p[207] = p[207] & p[199];
    g[223] = g[215] & p[223] | g[223];
    p[223] = p[223] & p[215];
    g[239] = g[231] & p[239] | g[239];
    p[239] = p[239] & p[231];
    g[255] = g[247] & p[255] | g[255];
    p[255] = p[255] & p[247];
    // up-level 5
    g[31] = g[15] & p[31] | g[31];
    p[31] = p[31] & p[15];
    g[63] = g[47] & p[63] | g[63];
    p[63] = p[63] & p[47];
    g[95] = g[79] & p[95] | g[95];
    p[95] = p[95] & p[79];
    g[127] = g[111] & p[127] | g[127];
    p[127] = p[127] & p[111];
    g[159] = g[143] & p[159] | g[159];
    p[159] = p[159] & p[143];
    g[191] = g[175] & p[191] | g[191];
    p[191] = p[191] & p[175];
    g[223] = g[207] & p[223] | g[223];
    p[223] = p[223] & p[207];
    g[255] = g[239] & p[255] | g[255];
    p[255] = p[255] & p[239];
    // up-level 6
    g[63] = g[31] & p[63] | g[63];
    p[63] = p[63] & p[31];
    g[127] = g[95] & p[127] | g[127];
    p[127] = p[127] & p[95];
    g[191] = g[159] & p[191] | g[191];
    p[191] = p[191] & p[159];
    g[255] = g[223] & p[255] | g[255];
    p[255] = p[255] & p[223];
    // up-level 7
    g[127] = g[63] & p[127] | g[127];
    p[127] = p[127] & p[63];
    g[255] = g[191] & p[255] | g[255];
    p[255] = p[255] & p[191];
    // up-level 8
    g[255] = g[127] & p[255] | g[255];
    p[255] = p[255] & p[127];
    // down-level 10
    // down-level 11
    g[191] = g[127] & p[191] | g[191];
    p[191] = p[191] & p[127];
    // down-level 12
    g[95] = g[63] & p[95] | g[95];
    p[95] = p[95] & p[63];
    g[159] = g[127] & p[159] | g[159];
    p[159] = p[159] & p[127];
    g[223] = g[191] & p[223] | g[223];
    p[223] = p[223] & p[191];
    // down-level 13
    g[47] = g[31] & p[47] | g[47];
    p[47] = p[47] & p[31];
    g[79] = g[63] & p[79] | g[79];
    p[79] = p[79] & p[63];
    g[111] = g[95] & p[111] | g[111];
    p[111] = p[111] & p[95];
    g[143] = g[127] & p[143] | g[143];
    p[143] = p[143] & p[127];
    g[175] = g[159] & p[175] | g[175];
    p[175] = p[175] & p[159];
    g[207] = g[191] & p[207] | g[207];
    p[207] = p[207] & p[191];
    g[239] = g[223] & p[239] | g[239];
    p[239] = p[239] & p[223];
    // down-level 14
    g[23] = g[15] & p[23] | g[23];
    p[23] = p[23] & p[15];
    g[39] = g[31] & p[39] | g[39];
    p[39] = p[39] & p[31];
    g[55] = g[47] & p[55] | g[55];
    p[55] = p[55] & p[47];
    g[71] = g[63] & p[71] | g[71];
    p[71] = p[71] & p[63];
    g[87] = g[79] & p[87] | g[87];
    p[87] = p[87] & p[79];
    g[103] = g[95] & p[103] | g[103];
    p[103] = p[103] & p[95];
    g[119] = g[111] & p[119] | g[119];
    p[119] = p[119] & p[111];
    g[135] = g[127] & p[135] | g[135];
    p[135] = p[135] & p[127];
    g[151] = g[143] & p[151] | g[151];
    p[151] = p[151] & p[143];
    g[167] = g[159] & p[167] | g[167];
    p[167] = p[167] & p[159];
    g[183] = g[175] & p[183] | g[183];
    p[183] = p[183] & p[175];
    g[199] = g[191] & p[199] | g[199];
    p[199] = p[199] & p[191];
    g[215] = g[207] & p[215] | g[215];
    p[215] = p[215] & p[207];
    g[231] = g[223] & p[231] | g[231];
    p[231] = p[231] & p[223];
    g[247] = g[239] & p[247] | g[247];
    p[247] = p[247] & p[239];
    // down-level 15
    g[11] = g[7] & p[11] | g[11];
    p[11] = p[11] & p[7];
    g[19] = g[15] & p[19] | g[19];
    p[19] = p[19] & p[15];
    g[27] = g[23] & p[27] | g[27];
    p[27] = p[27] & p[23];
    g[35] = g[31] & p[35] | g[35];
    p[35] = p[35] & p[31];
    g[43] = g[39] & p[43] | g[43];
    p[43] = p[43] & p[39];
    g[51] = g[47] & p[51] | g[51];
    p[51] = p[51] & p[47];
    g[59] = g[55] & p[59] | g[59];
    p[59] = p[59] & p[55];
    g[67] = g[63] & p[67] | g[67];
    p[67] = p[67] & p[63];
    g[75] = g[71] & p[75] | g[75];
    p[75] = p[75] & p[71];
    g[83] = g[79] & p[83] | g[83];
    p[83] = p[83] & p[79];
    g[91] = g[87] & p[91] | g[91];
    p[91] = p[91] & p[87];
    g[99] = g[95] & p[99] | g[99];
    p[99] = p[99] & p[95];
    g[107] = g[103] & p[107] | g[107];
    p[107] = p[107] & p[103];
    g[115] = g[111] & p[115] | g[115];
    p[115] = p[115] & p[111];
    g[123] = g[119] & p[123] | g[123];
    p[123] = p[123] & p[119];
    g[131] = g[127] & p[131] | g[131];
    p[131] = p[131] & p[127];
    g[139] = g[135] & p[139] | g[139];
    p[139] = p[139] & p[135];
    g[147] = g[143] & p[147] | g[147];
    p[147] = p[147] & p[143];
    g[155] = g[151] & p[155] | g[155];
    p[155] = p[155] & p[151];
    g[163] = g[159] & p[163] | g[163];
    p[163] = p[163] & p[159];
    g[171] = g[167] & p[171] | g[171];
    p[171] = p[171] & p[167];
    g[179] = g[175] & p[179] | g[179];
    p[179] = p[179] & p[175];
    g[187] = g[183] & p[187] | g[187];
    p[187] = p[187] & p[183];
    g[195] = g[191] & p[195] | g[195];
    p[195] = p[195] & p[191];
    g[203] = g[199] & p[203] | g[203];
    p[203] = p[203] & p[199];
    g[211] = g[207] & p[211] | g[211];
    p[211] = p[211] & p[207];
    g[219] = g[215] & p[219] | g[219];
    p[219] = p[219] & p[215];
    g[227] = g[223] & p[227] | g[227];
    p[227] = p[227] & p[223];
    g[235] = g[231] & p[235] | g[235];
    p[235] = p[235] & p[231];
    g[243] = g[239] & p[243] | g[243];
    p[243] = p[243] & p[239];
    g[251] = g[247] & p[251] | g[251];
    p[251] = p[251] & p[247];
    // down-level 16
    g[5] = g[3] & p[5] | g[5];
    p[5] = p[5] & p[3];
    g[9] = g[7] & p[9] | g[9];
    p[9] = p[9] & p[7];
    g[13] = g[11] & p[13] | g[13];
    p[13] = p[13] & p[11];
    g[17] = g[15] & p[17] | g[17];
    p[17] = p[17] & p[15];
    g[21] = g[19] & p[21] | g[21];
    p[21] = p[21] & p[19];
    g[25] = g[23] & p[25] | g[25];
    p[25] = p[25] & p[23];
    g[29] = g[27] & p[29] | g[29];
    p[29] = p[29] & p[27];
    g[33] = g[31] & p[33] | g[33];
    p[33] = p[33] & p[31];
    g[37] = g[35] & p[37] | g[37];
    p[37] = p[37] & p[35];
    g[41] = g[39] & p[41] | g[41];
    p[41] = p[41] & p[39];
    g[45] = g[43] & p[45] | g[45];
    p[45] = p[45] & p[43];
    g[49] = g[47] & p[49] | g[49];
    p[49] = p[49] & p[47];
    g[53] = g[51] & p[53] | g[53];
    p[53] = p[53] & p[51];
    g[57] = g[55] & p[57] | g[57];
    p[57] = p[57] & p[55];
    g[61] = g[59] & p[61] | g[61];
    p[61] = p[61] & p[59];
    g[65] = g[63] & p[65] | g[65];
    p[65] = p[65] & p[63];
    g[69] = g[67] & p[69] | g[69];
    p[69] = p[69] & p[67];
    g[73] = g[71] & p[73] | g[73];
    p[73] = p[73] & p[71];
    g[77] = g[75] & p[77] | g[77];
    p[77] = p[77] & p[75];
    g[81] = g[79] & p[81] | g[81];
    p[81] = p[81] & p[79];
    g[85] = g[83] & p[85] | g[85];
    p[85] = p[85] & p[83];
    g[89] = g[87] & p[89] | g[89];
    p[89] = p[89] & p[87];
    g[93] = g[91] & p[93] | g[93];
    p[93] = p[93] & p[91];
    g[97] = g[95] & p[97] | g[97];
    p[97] = p[97] & p[95];
    g[101] = g[99] & p[101] | g[101];
    p[101] = p[101] & p[99];
    g[105] = g[103] & p[105] | g[105];
    p[105] = p[105] & p[103];
    g[109] = g[107] & p[109] | g[109];
    p[109] = p[109] & p[107];
    g[113] = g[111] & p[113] | g[113];
    p[113] = p[113] & p[111];
    g[117] = g[115] & p[117] | g[117];
    p[117] = p[117] & p[115];
    g[121] = g[119] & p[121] | g[121];
    p[121] = p[121] & p[119];
    g[125] = g[123] & p[125] | g[125];
    p[125] = p[125] & p[123];
    g[129] = g[127] & p[129] | g[129];
    p[129] = p[129] & p[127];
    g[133] = g[131] & p[133] | g[133];
    p[133] = p[133] & p[131];
    g[137] = g[135] & p[137] | g[137];
    p[137] = p[137] & p[135];
    g[141] = g[139] & p[141] | g[141];
    p[141] = p[141] & p[139];
    g[145] = g[143] & p[145] | g[145];
    p[145] = p[145] & p[143];
    g[149] = g[147] & p[149] | g[149];
    p[149] = p[149] & p[147];
    g[153] = g[151] & p[153] | g[153];
    p[153] = p[153] & p[151];
    g[157] = g[155] & p[157] | g[157];
    p[157] = p[157] & p[155];
    g[161] = g[159] & p[161] | g[161];
    p[161] = p[161] & p[159];
    g[165] = g[163] & p[165] | g[165];
    p[165] = p[165] & p[163];
    g[169] = g[167] & p[169] | g[169];
    p[169] = p[169] & p[167];
    g[173] = g[171] & p[173] | g[173];
    p[173] = p[173] & p[171];
    g[177] = g[175] & p[177] | g[177];
    p[177] = p[177] & p[175];
    g[181] = g[179] & p[181] | g[181];
    p[181] = p[181] & p[179];
    g[185] = g[183] & p[185] | g[185];
    p[185] = p[185] & p[183];
    g[189] = g[187] & p[189] | g[189];
    p[189] = p[189] & p[187];
    g[193] = g[191] & p[193] | g[193];
    p[193] = p[193] & p[191];
    g[197] = g[195] & p[197] | g[197];
    p[197] = p[197] & p[195];
    g[201] = g[199] & p[201] | g[201];
    p[201] = p[201] & p[199];
    g[205] = g[203] & p[205] | g[205];
    p[205] = p[205] & p[203];
    g[209] = g[207] & p[209] | g[209];
    p[209] = p[209] & p[207];
    g[213] = g[211] & p[213] | g[213];
    p[213] = p[213] & p[211];
    g[217] = g[215] & p[217] | g[217];
    p[217] = p[217] & p[215];
    g[221] = g[219] & p[221] | g[221];
    p[221] = p[221] & p[219];
    g[225] = g[223] & p[225] | g[225];
    p[225] = p[225] & p[223];
    g[229] = g[227] & p[229] | g[229];
    p[229] = p[229] & p[227];
    g[233] = g[231] & p[233] | g[233];
    p[233] = p[233] & p[231];
    g[237] = g[235] & p[237] | g[237];
    p[237] = p[237] & p[235];
    g[241] = g[239] & p[241] | g[241];
    p[241] = p[241] & p[239];
    g[245] = g[243] & p[245] | g[245];
    p[245] = p[245] & p[243];
    g[249] = g[247] & p[249] | g[249];
    p[249] = p[249] & p[247];
    g[253] = g[251] & p[253] | g[253];
    p[253] = p[253] & p[251];
    // down-level 17
    g[2] = g[1] & p[2] | g[2];
    p[2] = p[2] & p[1];
    g[4] = g[3] & p[4] | g[4];
    p[4] = p[4] & p[3];
    g[6] = g[5] & p[6] | g[6];
    p[6] = p[6] & p[5];
    g[8] = g[7] & p[8] | g[8];
    p[8] = p[8] & p[7];
    g[10] = g[9] & p[10] | g[10];
    p[10] = p[10] & p[9];
    g[12] = g[11] & p[12] | g[12];
    p[12] = p[12] & p[11];
    g[14] = g[13] & p[14] | g[14];
    p[14] = p[14] & p[13];
    g[16] = g[15] & p[16] | g[16];
    p[16] = p[16] & p[15];
    g[18] = g[17] & p[18] | g[18];
    p[18] = p[18] & p[17];
    g[20] = g[19] & p[20] | g[20];
    p[20] = p[20] & p[19];
    g[22] = g[21] & p[22] | g[22];
    p[22] = p[22] & p[21];
    g[24] = g[23] & p[24] | g[24];
    p[24] = p[24] & p[23];
    g[26] = g[25] & p[26] | g[26];
    p[26] = p[26] & p[25];
    g[28] = g[27] & p[28] | g[28];
    p[28] = p[28] & p[27];
    g[30] = g[29] & p[30] | g[30];
    p[30] = p[30] & p[29];
    g[32] = g[31] & p[32] | g[32];
    p[32] = p[32] & p[31];
    g[34] = g[33] & p[34] | g[34];
    p[34] = p[34] & p[33];
    g[36] = g[35] & p[36] | g[36];
    p[36] = p[36] & p[35];
    g[38] = g[37] & p[38] | g[38];
    p[38] = p[38] & p[37];
    g[40] = g[39] & p[40] | g[40];
    p[40] = p[40] & p[39];
    g[42] = g[41] & p[42] | g[42];
    p[42] = p[42] & p[41];
    g[44] = g[43] & p[44] | g[44];
    p[44] = p[44] & p[43];
    g[46] = g[45] & p[46] | g[46];
    p[46] = p[46] & p[45];
    g[48] = g[47] & p[48] | g[48];
    p[48] = p[48] & p[47];
    g[50] = g[49] & p[50] | g[50];
    p[50] = p[50] & p[49];
    g[52] = g[51] & p[52] | g[52];
    p[52] = p[52] & p[51];
    g[54] = g[53] & p[54] | g[54];
    p[54] = p[54] & p[53];
    g[56] = g[55] & p[56] | g[56];
    p[56] = p[56] & p[55];
    g[58] = g[57] & p[58] | g[58];
    p[58] = p[58] & p[57];
    g[60] = g[59] & p[60] | g[60];
    p[60] = p[60] & p[59];
    g[62] = g[61] & p[62] | g[62];
    p[62] = p[62] & p[61];
    g[64] = g[63] & p[64] | g[64];
    p[64] = p[64] & p[63];
    g[66] = g[65] & p[66] | g[66];
    p[66] = p[66] & p[65];
    g[68] = g[67] & p[68] | g[68];
    p[68] = p[68] & p[67];
    g[70] = g[69] & p[70] | g[70];
    p[70] = p[70] & p[69];
    g[72] = g[71] & p[72] | g[72];
    p[72] = p[72] & p[71];
    g[74] = g[73] & p[74] | g[74];
    p[74] = p[74] & p[73];
    g[76] = g[75] & p[76] | g[76];
    p[76] = p[76] & p[75];
    g[78] = g[77] & p[78] | g[78];
    p[78] = p[78] & p[77];
    g[80] = g[79] & p[80] | g[80];
    p[80] = p[80] & p[79];
    g[82] = g[81] & p[82] | g[82];
    p[82] = p[82] & p[81];
    g[84] = g[83] & p[84] | g[84];
    p[84] = p[84] & p[83];
    g[86] = g[85] & p[86] | g[86];
    p[86] = p[86] & p[85];
    g[88] = g[87] & p[88] | g[88];
    p[88] = p[88] & p[87];
    g[90] = g[89] & p[90] | g[90];
    p[90] = p[90] & p[89];
    g[92] = g[91] & p[92] | g[92];
    p[92] = p[92] & p[91];
    g[94] = g[93] & p[94] | g[94];
    p[94] = p[94] & p[93];
    g[96] = g[95] & p[96] | g[96];
    p[96] = p[96] & p[95];
    g[98] = g[97] & p[98] | g[98];
    p[98] = p[98] & p[97];
    g[100] = g[99] & p[100] | g[100];
    p[100] = p[100] & p[99];
    g[102] = g[101] & p[102] | g[102];
    p[102] = p[102] & p[101];
    g[104] = g[103] & p[104] | g[104];
    p[104] = p[104] & p[103];
    g[106] = g[105] & p[106] | g[106];
    p[106] = p[106] & p[105];
    g[108] = g[107] & p[108] | g[108];
    p[108] = p[108] & p[107];
    g[110] = g[109] & p[110] | g[110];
    p[110] = p[110] & p[109];
    g[112] = g[111] & p[112] | g[112];
    p[112] = p[112] & p[111];
    g[114] = g[113] & p[114] | g[114];
    p[114] = p[114] & p[113];
    g[116] = g[115] & p[116] | g[116];
    p[116] = p[116] & p[115];
    g[118] = g[117] & p[118] | g[118];
    p[118] = p[118] & p[117];
    g[120] = g[119] & p[120] | g[120];
    p[120] = p[120] & p[119];
    g[122] = g[121] & p[122] | g[122];
    p[122] = p[122] & p[121];
    g[124] = g[123] & p[124] | g[124];
    p[124] = p[124] & p[123];
    g[126] = g[125] & p[126] | g[126];
    p[126] = p[126] & p[125];
    g[128] = g[127] & p[128] | g[128];
    p[128] = p[128] & p[127];
    g[130] = g[129] & p[130] | g[130];
    p[130] = p[130] & p[129];
    g[132] = g[131] & p[132] | g[132];
    p[132] = p[132] & p[131];
    g[134] = g[133] & p[134] | g[134];
    p[134] = p[134] & p[133];
    g[136] = g[135] & p[136] | g[136];
    p[136] = p[136] & p[135];
    g[138] = g[137] & p[138] | g[138];
    p[138] = p[138] & p[137];
    g[140] = g[139] & p[140] | g[140];
    p[140] = p[140] & p[139];
    g[142] = g[141] & p[142] | g[142];
    p[142] = p[142] & p[141];
    g[144] = g[143] & p[144] | g[144];
    p[144] = p[144] & p[143];
    g[146] = g[145] & p[146] | g[146];
    p[146] = p[146] & p[145];
    g[148] = g[147] & p[148] | g[148];
    p[148] = p[148] & p[147];
    g[150] = g[149] & p[150] | g[150];
    p[150] = p[150] & p[149];
    g[152] = g[151] & p[152] | g[152];
    p[152] = p[152] & p[151];
    g[154] = g[153] & p[154] | g[154];
    p[154] = p[154] & p[153];
    g[156] = g[155] & p[156] | g[156];
    p[156] = p[156] & p[155];
    g[158] = g[157] & p[158] | g[158];
    p[158] = p[158] & p[157];
    g[160] = g[159] & p[160] | g[160];
    p[160] = p[160] & p[159];
    g[162] = g[161] & p[162] | g[162];
    p[162] = p[162] & p[161];
    g[164] = g[163] & p[164] | g[164];
    p[164] = p[164] & p[163];
    g[166] = g[165] & p[166] | g[166];
    p[166] = p[166] & p[165];
    g[168] = g[167] & p[168] | g[168];
    p[168] = p[168] & p[167];
    g[170] = g[169] & p[170] | g[170];
    p[170] = p[170] & p[169];
    g[172] = g[171] & p[172] | g[172];
    p[172] = p[172] & p[171];
    g[174] = g[173] & p[174] | g[174];
    p[174] = p[174] & p[173];
    g[176] = g[175] & p[176] | g[176];
    p[176] = p[176] & p[175];
    g[178] = g[177] & p[178] | g[178];
    p[178] = p[178] & p[177];
    g[180] = g[179] & p[180] | g[180];
    p[180] = p[180] & p[179];
    g[182] = g[181] & p[182] | g[182];
    p[182] = p[182] & p[181];
    g[184] = g[183] & p[184] | g[184];
    p[184] = p[184] & p[183];
    g[186] = g[185] & p[186] | g[186];
    p[186] = p[186] & p[185];
    g[188] = g[187] & p[188] | g[188];
    p[188] = p[188] & p[187];
    g[190] = g[189] & p[190] | g[190];
    p[190] = p[190] & p[189];
    g[192] = g[191] & p[192] | g[192];
    p[192] = p[192] & p[191];
    g[194] = g[193] & p[194] | g[194];
    p[194] = p[194] & p[193];
    g[196] = g[195] & p[196] | g[196];
    p[196] = p[196] & p[195];
    g[198] = g[197] & p[198] | g[198];
    p[198] = p[198] & p[197];
    g[200] = g[199] & p[200] | g[200];
    p[200] = p[200] & p[199];
    g[202] = g[201] & p[202] | g[202];
    p[202] = p[202] & p[201];
    g[204] = g[203] & p[204] | g[204];
    p[204] = p[204] & p[203];
    g[206] = g[205] & p[206] | g[206];
    p[206] = p[206] & p[205];
    g[208] = g[207] & p[208] | g[208];
    p[208] = p[208] & p[207];
    g[210] = g[209] & p[210] | g[210];
    p[210] = p[210] & p[209];
    g[212] = g[211] & p[212] | g[212];
    p[212] = p[212] & p[211];
    g[214] = g[213] & p[214] | g[214];
    p[214] = p[214] & p[213];
    g[216] = g[215] & p[216] | g[216];
    p[216] = p[216] & p[215];
    g[218] = g[217] & p[218] | g[218];
    p[218] = p[218] & p[217];
    g[220] = g[219] & p[220] | g[220];
    p[220] = p[220] & p[219];
    g[222] = g[221] & p[222] | g[222];
    p[222] = p[222] & p[221];
    g[224] = g[223] & p[224] | g[224];
    p[224] = p[224] & p[223];
    g[226] = g[225] & p[226] | g[226];
    p[226] = p[226] & p[225];
    g[228] = g[227] & p[228] | g[228];
    p[228] = p[228] & p[227];
    g[230] = g[229] & p[230] | g[230];
    p[230] = p[230] & p[229];
    g[232] = g[231] & p[232] | g[232];
    p[232] = p[232] & p[231];
    g[234] = g[233] & p[234] | g[234];
    p[234] = p[234] & p[233];
    g[236] = g[235] & p[236] | g[236];
    p[236] = p[236] & p[235];
    g[238] = g[237] & p[238] | g[238];
    p[238] = p[238] & p[237];
    g[240] = g[239] & p[240] | g[240];
    p[240] = p[240] & p[239];
    g[242] = g[241] & p[242] | g[242];
    p[242] = p[242] & p[241];
    g[244] = g[243] & p[244] | g[244];
    p[244] = p[244] & p[243];
    g[246] = g[245] & p[246] | g[246];
    p[246] = p[246] & p[245];
    g[248] = g[247] & p[248] | g[248];
    p[248] = p[248] & p[247];
    g[250] = g[249] & p[250] | g[250];
    p[250] = p[250] & p[249];
    g[252] = g[251] & p[252] | g[252];
    p[252] = p[252] & p[251];
    g[254] = g[253] & p[254] | g[254];
    p[254] = p[254] & p[253];
    // compute final sum digits
    s[0] = s[0] % 256;
    s[1] = (s[1]+(g[0]?1:0)) % 256;
    s[2] = (s[2]+(g[1]?1:0)) % 256;
    s[3] = (s[3]+(g[2]?1:0)) % 256;
    s[4] = (s[4]+(g[3]?1:0)) % 256;
    s[5] = (s[5]+(g[4]?1:0)) % 256;
    s[6] = (s[6]+(g[5]?1:0)) % 256;
    s[7] = (s[7]+(g[6]?1:0)) % 256;
    s[8] = (s[8]+(g[7]?1:0)) % 256;
    s[9] = (s[9]+(g[8]?1:0)) % 256;
    s[10] = (s[10]+(g[9]?1:0)) % 256;
    s[11] = (s[11]+(g[10]?1:0)) % 256;
    s[12] = (s[12]+(g[11]?1:0)) % 256;
    s[13] = (s[13]+(g[12]?1:0)) % 256;
    s[14] = (s[14]+(g[13]?1:0)) % 256;
    s[15] = (s[15]+(g[14]?1:0)) % 256;
    s[16] = (s[16]+(g[15]?1:0)) % 256;
    s[17] = (s[17]+(g[16]?1:0)) % 256;
    s[18] = (s[18]+(g[17]?1:0)) % 256;
    s[19] = (s[19]+(g[18]?1:0)) % 256;
    s[20] = (s[20]+(g[19]?1:0)) % 256;
    s[21] = (s[21]+(g[20]?1:0)) % 256;
    s[22] = (s[22]+(g[21]?1:0)) % 256;
    s[23] = (s[23]+(g[22]?1:0)) % 256;
    s[24] = (s[24]+(g[23]?1:0)) % 256;
    s[25] = (s[25]+(g[24]?1:0)) % 256;
    s[26] = (s[26]+(g[25]?1:0)) % 256;
    s[27] = (s[27]+(g[26]?1:0)) % 256;
    s[28] = (s[28]+(g[27]?1:0)) % 256;
    s[29] = (s[29]+(g[28]?1:0)) % 256;
    s[30] = (s[30]+(g[29]?1:0)) % 256;
    s[31] = (s[31]+(g[30]?1:0)) % 256;
    s[32] = (s[32]+(g[31]?1:0)) % 256;
    s[33] = (s[33]+(g[32]?1:0)) % 256;
    s[34] = (s[34]+(g[33]?1:0)) % 256;
    s[35] = (s[35]+(g[34]?1:0)) % 256;
    s[36] = (s[36]+(g[35]?1:0)) % 256;
    s[37] = (s[37]+(g[36]?1:0)) % 256;
    s[38] = (s[38]+(g[37]?1:0)) % 256;
    s[39] = (s[39]+(g[38]?1:0)) % 256;
    s[40] = (s[40]+(g[39]?1:0)) % 256;
    s[41] = (s[41]+(g[40]?1:0)) % 256;
    s[42] = (s[42]+(g[41]?1:0)) % 256;
    s[43] = (s[43]+(g[42]?1:0)) % 256;
    s[44] = (s[44]+(g[43]?1:0)) % 256;
    s[45] = (s[45]+(g[44]?1:0)) % 256;
    s[46] = (s[46]+(g[45]?1:0)) % 256;
    s[47] = (s[47]+(g[46]?1:0)) % 256;
    s[48] = (s[48]+(g[47]?1:0)) % 256;
    s[49] = (s[49]+(g[48]?1:0)) % 256;
    s[50] = (s[50]+(g[49]?1:0)) % 256;
    s[51] = (s[51]+(g[50]?1:0)) % 256;
    s[52] = (s[52]+(g[51]?1:0)) % 256;
    s[53] = (s[53]+(g[52]?1:0)) % 256;
    s[54] = (s[54]+(g[53]?1:0)) % 256;
    s[55] = (s[55]+(g[54]?1:0)) % 256;
    s[56] = (s[56]+(g[55]?1:0)) % 256;
    s[57] = (s[57]+(g[56]?1:0)) % 256;
    s[58] = (s[58]+(g[57]?1:0)) % 256;
    s[59] = (s[59]+(g[58]?1:0)) % 256;
    s[60] = (s[60]+(g[59]?1:0)) % 256;
    s[61] = (s[61]+(g[60]?1:0)) % 256;
    s[62] = (s[62]+(g[61]?1:0)) % 256;
    s[63] = (s[63]+(g[62]?1:0)) % 256;
    s[64] = (s[64]+(g[63]?1:0)) % 256;
    s[65] = (s[65]+(g[64]?1:0)) % 256;
    s[66] = (s[66]+(g[65]?1:0)) % 256;
    s[67] = (s[67]+(g[66]?1:0)) % 256;
    s[68] = (s[68]+(g[67]?1:0)) % 256;
    s[69] = (s[69]+(g[68]?1:0)) % 256;
    s[70] = (s[70]+(g[69]?1:0)) % 256;
    s[71] = (s[71]+(g[70]?1:0)) % 256;
    s[72] = (s[72]+(g[71]?1:0)) % 256;
    s[73] = (s[73]+(g[72]?1:0)) % 256;
    s[74] = (s[74]+(g[73]?1:0)) % 256;
    s[75] = (s[75]+(g[74]?1:0)) % 256;
    s[76] = (s[76]+(g[75]?1:0)) % 256;
    s[77] = (s[77]+(g[76]?1:0)) % 256;
    s[78] = (s[78]+(g[77]?1:0)) % 256;
    s[79] = (s[79]+(g[78]?1:0)) % 256;
    s[80] = (s[80]+(g[79]?1:0)) % 256;
    s[81] = (s[81]+(g[80]?1:0)) % 256;
    s[82] = (s[82]+(g[81]?1:0)) % 256;
    s[83] = (s[83]+(g[82]?1:0)) % 256;
    s[84] = (s[84]+(g[83]?1:0)) % 256;
    s[85] = (s[85]+(g[84]?1:0)) % 256;
    s[86] = (s[86]+(g[85]?1:0)) % 256;
    s[87] = (s[87]+(g[86]?1:0)) % 256;
    s[88] = (s[88]+(g[87]?1:0)) % 256;
    s[89] = (s[89]+(g[88]?1:0)) % 256;
    s[90] = (s[90]+(g[89]?1:0)) % 256;
    s[91] = (s[91]+(g[90]?1:0)) % 256;
    s[92] = (s[92]+(g[91]?1:0)) % 256;
    s[93] = (s[93]+(g[92]?1:0)) % 256;
    s[94] = (s[94]+(g[93]?1:0)) % 256;
    s[95] = (s[95]+(g[94]?1:0)) % 256;
    s[96] = (s[96]+(g[95]?1:0)) % 256;
    s[97] = (s[97]+(g[96]?1:0)) % 256;
    s[98] = (s[98]+(g[97]?1:0)) % 256;
    s[99] = (s[99]+(g[98]?1:0)) % 256;
    s[100] = (s[100]+(g[99]?1:0)) % 256;
    s[101] = (s[101]+(g[100]?1:0)) % 256;
    s[102] = (s[102]+(g[101]?1:0)) % 256;
    s[103] = (s[103]+(g[102]?1:0)) % 256;
    s[104] = (s[104]+(g[103]?1:0)) % 256;
    s[105] = (s[105]+(g[104]?1:0)) % 256;
    s[106] = (s[106]+(g[105]?1:0)) % 256;
    s[107] = (s[107]+(g[106]?1:0)) % 256;
    s[108] = (s[108]+(g[107]?1:0)) % 256;
    s[109] = (s[109]+(g[108]?1:0)) % 256;
    s[110] = (s[110]+(g[109]?1:0)) % 256;
    s[111] = (s[111]+(g[110]?1:0)) % 256;
    s[112] = (s[112]+(g[111]?1:0)) % 256;
    s[113] = (s[113]+(g[112]?1:0)) % 256;
    s[114] = (s[114]+(g[113]?1:0)) % 256;
    s[115] = (s[115]+(g[114]?1:0)) % 256;
    s[116] = (s[116]+(g[115]?1:0)) % 256;
    s[117] = (s[117]+(g[116]?1:0)) % 256;
    s[118] = (s[118]+(g[117]?1:0)) % 256;
    s[119] = (s[119]+(g[118]?1:0)) % 256;
    s[120] = (s[120]+(g[119]?1:0)) % 256;
    s[121] = (s[121]+(g[120]?1:0)) % 256;
    s[122] = (s[122]+(g[121]?1:0)) % 256;
    s[123] = (s[123]+(g[122]?1:0)) % 256;
    s[124] = (s[124]+(g[123]?1:0)) % 256;
    s[125] = (s[125]+(g[124]?1:0)) % 256;
    s[126] = (s[126]+(g[125]?1:0)) % 256;
    s[127] = (s[127]+(g[126]?1:0)) % 256;
    s[128] = (s[128]+(g[127]?1:0)) % 256;
    s[129] = (s[129]+(g[128]?1:0)) % 256;
    s[130] = (s[130]+(g[129]?1:0)) % 256;
    s[131] = (s[131]+(g[130]?1:0)) % 256;
    s[132] = (s[132]+(g[131]?1:0)) % 256;
    s[133] = (s[133]+(g[132]?1:0)) % 256;
    s[134] = (s[134]+(g[133]?1:0)) % 256;
    s[135] = (s[135]+(g[134]?1:0)) % 256;
    s[136] = (s[136]+(g[135]?1:0)) % 256;
    s[137] = (s[137]+(g[136]?1:0)) % 256;
    s[138] = (s[138]+(g[137]?1:0)) % 256;
    s[139] = (s[139]+(g[138]?1:0)) % 256;
    s[140] = (s[140]+(g[139]?1:0)) % 256;
    s[141] = (s[141]+(g[140]?1:0)) % 256;
    s[142] = (s[142]+(g[141]?1:0)) % 256;
    s[143] = (s[143]+(g[142]?1:0)) % 256;
    s[144] = (s[144]+(g[143]?1:0)) % 256;
    s[145] = (s[145]+(g[144]?1:0)) % 256;
    s[146] = (s[146]+(g[145]?1:0)) % 256;
    s[147] = (s[147]+(g[146]?1:0)) % 256;
    s[148] = (s[148]+(g[147]?1:0)) % 256;
    s[149] = (s[149]+(g[148]?1:0)) % 256;
    s[150] = (s[150]+(g[149]?1:0)) % 256;
    s[151] = (s[151]+(g[150]?1:0)) % 256;
    s[152] = (s[152]+(g[151]?1:0)) % 256;
    s[153] = (s[153]+(g[152]?1:0)) % 256;
    s[154] = (s[154]+(g[153]?1:0)) % 256;
    s[155] = (s[155]+(g[154]?1:0)) % 256;
    s[156] = (s[156]+(g[155]?1:0)) % 256;
    s[157] = (s[157]+(g[156]?1:0)) % 256;
    s[158] = (s[158]+(g[157]?1:0)) % 256;
    s[159] = (s[159]+(g[158]?1:0)) % 256;
    s[160] = (s[160]+(g[159]?1:0)) % 256;
    s[161] = (s[161]+(g[160]?1:0)) % 256;
    s[162] = (s[162]+(g[161]?1:0)) % 256;
    s[163] = (s[163]+(g[162]?1:0)) % 256;
    s[164] = (s[164]+(g[163]?1:0)) % 256;
    s[165] = (s[165]+(g[164]?1:0)) % 256;
    s[166] = (s[166]+(g[165]?1:0)) % 256;
    s[167] = (s[167]+(g[166]?1:0)) % 256;
    s[168] = (s[168]+(g[167]?1:0)) % 256;
    s[169] = (s[169]+(g[168]?1:0)) % 256;
    s[170] = (s[170]+(g[169]?1:0)) % 256;
    s[171] = (s[171]+(g[170]?1:0)) % 256;
    s[172] = (s[172]+(g[171]?1:0)) % 256;
    s[173] = (s[173]+(g[172]?1:0)) % 256;
    s[174] = (s[174]+(g[173]?1:0)) % 256;
    s[175] = (s[175]+(g[174]?1:0)) % 256;
    s[176] = (s[176]+(g[175]?1:0)) % 256;
    s[177] = (s[177]+(g[176]?1:0)) % 256;
    s[178] = (s[178]+(g[177]?1:0)) % 256;
    s[179] = (s[179]+(g[178]?1:0)) % 256;
    s[180] = (s[180]+(g[179]?1:0)) % 256;
    s[181] = (s[181]+(g[180]?1:0)) % 256;
    s[182] = (s[182]+(g[181]?1:0)) % 256;
    s[183] = (s[183]+(g[182]?1:0)) % 256;
    s[184] = (s[184]+(g[183]?1:0)) % 256;
    s[185] = (s[185]+(g[184]?1:0)) % 256;
    s[186] = (s[186]+(g[185]?1:0)) % 256;
    s[187] = (s[187]+(g[186]?1:0)) % 256;
    s[188] = (s[188]+(g[187]?1:0)) % 256;
    s[189] = (s[189]+(g[188]?1:0)) % 256;
    s[190] = (s[190]+(g[189]?1:0)) % 256;
    s[191] = (s[191]+(g[190]?1:0)) % 256;
    s[192] = (s[192]+(g[191]?1:0)) % 256;
    s[193] = (s[193]+(g[192]?1:0)) % 256;
    s[194] = (s[194]+(g[193]?1:0)) % 256;
    s[195] = (s[195]+(g[194]?1:0)) % 256;
    s[196] = (s[196]+(g[195]?1:0)) % 256;
    s[197] = (s[197]+(g[196]?1:0)) % 256;
    s[198] = (s[198]+(g[197]?1:0)) % 256;
    s[199] = (s[199]+(g[198]?1:0)) % 256;
    s[200] = (s[200]+(g[199]?1:0)) % 256;
    s[201] = (s[201]+(g[200]?1:0)) % 256;
    s[202] = (s[202]+(g[201]?1:0)) % 256;
    s[203] = (s[203]+(g[202]?1:0)) % 256;
    s[204] = (s[204]+(g[203]?1:0)) % 256;
    s[205] = (s[205]+(g[204]?1:0)) % 256;
    s[206] = (s[206]+(g[205]?1:0)) % 256;
    s[207] = (s[207]+(g[206]?1:0)) % 256;
    s[208] = (s[208]+(g[207]?1:0)) % 256;
    s[209] = (s[209]+(g[208]?1:0)) % 256;
    s[210] = (s[210]+(g[209]?1:0)) % 256;
    s[211] = (s[211]+(g[210]?1:0)) % 256;
    s[212] = (s[212]+(g[211]?1:0)) % 256;
    s[213] = (s[213]+(g[212]?1:0)) % 256;
    s[214] = (s[214]+(g[213]?1:0)) % 256;
    s[215] = (s[215]+(g[214]?1:0)) % 256;
    s[216] = (s[216]+(g[215]?1:0)) % 256;
    s[217] = (s[217]+(g[216]?1:0)) % 256;
    s[218] = (s[218]+(g[217]?1:0)) % 256;
    s[219] = (s[219]+(g[218]?1:0)) % 256;
    s[220] = (s[220]+(g[219]?1:0)) % 256;
    s[221] = (s[221]+(g[220]?1:0)) % 256;
    s[222] = (s[222]+(g[221]?1:0)) % 256;
    s[223] = (s[223]+(g[222]?1:0)) % 256;
    s[224] = (s[224]+(g[223]?1:0)) % 256;
    s[225] = (s[225]+(g[224]?1:0)) % 256;
    s[226] = (s[226]+(g[225]?1:0)) % 256;
    s[227] = (s[227]+(g[226]?1:0)) % 256;
    s[228] = (s[228]+(g[227]?1:0)) % 256;
    s[229] = (s[229]+(g[228]?1:0)) % 256;
    s[230] = (s[230]+(g[229]?1:0)) % 256;
    s[231] = (s[231]+(g[230]?1:0)) % 256;
    s[232] = (s[232]+(g[231]?1:0)) % 256;
    s[233] = (s[233]+(g[232]?1:0)) % 256;
    s[234] = (s[234]+(g[233]?1:0)) % 256;
    s[235] = (s[235]+(g[234]?1:0)) % 256;
    s[236] = (s[236]+(g[235]?1:0)) % 256;
    s[237] = (s[237]+(g[236]?1:0)) % 256;
    s[238] = (s[238]+(g[237]?1:0)) % 256;
    s[239] = (s[239]+(g[238]?1:0)) % 256;
    s[240] = (s[240]+(g[239]?1:0)) % 256;
    s[241] = (s[241]+(g[240]?1:0)) % 256;
    s[242] = (s[242]+(g[241]?1:0)) % 256;
    s[243] = (s[243]+(g[242]?1:0)) % 256;
    s[244] = (s[244]+(g[243]?1:0)) % 256;
    s[245] = (s[245]+(g[244]?1:0)) % 256;
    s[246] = (s[246]+(g[245]?1:0)) % 256;
    s[247] = (s[247]+(g[246]?1:0)) % 256;
    s[248] = (s[248]+(g[247]?1:0)) % 256;
    s[249] = (s[249]+(g[248]?1:0)) % 256;
    s[250] = (s[250]+(g[249]?1:0)) % 256;
    s[251] = (s[251]+(g[250]?1:0)) % 256;
    s[252] = (s[252]+(g[251]?1:0)) % 256;
    s[253] = (s[253]+(g[252]?1:0)) % 256;
    s[254] = (s[254]+(g[253]?1:0)) % 256;
    s[255] = (s[255]+(g[254]?1:0)) % 256;
    s[256] = (g[255]?1:0);
}