diablo120222.cl 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373
  1. /*
  2. * DiabloMiner - OpenCL miner for BitCoin
  3. * Copyright (C) 2010, 2011, 2012 Patrick McFarland <diablod3@gmail.com>
  4. *
  5. * This program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more detail).
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #ifdef VECTORS4
  19. typedef uint4 z;
  20. #elif defined(VECTORS2)
  21. typedef uint2 z;
  22. #else
  23. typedef uint z;
  24. #endif
  25. #ifdef BITALIGN
  26. #pragma OPENCL EXTENSION cl_amd_media_ops : enable
  27. #define Zrotr(a, b) amd_bitalign((z)a, (z)a, (z)(32 - b))
  28. #else
  29. #define Zrotr(a, b) rotate((z)a, (z)b)
  30. #endif
  31. #ifdef BFI_INT
  32. #define ZCh(a, b, c) amd_bytealign(a, b, c)
  33. #define ZMa(a, b, c) amd_bytealign((c ^ a), (b), (a))
  34. #else
  35. #define ZCh(a, b, c) bitselect((z)c, (z)b, (z)a)
  36. #define ZMa(a, b, c) bitselect((z)a, (z)b, (z)c ^ (z)a)
  37. #endif
  38. #define ZR25(n) ((Zrotr((n), 25) ^ Zrotr((n), 14) ^ ((n) >> 3U)))
  39. #define ZR15(n) ((Zrotr((n), 15) ^ Zrotr((n), 13) ^ ((n) >> 10U)))
  40. #define ZR26(n) ((Zrotr((n), 26) ^ Zrotr((n), 21) ^ Zrotr((n), 7)))
  41. #define ZR30(n) ((Zrotr((n), 30) ^ Zrotr((n), 19) ^ Zrotr((n), 10)))
  42. __kernel __attribute__((reqd_work_group_size(WORKSIZE, 1, 1))) void search(
  43. const z base,
  44. const uint PreVal4_state0, const uint PreVal4_state0_k7,
  45. const uint PreVal4_T1,
  46. const uint W18, const uint W19,
  47. const uint W16, const uint W17,
  48. const uint W16_plus_K16, const uint W17_plus_K17,
  49. const uint W31, const uint W32,
  50. const uint d1, const uint b1, const uint c1,
  51. const uint h1, const uint f1, const uint g1,
  52. const uint c1_plus_k5, const uint b1_plus_k6,
  53. const uint state0, const uint state1, const uint state2, const uint state3,
  54. const uint state4, const uint state5, const uint state6, const uint state7,
  55. __global uint * output)
  56. {
  57. z ZA[25];
  58. const z Znonce = base + (uint)(get_global_id(0));
  59. ZA[2]=Znonce;
  60. ZA[2]+=PreVal4_state0;
  61. ZA[3]=ZCh(ZA[2],b1,c1);
  62. ZA[3]+=d1;
  63. ZA[3]+=ZR26(ZA[2]);
  64. ZA[8]=Znonce;
  65. ZA[8]+=PreVal4_T1;
  66. ZA[4]=ZA[3];
  67. ZA[4]+=h1;
  68. ZA[5]=ZCh(ZA[4],ZA[2],b1);
  69. ZA[5]+=c1_plus_k5;
  70. ZA[5]+=ZR26(ZA[4]);
  71. ZA[3]+=ZMa(f1,g1,ZA[8]);
  72. ZA[3]+=ZR30(ZA[8]);
  73. ZA[6]=ZA[5];
  74. ZA[6]+=g1;
  75. ZA[2]=ZCh(ZA[6],ZA[4],ZA[2]);
  76. ZA[2]+=ZR26(ZA[6]);
  77. ZA[2]+=b1_plus_k6;
  78. ZA[5]+=ZMa(ZA[8],f1,ZA[3]);
  79. ZA[5]+=ZR30(ZA[3]);
  80. ZA[7]=ZA[2];
  81. ZA[7]+=f1;
  82. ZA[2]+=ZMa(ZA[3],ZA[8],ZA[5]);
  83. ZA[2]+=ZR30(ZA[5]);
  84. ZA[10]=Znonce;
  85. ZA[10]+=PreVal4_state0_k7;
  86. ZA[10]+=ZCh(ZA[7],ZA[6],ZA[4]);
  87. ZA[10]+=ZR26(ZA[7]);
  88. ZA[8]+=ZA[10];
  89. ZA[10]+=ZMa(ZA[5],ZA[3],ZA[2]);
  90. ZA[10]+=ZR30(ZA[2]);
  91. ZA[4]+=ZCh(ZA[8],ZA[7],ZA[6]);
  92. ZA[4]+=0xd807aa98U;
  93. ZA[4]+=ZR26(ZA[8]);
  94. ZA[3]+=ZA[4];
  95. ZA[4]+=ZMa(ZA[2],ZA[5],ZA[10]);
  96. ZA[4]+=ZR30(ZA[10]);
  97. ZA[6]+=ZCh(ZA[3],ZA[8],ZA[7]);
  98. ZA[6]+=0x12835b01U;
  99. ZA[6]+=ZR26(ZA[3]);
  100. ZA[5]+=ZA[6];
  101. ZA[6]+=ZMa(ZA[10],ZA[2],ZA[4]);
  102. ZA[6]+=ZR30(ZA[4]);
  103. ZA[7]+=ZCh(ZA[5],ZA[3],ZA[8]);
  104. ZA[7]+=0x243185beU;
  105. ZA[7]+=ZR26(ZA[5]);
  106. ZA[2]+=ZA[7];
  107. ZA[7]+=ZMa(ZA[4],ZA[10],ZA[6]);
  108. ZA[7]+=ZR30(ZA[6]);
  109. ZA[8]+=ZCh(ZA[2],ZA[5],ZA[3]);
  110. ZA[8]+=0x550c7dc3U;
  111. ZA[8]+=ZR26(ZA[2]);
  112. ZA[10]+=ZA[8];
  113. ZA[8]+=ZMa(ZA[6],ZA[4],ZA[7]);
  114. ZA[8]+=ZR30(ZA[7]);
  115. ZA[3]+=ZCh(ZA[10],ZA[2],ZA[5]);
  116. ZA[3]+=0x72be5d74U;
  117. ZA[3]+=ZR26(ZA[10]);
  118. ZA[4]+=ZA[3];
  119. ZA[3]+=ZMa(ZA[7],ZA[6],ZA[8]);
  120. ZA[3]+=ZR30(ZA[8]);
  121. ZA[5]+=ZCh(ZA[4],ZA[10],ZA[2]);
  122. ZA[5]+=0x80deb1feU;
  123. ZA[5]+=ZR26(ZA[4]);
  124. ZA[6]+=ZA[5];
  125. ZA[5]+=ZMa(ZA[8],ZA[7],ZA[3]);
  126. ZA[5]+=ZR30(ZA[3]);
  127. ZA[2]+=ZCh(ZA[6],ZA[4],ZA[10]);
  128. ZA[2]+=0x9bdc06a7U;
  129. ZA[2]+=ZR26(ZA[6]);
  130. ZA[7]+=ZA[2];
  131. ZA[2]+=ZMa(ZA[3],ZA[8],ZA[5]);
  132. ZA[2]+=ZR30(ZA[5]);
  133. ZA[10]+=ZCh(ZA[7],ZA[6],ZA[4]);
  134. ZA[10]+=0xc19bf3f4U;
  135. ZA[10]+=ZR26(ZA[7]);
  136. ZA[8]+=ZA[10];
  137. ZA[10]+=ZMa(ZA[5],ZA[3],ZA[2]);
  138. ZA[10]+=ZR30(ZA[2]);
  139. ZA[4]+=ZCh(ZA[8],ZA[7],ZA[6]);
  140. ZA[4]+=W16_plus_K16;
  141. ZA[4]+=ZR26(ZA[8]);
  142. ZA[0]=ZR25(Znonce);
  143. ZA[0]+=W18;
  144. ZA[11]=ZMa(ZA[2],ZA[5],ZA[10]);
  145. ZA[11]+=ZR30(ZA[10]);
  146. ZA[11]+=ZA[4];
  147. ZA[4]+=ZA[3];
  148. ZA[6]+=ZCh(ZA[4],ZA[8],ZA[7]);
  149. ZA[6]+=W17_plus_K17;
  150. ZA[6]+=ZR26(ZA[4]);
  151. ZA[5]+=ZA[6];
  152. ZA[6]+=ZMa(ZA[10],ZA[2],ZA[11]);
  153. ZA[6]+=ZR30(ZA[11]);
  154. ZA[3]=Znonce;
  155. ZA[3]+=W19;
  156. ZA[7]+=ZCh(ZA[5],ZA[4],ZA[8]);
  157. ZA[7]+=ZA[0];
  158. ZA[7]+=0x0fc19dc6U;
  159. ZA[7]+=ZR26(ZA[5]);
  160. ZA[1]=ZR15(ZA[0]);
  161. ZA[1]+=0x80000000U;
  162. ZA[12]=ZMa(ZA[11],ZA[10],ZA[6]);
  163. ZA[12]+=ZR30(ZA[6]);
  164. ZA[12]+=ZA[7];
  165. ZA[7]+=ZA[2];
  166. ZA[8]+=ZCh(ZA[7],ZA[5],ZA[4]);
  167. ZA[8]+=ZA[3];
  168. ZA[8]+=0x240ca1ccU;
  169. ZA[8]+=ZR26(ZA[7]);
  170. ZA[2]=ZR15(ZA[3]);
  171. ZA[10]+=ZA[8];
  172. ZA[8]+=ZMa(ZA[6],ZA[11],ZA[12]);
  173. ZA[8]+=ZR30(ZA[12]);
  174. ZA[4]+=ZCh(ZA[10],ZA[7],ZA[5]);
  175. ZA[4]+=ZA[1];
  176. ZA[4]+=0x2de92c6fU;
  177. ZA[4]+=ZR26(ZA[10]);
  178. ZA[13]=ZR15(ZA[1]);
  179. ZA[13]+=0x00000280U;
  180. ZA[14]=ZMa(ZA[12],ZA[6],ZA[8]);
  181. ZA[14]+=ZR30(ZA[8]);
  182. ZA[14]+=ZA[4];
  183. ZA[4]+=ZA[11];
  184. ZA[5]+=ZCh(ZA[4],ZA[10],ZA[7]);
  185. ZA[5]+=ZA[2];
  186. ZA[5]+=0x4a7484aaU;
  187. ZA[5]+=ZR26(ZA[4]);
  188. ZA[11]=ZR15(ZA[2]);
  189. ZA[11]+=W16;
  190. ZA[15]=ZMa(ZA[8],ZA[12],ZA[14]);
  191. ZA[15]+=ZR30(ZA[14]);
  192. ZA[15]+=ZA[5];
  193. ZA[5]+=ZA[6];
  194. ZA[7]+=ZCh(ZA[5],ZA[4],ZA[10]);
  195. ZA[7]+=ZA[13];
  196. ZA[7]+=0x5cb0a9dcU;
  197. ZA[7]+=ZR26(ZA[5]);
  198. ZA[6]=ZR15(ZA[13]);
  199. ZA[6]+=W17;
  200. ZA[16]=ZMa(ZA[14],ZA[8],ZA[15]);
  201. ZA[16]+=ZR30(ZA[15]);
  202. ZA[16]+=ZA[7];
  203. ZA[7]+=ZA[12];
  204. ZA[10]+=ZCh(ZA[7],ZA[5],ZA[4]);
  205. ZA[10]+=ZA[11];
  206. ZA[10]+=0x76f988daU;
  207. ZA[10]+=ZR26(ZA[7]);
  208. ZA[12]=ZR15(ZA[11]);
  209. ZA[12]+=ZA[0];
  210. ZA[17]=ZA[10];
  211. ZA[17]+=ZMa(ZA[15],ZA[14],ZA[16]);
  212. ZA[17]+=ZR30(ZA[16]);
  213. ZA[10]+=ZA[8];
  214. ZA[4]+=ZCh(ZA[10],ZA[7],ZA[5]);
  215. ZA[4]+=ZA[6];
  216. ZA[4]+=0x983e5152U;
  217. ZA[4]+=ZR26(ZA[10]);
  218. ZA[8]=ZR15(ZA[6]);
  219. ZA[8]+=ZA[3];
  220. ZA[14]+=ZA[4];
  221. ZA[4]+=ZMa(ZA[16],ZA[15],ZA[17]);
  222. ZA[4]+=ZR30(ZA[17]);
  223. ZA[5]+=ZCh(ZA[14],ZA[10],ZA[7]);
  224. ZA[5]+=ZA[12];
  225. ZA[5]+=0xa831c66dU;
  226. ZA[5]+=ZR26(ZA[14]);
  227. ZA[9]=ZR15(ZA[12]);
  228. ZA[9]+=ZA[1];
  229. ZA[18]=ZMa(ZA[17],ZA[16],ZA[4]);
  230. ZA[18]+=ZR30(ZA[4]);
  231. ZA[18]+=ZA[5];
  232. ZA[5]+=ZA[15];
  233. ZA[7]+=ZCh(ZA[5],ZA[14],ZA[10]);
  234. ZA[7]+=ZA[8];
  235. ZA[7]+=0xb00327c8U;
  236. ZA[7]+=ZR26(ZA[5]);
  237. ZA[15]=ZR15(ZA[8]);
  238. ZA[15]+=ZA[2];
  239. ZA[19]=ZA[7];
  240. ZA[19]+=ZMa(ZA[4],ZA[17],ZA[18]);
  241. ZA[19]+=ZR30(ZA[18]);
  242. ZA[7]+=ZA[16];
  243. ZA[10]+=ZCh(ZA[7],ZA[5],ZA[14]);
  244. ZA[10]+=ZA[9];
  245. ZA[10]+=0xbf597fc7U;
  246. ZA[10]+=ZR26(ZA[7]);
  247. ZA[16]=ZR15(ZA[9]);
  248. ZA[16]+=ZA[13];
  249. ZA[20]=ZMa(ZA[18],ZA[4],ZA[19]);
  250. ZA[20]+=ZR30(ZA[19]);
  251. ZA[20]+=ZA[10];
  252. ZA[10]+=ZA[17];
  253. ZA[14]+=ZCh(ZA[10],ZA[7],ZA[5]);
  254. ZA[14]+=ZA[15];
  255. ZA[14]+=0xc6e00bf3U;
  256. ZA[14]+=ZR26(ZA[10]);
  257. ZA[17]=ZR15(ZA[15]);
  258. ZA[17]+=ZA[11];
  259. ZA[17]+=0x00A00055U;
  260. ZA[21]=ZMa(ZA[19],ZA[18],ZA[20]);
  261. ZA[21]+=ZR30(ZA[20]);
  262. ZA[21]+=ZA[14];
  263. ZA[14]+=ZA[4];
  264. ZA[5]+=ZCh(ZA[14],ZA[10],ZA[7]);
  265. ZA[5]+=ZA[16];
  266. ZA[5]+=0xd5a79147U;
  267. ZA[5]+=ZR26(ZA[14]);
  268. ZA[4]=ZR15(ZA[16]);
  269. ZA[4]+=ZA[6];
  270. ZA[4]+=W31;
  271. ZA[22]=ZA[5];
  272. ZA[22]+=ZMa(ZA[20],ZA[19],ZA[21]);
  273. ZA[22]+=ZR30(ZA[21]);
  274. ZA[5]+=ZA[18];
  275. ZA[7]+=ZCh(ZA[5],ZA[14],ZA[10]);
  276. ZA[7]+=ZA[17];
  277. ZA[7]+=0x06ca6351U;
  278. ZA[7]+=ZR26(ZA[5]);
  279. ZA[18]=ZR15(ZA[17]);
  280. ZA[18]+=ZA[12];
  281. ZA[18]+=W32;
  282. ZA[23]=ZA[7];
  283. ZA[23]+=ZMa(ZA[21],ZA[20],ZA[22]);
  284. ZA[23]+=ZR30(ZA[22]);
  285. ZA[7]+=ZA[19];
  286. ZA[10]+=ZCh(ZA[7],ZA[5],ZA[14]);
  287. ZA[10]+=ZA[4];
  288. ZA[10]+=0x14292967U;
  289. ZA[10]+=ZR26(ZA[7]);
  290. ZA[19]=ZR15(ZA[4]);
  291. ZA[19]+=ZA[8];
  292. ZA[19]+=ZR25(ZA[0]);
  293. ZA[19]+=W17;
  294. ZA[20]+=ZA[10];
  295. ZA[10]+=ZMa(ZA[22],ZA[21],ZA[23]);
  296. ZA[10]+=ZR30(ZA[23]);
  297. ZA[14]+=ZCh(ZA[20],ZA[7],ZA[5]);
  298. ZA[14]+=ZA[18];
  299. ZA[14]+=0x27b70a85U;
  300. ZA[14]+=ZR26(ZA[20]);
  301. ZA[0]+=ZR15(ZA[18]);
  302. ZA[0]+=ZR25(ZA[3]);
  303. ZA[0]+=ZA[9];
  304. ZA[24]=ZA[14];
  305. ZA[24]+=ZMa(ZA[23],ZA[22],ZA[10]);
  306. ZA[24]+=ZR30(ZA[10]);
  307. ZA[14]+=ZA[21];
  308. ZA[5]+=ZCh(ZA[14],ZA[20],ZA[7]);
  309. ZA[5]+=ZA[19];
  310. ZA[5]+=0x2e1b2138U;
  311. ZA[5]+=ZR26(ZA[14]);
  312. ZA[3]+=ZR15(ZA[19]);
  313. ZA[3]+=ZR25(ZA[1]);
  314. ZA[3]+=ZA[15];
  315. ZA[22]+=ZA[5];
  316. ZA[5]+=ZMa(ZA[10],ZA[23],ZA[24]);
  317. ZA[5]+=ZR30(ZA[24]);
  318. ZA[7]+=ZCh(ZA[22],ZA[14],ZA[20]);
  319. ZA[7]+=ZA[0];
  320. ZA[7]+=0x4d2c6dfcU;
  321. ZA[7]+=ZR26(ZA[22]);
  322. ZA[1]+=ZR15(ZA[0]);
  323. ZA[1]+=ZR25(ZA[2]);
  324. ZA[1]+=ZA[16];
  325. ZA[21]=ZA[7];
  326. ZA[21]+=ZMa(ZA[24],ZA[10],ZA[5]);
  327. ZA[21]+=ZR30(ZA[5]);
  328. ZA[7]+=ZA[23];
  329. ZA[20]+=ZCh(ZA[7],ZA[22],ZA[14]);
  330. ZA[20]+=ZA[3];
  331. ZA[20]+=0x53380d13U;
  332. ZA[20]+=ZR26(ZA[7]);
  333. ZA[2]+=ZR15(ZA[3]);
  334. ZA[2]+=ZR25(ZA[13]);
  335. ZA[2]+=ZA[17];
  336. ZA[10]+=ZA[20];
  337. ZA[20]+=ZMa(ZA[5],ZA[24],ZA[21]);
  338. ZA[20]+=ZR30(ZA[21]);
  339. ZA[14]+=ZCh(ZA[10],ZA[7],ZA[22]);
  340. ZA[14]+=ZA[1];
  341. ZA[14]+=0x650a7354U;
  342. ZA[14]+=ZR26(ZA[10]);
  343. ZA[13]+=ZR15(ZA[1]);
  344. ZA[13]+=ZR25(ZA[11]);
  345. ZA[13]+=ZA[4];
  346. ZA[23]=ZA[14];
  347. ZA[23]+=ZMa(ZA[21],ZA[5],ZA[20]);
  348. ZA[23]+=ZR30(ZA[20]);
  349. ZA[14]+=ZA[24];
  350. ZA[22]+=ZCh(ZA[14],ZA[10],ZA[7]);
  351. ZA[22]+=ZA[2];
  352. ZA[22]+=0x766a0abbU;
  353. ZA[22]+=ZR26(ZA[14]);
  354. ZA[11]+=ZR15(ZA[2]);
  355. ZA[11]+=ZR25(ZA[6]);
  356. ZA[11]+=ZA[18];
  357. ZA[5]+=ZA[22];
  358. ZA[22]+=ZMa(ZA[20],ZA[21],ZA[23]);
  359. ZA[22]+=ZR30(ZA[23]);
  360. ZA[7]+=ZCh(ZA[5],ZA[14],ZA[10]);
  361. ZA[7]+=ZA[13];
  362. ZA[7]+=0x81c2c92eU;
  363. ZA[7]+=ZR26(ZA[5]);
  364. ZA[6]+=ZR15(ZA[13]);
  365. ZA[6]+=ZR25(ZA[12]);
  366. ZA[6]+=ZA[19];
  367. ZA[21]+=ZA[7];
  368. ZA[7]+=ZMa(ZA[23],ZA[20],ZA[22]);
  369. ZA[7]+=ZR30(ZA[22]);
  370. ZA[10]+=ZCh(ZA[21],ZA[5],ZA[14]);
  371. ZA[10]+=ZA[11];
  372. ZA[10]+=0x92722c85U;
  373. ZA[10]+=ZR26(ZA[21]);
  374. ZA[12]+=ZR15(ZA[11]);
  375. ZA[12]+=ZR25(ZA[8]);
  376. ZA[12]+=ZA[0];
  377. ZA[20]+=ZA[10];
  378. ZA[10]+=ZMa(ZA[22],ZA[23],ZA[7]);
  379. ZA[10]+=ZR30(ZA[7]);
  380. ZA[14]+=ZCh(ZA[20],ZA[21],ZA[5]);
  381. ZA[14]+=ZA[6];
  382. ZA[14]+=0xa2bfe8a1U;
  383. ZA[14]+=ZR26(ZA[20]);
  384. ZA[8]+=ZR15(ZA[6]);
  385. ZA[8]+=ZR25(ZA[9]);
  386. ZA[8]+=ZA[3];
  387. ZA[23]+=ZA[14];
  388. ZA[14]+=ZMa(ZA[7],ZA[22],ZA[10]);
  389. ZA[14]+=ZR30(ZA[10]);
  390. ZA[5]+=ZCh(ZA[23],ZA[20],ZA[21]);
  391. ZA[5]+=ZA[12];
  392. ZA[5]+=0xa81a664bU;
  393. ZA[5]+=ZR26(ZA[23]);
  394. ZA[9]+=ZR15(ZA[12]);
  395. ZA[9]+=ZA[1];
  396. ZA[9]+=ZR25(ZA[15]);
  397. ZA[24]=ZA[5];
  398. ZA[24]+=ZMa(ZA[10],ZA[7],ZA[14]);
  399. ZA[24]+=ZR30(ZA[14]);
  400. ZA[22]+=ZA[5];
  401. ZA[21]+=ZCh(ZA[22],ZA[23],ZA[20]);
  402. ZA[21]+=ZA[8];
  403. ZA[21]+=0xc24b8b70U;
  404. ZA[21]+=ZR26(ZA[22]);
  405. ZA[15]+=ZR15(ZA[8]);
  406. ZA[15]+=ZA[2];
  407. ZA[15]+=ZR25(ZA[16]);
  408. ZA[7]+=ZA[21];
  409. ZA[21]+=ZMa(ZA[14],ZA[10],ZA[24]);
  410. ZA[21]+=ZR30(ZA[24]);
  411. ZA[20]+=ZCh(ZA[7],ZA[22],ZA[23]);
  412. ZA[20]+=ZA[9];
  413. ZA[20]+=0xc76c51a3U;
  414. ZA[20]+=ZR26(ZA[7]);
  415. ZA[16]+=ZR15(ZA[9]);
  416. ZA[16]+=ZR25(ZA[17]);
  417. ZA[16]+=ZA[13];
  418. ZA[10]+=ZA[20];
  419. ZA[20]+=ZMa(ZA[24],ZA[14],ZA[21]);
  420. ZA[20]+=ZR30(ZA[21]);
  421. ZA[23]+=ZCh(ZA[10],ZA[7],ZA[22]);
  422. ZA[23]+=ZA[15];
  423. ZA[23]+=0xd192e819U;
  424. ZA[23]+=ZR26(ZA[10]);
  425. ZA[17]+=ZR15(ZA[15]);
  426. ZA[17]+=ZR25(ZA[4]);
  427. ZA[17]+=ZA[11];
  428. ZA[14]+=ZA[23];
  429. ZA[23]+=ZMa(ZA[21],ZA[24],ZA[20]);
  430. ZA[23]+=ZR30(ZA[20]);
  431. ZA[22]+=ZCh(ZA[14],ZA[10],ZA[7]);
  432. ZA[22]+=ZA[16];
  433. ZA[22]+=0xd6990624U;
  434. ZA[22]+=ZR26(ZA[14]);
  435. ZA[4]+=ZR15(ZA[16]);
  436. ZA[4]+=ZA[6];
  437. ZA[4]+=ZR25(ZA[18]);
  438. ZA[24]+=ZA[22];
  439. ZA[22]+=ZMa(ZA[20],ZA[21],ZA[23]);
  440. ZA[22]+=ZR30(ZA[23]);
  441. ZA[7]+=ZCh(ZA[24],ZA[14],ZA[10]);
  442. ZA[7]+=ZA[17];
  443. ZA[7]+=0xf40e3585U;
  444. ZA[7]+=ZR26(ZA[24]);
  445. ZA[18]+=ZR15(ZA[17]);
  446. ZA[18]+=ZA[12];
  447. ZA[18]+=ZR25(ZA[19]);
  448. ZA[21]+=ZA[7];
  449. ZA[7]+=ZMa(ZA[23],ZA[20],ZA[22]);
  450. ZA[7]+=ZR30(ZA[22]);
  451. ZA[10]+=ZCh(ZA[21],ZA[24],ZA[14]);
  452. ZA[10]+=ZA[4];
  453. ZA[10]+=0x106aa070U;
  454. ZA[10]+=ZR26(ZA[21]);
  455. ZA[19]+=ZR15(ZA[4]);
  456. ZA[19]+=ZA[8];
  457. ZA[19]+=ZR25(ZA[0]);
  458. ZA[20]+=ZA[10];
  459. ZA[10]+=ZMa(ZA[22],ZA[23],ZA[7]);
  460. ZA[10]+=ZR30(ZA[7]);
  461. ZA[14]+=ZCh(ZA[20],ZA[21],ZA[24]);
  462. ZA[14]+=ZA[18];
  463. ZA[14]+=0x19a4c116U;
  464. ZA[14]+=ZR26(ZA[20]);
  465. ZA[0]+=ZR15(ZA[18]);
  466. ZA[0]+=ZA[9];
  467. ZA[0]+=ZR25(ZA[3]);
  468. ZA[23]+=ZA[14];
  469. ZA[14]+=ZMa(ZA[7],ZA[22],ZA[10]);
  470. ZA[14]+=ZR30(ZA[10]);
  471. ZA[24]+=ZCh(ZA[23],ZA[20],ZA[21]);
  472. ZA[24]+=ZA[19];
  473. ZA[24]+=0x1e376c08U;
  474. ZA[24]+=ZR26(ZA[23]);
  475. ZA[3]+=ZR15(ZA[19]);
  476. ZA[3]+=ZA[15];
  477. ZA[3]+=ZR25(ZA[1]);
  478. ZA[22]+=ZA[24];
  479. ZA[24]+=ZMa(ZA[10],ZA[7],ZA[14]);
  480. ZA[24]+=ZR30(ZA[14]);
  481. ZA[21]+=ZCh(ZA[22],ZA[23],ZA[20]);
  482. ZA[21]+=ZA[0];
  483. ZA[21]+=0x2748774cU;
  484. ZA[21]+=ZR26(ZA[22]);
  485. ZA[1]+=ZR15(ZA[0]);
  486. ZA[1]+=ZA[16];
  487. ZA[1]+=ZR25(ZA[2]);
  488. ZA[7]+=ZA[21];
  489. ZA[21]+=ZMa(ZA[14],ZA[10],ZA[24]);
  490. ZA[21]+=ZR30(ZA[24]);
  491. ZA[20]+=ZCh(ZA[7],ZA[22],ZA[23]);
  492. ZA[20]+=ZA[3];
  493. ZA[20]+=0x34b0bcb5U;
  494. ZA[20]+=ZR26(ZA[7]);
  495. ZA[2]+=ZR15(ZA[3]);
  496. ZA[2]+=ZA[17];
  497. ZA[2]+=ZR25(ZA[13]);
  498. ZA[10]+=ZA[20];
  499. ZA[20]+=ZMa(ZA[24],ZA[14],ZA[21]);
  500. ZA[20]+=ZR30(ZA[21]);
  501. ZA[23]+=ZCh(ZA[10],ZA[7],ZA[22]);
  502. ZA[23]+=ZA[1];
  503. ZA[23]+=0x391c0cb3U;
  504. ZA[23]+=ZR26(ZA[10]);
  505. ZA[13]+=ZR15(ZA[1]);
  506. ZA[13]+=ZA[4];
  507. ZA[13]+=ZR25(ZA[11]);
  508. ZA[14]+=ZA[23];
  509. ZA[23]+=ZMa(ZA[21],ZA[24],ZA[20]);
  510. ZA[23]+=ZR30(ZA[20]);
  511. ZA[22]+=ZCh(ZA[14],ZA[10],ZA[7]);
  512. ZA[22]+=ZA[2];
  513. ZA[22]+=0x4ed8aa4aU;
  514. ZA[22]+=ZR26(ZA[14]);
  515. ZA[11]+=ZR15(ZA[2]);
  516. ZA[11]+=ZA[18];
  517. ZA[11]+=ZR25(ZA[6]);
  518. ZA[24]+=ZA[22];
  519. ZA[22]+=ZMa(ZA[20],ZA[21],ZA[23]);
  520. ZA[22]+=ZR30(ZA[23]);
  521. ZA[7]+=ZCh(ZA[24],ZA[14],ZA[10]);
  522. ZA[7]+=ZA[13];
  523. ZA[7]+=0x5b9cca4fU;
  524. ZA[7]+=ZR26(ZA[24]);
  525. ZA[6]+=ZR15(ZA[13]);
  526. ZA[6]+=ZA[19];
  527. ZA[6]+=ZR25(ZA[12]);
  528. ZA[21]+=ZA[7];
  529. ZA[7]+=ZMa(ZA[23],ZA[20],ZA[22]);
  530. ZA[7]+=ZR30(ZA[22]);
  531. ZA[10]+=ZCh(ZA[21],ZA[24],ZA[14]);
  532. ZA[10]+=ZA[11];
  533. ZA[10]+=0x682e6ff3U;
  534. ZA[10]+=ZR26(ZA[21]);
  535. ZA[0]+=ZR15(ZA[11]);
  536. ZA[0]+=ZR25(ZA[8]);
  537. ZA[0]+=ZA[12];
  538. ZA[20]+=ZA[10];
  539. ZA[10]+=ZMa(ZA[22],ZA[23],ZA[7]);
  540. ZA[10]+=ZR30(ZA[7]);
  541. ZA[14]+=ZCh(ZA[20],ZA[21],ZA[24]);
  542. ZA[14]+=ZA[6];
  543. ZA[14]+=0x748f82eeU;
  544. ZA[14]+=ZR26(ZA[20]);
  545. ZA[3]+=ZR15(ZA[6]);
  546. ZA[3]+=ZR25(ZA[9]);
  547. ZA[3]+=ZA[8];
  548. ZA[23]+=ZA[14];
  549. ZA[14]+=ZMa(ZA[7],ZA[22],ZA[10]);
  550. ZA[14]+=ZR30(ZA[10]);
  551. ZA[24]+=ZCh(ZA[23],ZA[20],ZA[21]);
  552. ZA[24]+=ZA[0];
  553. ZA[24]+=0x78a5636fU;
  554. ZA[24]+=ZR26(ZA[23]);
  555. ZA[1]+=ZR15(ZA[0]);
  556. ZA[1]+=ZR25(ZA[15]);
  557. ZA[1]+=ZA[9];
  558. ZA[22]+=ZA[24];
  559. ZA[24]+=ZMa(ZA[10],ZA[7],ZA[14]);
  560. ZA[24]+=ZR30(ZA[14]);
  561. ZA[21]+=ZCh(ZA[22],ZA[23],ZA[20]);
  562. ZA[21]+=ZA[3];
  563. ZA[21]+=0x84c87814U;
  564. ZA[21]+=ZR26(ZA[22]);
  565. ZA[2]+=ZR15(ZA[3]);
  566. ZA[2]+=ZR25(ZA[16]);
  567. ZA[2]+=ZA[15];
  568. ZA[7]+=ZA[21];
  569. ZA[21]+=ZMa(ZA[14],ZA[10],ZA[24]);
  570. ZA[21]+=ZR30(ZA[24]);
  571. ZA[20]+=ZCh(ZA[7],ZA[22],ZA[23]);
  572. ZA[20]+=ZA[1];
  573. ZA[20]+=0x8cc70208U;
  574. ZA[20]+=ZR26(ZA[7]);
  575. ZA[13]+=ZR15(ZA[1]);
  576. ZA[13]+=ZR25(ZA[17]);
  577. ZA[13]+=ZA[16];
  578. ZA[10]+=ZA[20];
  579. ZA[20]+=ZMa(ZA[24],ZA[14],ZA[21]);
  580. ZA[20]+=ZR30(ZA[21]);
  581. ZA[23]+=ZCh(ZA[10],ZA[7],ZA[22]);
  582. ZA[23]+=ZA[2];
  583. ZA[23]+=0x90befffaU;
  584. ZA[23]+=ZR26(ZA[10]);
  585. ZA[14]+=ZA[23];
  586. ZA[23]+=ZMa(ZA[21],ZA[24],ZA[20]);
  587. ZA[23]+=ZR30(ZA[20]);
  588. ZA[22]+=ZCh(ZA[14],ZA[10],ZA[7]);
  589. ZA[22]+=ZA[13];
  590. ZA[22]+=0xa4506cebU;
  591. ZA[22]+=ZR26(ZA[14]);
  592. ZA[16]=ZA[22];
  593. ZA[16]+=ZMa(ZA[20],ZA[21],ZA[23]);
  594. ZA[16]+=ZR30(ZA[23]);
  595. ZA[24]+=ZA[22];
  596. ZA[7]+=ZCh(ZA[24],ZA[14],ZA[10]);
  597. ZA[7]+=ZR15(ZA[2]);
  598. ZA[7]+=ZA[11];
  599. ZA[7]+=ZR25(ZA[4]);
  600. ZA[7]+=0xbef9a3f7U;
  601. ZA[7]+=ZR26(ZA[24]);
  602. ZA[7]+=ZA[17];
  603. ZA[21]+=ZA[7];
  604. ZA[7]+=ZMa(ZA[23],ZA[20],ZA[16]);
  605. ZA[7]+=ZR30(ZA[16]);
  606. ZA[6]+=ZCh(ZA[21],ZA[24],ZA[14]);
  607. ZA[6]+=ZA[10];
  608. ZA[6]+=ZR15(ZA[13]);
  609. ZA[6]+=ZR25(ZA[18]);
  610. ZA[6]+=ZA[4];
  611. ZA[6]+=0xc67178f2U;
  612. ZA[6]+=ZR26(ZA[21]);
  613. ZA[4]=state1;
  614. ZA[4]+=ZA[7];
  615. ZA[7]=ZMa(ZA[16],ZA[23],ZA[7])+ZR30(ZA[7]);
  616. ZA[7]+=ZA[6];
  617. ZA[7]+=state0;
  618. ZA[18]=ZA[7];
  619. ZA[18]+=0x98c7e2a2U;
  620. ZA[17]=ZCh(ZA[18],0x510e527fU,0x9b05688cU);
  621. ZA[17]+=ZA[4];
  622. ZA[17]+=0x90bb1e3cU;
  623. ZA[17]+=ZR26(ZA[18]);
  624. ZA[16]+=state2;
  625. ZA[2]=ZA[7];
  626. ZA[2]+=0xfc08884dU;
  627. ZA[13]=ZA[17];
  628. ZA[13]+=0x3c6ef372U;
  629. ZA[11]=ZCh(ZA[13],ZA[18],0x510e527fU);
  630. ZA[11]+=ZA[16];
  631. ZA[11]+=0x50c6645bU;
  632. ZA[11]+=ZR26(ZA[13]);
  633. ZA[23]+=state3;
  634. ZA[17]+=ZMa(0x6a09e667U,0xbb67ae85U,ZA[2]);
  635. ZA[17]+=ZR30(ZA[2]);
  636. ZA[22]=ZA[11];
  637. ZA[22]+=0xbb67ae85U;
  638. ZA[18]=ZCh(ZA[22],ZA[13],ZA[18]);
  639. ZA[18]+=ZR26(ZA[22]);
  640. ZA[18]+=ZA[23];
  641. ZA[18]+=0x3ac42e24U;
  642. ZA[20]+=state4;
  643. ZA[20]+=ZA[6];
  644. ZA[6]=ZA[18];
  645. ZA[6]+=0x6a09e667U;
  646. ZA[11]+=ZMa(ZA[2],0x6a09e667U,ZA[17]);
  647. ZA[11]+=ZR30(ZA[17]);
  648. ZA[21]+=state5;
  649. ZA[10]=ZCh(ZA[6],ZA[22],ZA[13]);
  650. ZA[10]+=ZA[20];
  651. ZA[10]+=ZA[7];
  652. ZA[10]+=0xd21ea4fdU;
  653. ZA[10]+=ZR26(ZA[6]);
  654. ZA[12]=ZA[10];
  655. ZA[12]+=ZA[2];
  656. ZA[18]+=ZMa(ZA[17],ZA[2],ZA[11]);
  657. ZA[18]+=ZR30(ZA[11]);
  658. ZA[24]+=state6;
  659. ZA[13]+=ZCh(ZA[12],ZA[6],ZA[22]);
  660. ZA[13]+=ZA[21];
  661. ZA[13]+=0x59f111f1U;
  662. ZA[13]+=ZR26(ZA[12]);
  663. ZA[2]=ZA[17];
  664. ZA[2]+=ZA[13];
  665. ZA[10]+=ZMa(ZA[11],ZA[17],ZA[18]);
  666. ZA[10]+=ZR30(ZA[18]);
  667. ZA[14]+=state7;
  668. ZA[22]+=ZCh(ZA[2],ZA[12],ZA[6]);
  669. ZA[22]+=ZA[24];
  670. ZA[22]+=0x923f82a4U;
  671. ZA[22]+=ZR26(ZA[2]);
  672. ZA[17]=ZA[11];
  673. ZA[17]+=ZA[22];
  674. ZA[13]+=ZMa(ZA[18],ZA[11],ZA[10]);
  675. ZA[13]+=ZR30(ZA[10]);
  676. ZA[6]+=ZCh(ZA[17],ZA[2],ZA[12]);
  677. ZA[6]+=ZA[14];
  678. ZA[6]+=0xab1c5ed5U;
  679. ZA[6]+=ZR26(ZA[17]);
  680. ZA[11]=ZA[6];
  681. ZA[11]+=ZA[18];
  682. ZA[22]+=ZMa(ZA[10],ZA[18],ZA[13]);
  683. ZA[22]+=ZR30(ZA[13]);
  684. ZA[12]+=ZCh(ZA[11],ZA[17],ZA[2]);
  685. ZA[12]+=0x5807aa98U;
  686. ZA[12]+=ZR26(ZA[11]);
  687. ZA[18]=ZA[10];
  688. ZA[18]+=ZA[12];
  689. ZA[6]+=ZMa(ZA[13],ZA[10],ZA[22]);
  690. ZA[6]+=ZR30(ZA[22]);
  691. ZA[2]+=ZCh(ZA[18],ZA[11],ZA[17]);
  692. ZA[2]+=0x12835b01U;
  693. ZA[2]+=ZR26(ZA[18]);
  694. ZA[10]=ZA[2];
  695. ZA[10]+=ZA[13];
  696. ZA[12]+=ZMa(ZA[22],ZA[13],ZA[6]);
  697. ZA[12]+=ZR30(ZA[6]);
  698. ZA[17]+=ZCh(ZA[10],ZA[18],ZA[11]);
  699. ZA[17]+=0x243185beU;
  700. ZA[17]+=ZR26(ZA[10]);
  701. ZA[5]=ZA[17];
  702. ZA[5]+=ZA[22];
  703. ZA[2]+=ZMa(ZA[6],ZA[22],ZA[12]);
  704. ZA[2]+=ZR30(ZA[12]);
  705. ZA[11]+=ZCh(ZA[5],ZA[10],ZA[18]);
  706. ZA[11]+=0x550c7dc3U;
  707. ZA[11]+=ZR26(ZA[5]);
  708. ZA[22]=ZA[11];
  709. ZA[22]+=ZA[6];
  710. ZA[17]+=ZMa(ZA[12],ZA[6],ZA[2]);
  711. ZA[17]+=ZR30(ZA[2]);
  712. ZA[18]+=ZCh(ZA[22],ZA[5],ZA[10]);
  713. ZA[18]+=0x72be5d74U;
  714. ZA[18]+=ZR26(ZA[22]);
  715. ZA[6]=ZA[18];
  716. ZA[6]+=ZA[12];
  717. ZA[11]+=ZMa(ZA[2],ZA[12],ZA[17]);
  718. ZA[11]+=ZR30(ZA[17]);
  719. ZA[10]+=ZCh(ZA[6],ZA[22],ZA[5]);
  720. ZA[10]+=0x80deb1feU;
  721. ZA[10]+=ZR26(ZA[6]);
  722. ZA[12]=ZA[10];
  723. ZA[12]+=ZA[2];
  724. ZA[18]+=ZMa(ZA[17],ZA[2],ZA[11]);
  725. ZA[18]+=ZR30(ZA[11]);
  726. ZA[5]+=ZCh(ZA[12],ZA[6],ZA[22]);
  727. ZA[5]+=0x9bdc06a7U;
  728. ZA[5]+=ZR26(ZA[12]);
  729. ZA[7]+=ZR25(ZA[4]);
  730. ZA[2]=ZA[5];
  731. ZA[2]+=ZA[17];
  732. ZA[10]+=ZMa(ZA[11],ZA[17],ZA[18]);
  733. ZA[10]+=ZR30(ZA[18]);
  734. ZA[22]+=ZCh(ZA[2],ZA[12],ZA[6]);
  735. ZA[22]+=0xc19bf274U;
  736. ZA[22]+=ZR26(ZA[2]);
  737. ZA[4]+=ZR25(ZA[16]);
  738. ZA[4]+=0x00a00000U;
  739. ZA[17]=ZA[22];
  740. ZA[17]+=ZA[11];
  741. ZA[5]+=ZMa(ZA[18],ZA[11],ZA[10]);
  742. ZA[5]+=ZR30(ZA[10]);
  743. ZA[6]+=ZCh(ZA[17],ZA[2],ZA[12]);
  744. ZA[6]+=ZA[7];
  745. ZA[6]+=0xe49b69c1U;
  746. ZA[6]+=ZR26(ZA[17]);
  747. ZA[0]=ZA[6];
  748. ZA[0]+=ZA[18];
  749. ZA[22]+=ZMa(ZA[10],ZA[18],ZA[5]);
  750. ZA[22]+=ZR30(ZA[5]);
  751. ZA[12]+=ZCh(ZA[0],ZA[17],ZA[2]);
  752. ZA[12]+=ZA[4];
  753. ZA[12]+=0xefbe4786U;
  754. ZA[12]+=ZR26(ZA[0]);
  755. ZA[16]+=ZR15(ZA[7]);
  756. ZA[16]+=ZR25(ZA[23]);
  757. ZA[23]+=ZR15(ZA[4]);
  758. ZA[23]+=ZR25(ZA[20]);
  759. ZA[6]+=ZMa(ZA[5],ZA[10],ZA[22]);
  760. ZA[6]+=ZR30(ZA[22]);
  761. ZA[10]+=ZA[12];
  762. ZA[2]+=ZCh(ZA[10],ZA[0],ZA[17]);
  763. ZA[2]+=0x0fc19dc6U;
  764. ZA[2]+=ZA[16];
  765. ZA[2]+=ZR26(ZA[10]);
  766. ZA[20]+=ZR15(ZA[16]);
  767. ZA[20]+=ZR25(ZA[21]);
  768. ZA[12]+=ZMa(ZA[22],ZA[5],ZA[6]);
  769. ZA[12]+=ZR30(ZA[6]);
  770. ZA[5]+=ZA[2];
  771. ZA[17]+=ZCh(ZA[5],ZA[10],ZA[0]);
  772. ZA[17]+=ZA[23];
  773. ZA[17]+=0x240ca1ccU;
  774. ZA[17]+=ZR26(ZA[5]);
  775. ZA[21]+=ZR15(ZA[23]);
  776. ZA[21]+=ZR25(ZA[24]);
  777. ZA[2]+=ZMa(ZA[6],ZA[22],ZA[12]);
  778. ZA[2]+=ZR30(ZA[12]);
  779. ZA[22]+=ZA[17];
  780. ZA[0]+=ZCh(ZA[22],ZA[5],ZA[10]);
  781. ZA[0]+=ZA[20];
  782. ZA[0]+=0x2de92c6fU;
  783. ZA[0]+=ZR26(ZA[22]);
  784. ZA[24]+=ZR15(ZA[20]);
  785. ZA[24]+=0x00000100U;
  786. ZA[24]+=ZR25(ZA[14]);
  787. ZA[17]+=ZMa(ZA[12],ZA[6],ZA[2]);
  788. ZA[17]+=ZR30(ZA[2]);
  789. ZA[6]+=ZA[0];
  790. ZA[10]+=ZCh(ZA[6],ZA[22],ZA[5]);
  791. ZA[10]+=ZA[21];
  792. ZA[10]+=0x4a7484aaU;
  793. ZA[10]+=ZR26(ZA[6]);
  794. ZA[14]+=ZA[7];
  795. ZA[14]+=ZR15(ZA[21]);
  796. ZA[14]+=0x11002000U;
  797. ZA[0]+=ZMa(ZA[2],ZA[12],ZA[17]);
  798. ZA[0]+=ZR30(ZA[17]);
  799. ZA[12]+=ZA[10];
  800. ZA[5]+=ZCh(ZA[12],ZA[6],ZA[22]);
  801. ZA[5]+=ZA[24];
  802. ZA[5]+=0x5cb0a9dcU;
  803. ZA[5]+=ZR26(ZA[12]);
  804. ZA[19]=ZR15(ZA[24]);
  805. ZA[19]+=ZA[4];
  806. ZA[19]+=0x80000000U;
  807. ZA[9]=ZA[5];
  808. ZA[9]+=ZA[2];
  809. ZA[10]+=ZMa(ZA[17],ZA[2],ZA[0]);
  810. ZA[10]+=ZR30(ZA[0]);
  811. ZA[22]+=ZCh(ZA[9],ZA[12],ZA[6]);
  812. ZA[22]+=ZA[14];
  813. ZA[22]+=0x76f988daU;
  814. ZA[22]+=ZR26(ZA[9]);
  815. ZA[2]=ZR15(ZA[14]);
  816. ZA[2]+=ZA[16];
  817. ZA[1]=ZA[22];
  818. ZA[1]+=ZA[17];
  819. ZA[5]+=ZMa(ZA[0],ZA[17],ZA[10]);
  820. ZA[5]+=ZR30(ZA[10]);
  821. ZA[6]+=ZCh(ZA[1],ZA[9],ZA[12]);
  822. ZA[6]+=ZA[19];
  823. ZA[6]+=0x983e5152U;
  824. ZA[6]+=ZR26(ZA[1]);
  825. ZA[17]=ZR15(ZA[19]);
  826. ZA[17]+=ZA[23];
  827. ZA[15]=ZA[6];
  828. ZA[15]+=ZA[0];
  829. ZA[22]+=ZMa(ZA[10],ZA[0],ZA[5]);
  830. ZA[22]+=ZR30(ZA[5]);
  831. ZA[12]+=ZCh(ZA[15],ZA[1],ZA[9]);
  832. ZA[12]+=ZA[2];
  833. ZA[12]+=0xa831c66dU;
  834. ZA[12]+=ZR26(ZA[15]);
  835. ZA[0]=ZR15(ZA[2]);
  836. ZA[0]+=ZA[20];
  837. ZA[13]=ZA[12];
  838. ZA[13]+=ZA[10];
  839. ZA[10]=ZMa(ZA[5],ZA[10],ZA[22]);
  840. ZA[10]+=ZA[6];
  841. ZA[10]+=ZR30(ZA[22]);
  842. ZA[9]+=ZCh(ZA[13],ZA[15],ZA[1]);
  843. ZA[9]+=ZA[17];
  844. ZA[9]+=0xb00327c8U;
  845. ZA[9]+=ZR26(ZA[13]);
  846. ZA[6]=ZR15(ZA[17]);
  847. ZA[6]+=ZA[21];
  848. ZA[8]=ZA[9];
  849. ZA[8]+=ZA[5];
  850. ZA[12]+=ZMa(ZA[22],ZA[5],ZA[10]);
  851. ZA[12]+=ZR30(ZA[10]);
  852. ZA[1]+=ZCh(ZA[8],ZA[13],ZA[15]);
  853. ZA[1]+=ZA[0];
  854. ZA[1]+=0xbf597fc7U;
  855. ZA[1]+=ZR26(ZA[8]);
  856. ZA[11]=ZR15(ZA[0]);
  857. ZA[11]+=ZA[24];
  858. ZA[3]=ZA[1];
  859. ZA[3]+=ZA[22];
  860. ZA[9]+=ZMa(ZA[10],ZA[22],ZA[12]);
  861. ZA[9]+=ZR30(ZA[12]);
  862. ZA[15]+=ZCh(ZA[3],ZA[8],ZA[13]);
  863. ZA[15]+=ZA[6];
  864. ZA[15]+=0xc6e00bf3U;
  865. ZA[15]+=ZR26(ZA[3]);
  866. ZA[5]=ZR15(ZA[6]);
  867. ZA[5]+=ZA[14];
  868. ZA[5]+=0x00400022U;
  869. ZA[1]+=ZMa(ZA[12],ZA[10],ZA[9]);
  870. ZA[1]+=ZR30(ZA[9]);
  871. ZA[10]+=ZA[15];
  872. ZA[13]+=ZCh(ZA[10],ZA[3],ZA[8]);
  873. ZA[13]+=ZA[11];
  874. ZA[13]+=0xd5a79147U;
  875. ZA[13]+=ZR26(ZA[10]);
  876. ZA[22]=ZR15(ZA[11]);
  877. ZA[22]+=ZA[19];
  878. ZA[22]+=ZR25(ZA[7]);
  879. ZA[22]+=0x00000100U;
  880. ZA[15]+=ZMa(ZA[9],ZA[12],ZA[1]);
  881. ZA[15]+=ZR30(ZA[1]);
  882. ZA[12]+=ZA[13];
  883. ZA[8]+=ZCh(ZA[12],ZA[10],ZA[3]);
  884. ZA[8]+=ZA[5];
  885. ZA[8]+=0x06ca6351U;
  886. ZA[8]+=ZR26(ZA[12]);
  887. ZA[7]+=ZR15(ZA[5]);
  888. ZA[7]+=ZR25(ZA[4]);
  889. ZA[7]+=ZA[2];
  890. ZA[13]+=ZMa(ZA[1],ZA[9],ZA[15]);
  891. ZA[13]+=ZR30(ZA[15]);
  892. ZA[9]+=ZA[8];
  893. ZA[3]+=ZCh(ZA[9],ZA[12],ZA[10]);
  894. ZA[3]+=ZA[22];
  895. ZA[3]+=0x14292967U;
  896. ZA[3]+=ZR26(ZA[9]);
  897. ZA[4]+=ZR15(ZA[22]);
  898. ZA[4]+=ZR25(ZA[16]);
  899. ZA[4]+=ZA[17];
  900. ZA[8]+=ZMa(ZA[15],ZA[1],ZA[13]);
  901. ZA[8]+=ZR30(ZA[13]);
  902. ZA[1]+=ZA[3];
  903. ZA[10]+=ZCh(ZA[1],ZA[9],ZA[12]);
  904. ZA[10]+=ZA[7];
  905. ZA[10]+=0x27b70a85U;
  906. ZA[10]+=ZR26(ZA[1]);
  907. ZA[16]+=ZR15(ZA[7]);
  908. ZA[16]+=ZA[0];
  909. ZA[16]+=ZR25(ZA[23]);
  910. ZA[3]+=ZMa(ZA[13],ZA[15],ZA[8]);
  911. ZA[3]+=ZR30(ZA[8]);
  912. ZA[15]+=ZA[10];
  913. ZA[12]+=ZCh(ZA[15],ZA[1],ZA[9]);
  914. ZA[12]+=ZA[4];
  915. ZA[12]+=0x2e1b2138U;
  916. ZA[12]+=ZR26(ZA[15]);
  917. ZA[23]+=ZR15(ZA[4]);
  918. ZA[23]+=ZA[6];
  919. ZA[23]+=ZR25(ZA[20]);
  920. ZA[10]+=ZMa(ZA[8],ZA[13],ZA[3]);
  921. ZA[10]+=ZR30(ZA[3]);
  922. ZA[13]+=ZA[12];
  923. ZA[9]+=ZCh(ZA[13],ZA[15],ZA[1]);
  924. ZA[9]+=ZA[16];
  925. ZA[9]+=0x4d2c6dfcU;
  926. ZA[9]+=ZR26(ZA[13]);
  927. ZA[20]+=ZR15(ZA[16]);
  928. ZA[20]+=ZR25(ZA[21]);
  929. ZA[20]+=ZA[11];
  930. ZA[12]+=ZMa(ZA[3],ZA[8],ZA[10]);
  931. ZA[12]+=ZR30(ZA[10]);
  932. ZA[8]+=ZA[9];
  933. ZA[1]+=ZCh(ZA[8],ZA[13],ZA[15]);
  934. ZA[1]+=ZA[23];
  935. ZA[1]+=0x53380d13U;
  936. ZA[1]+=ZR26(ZA[8]);
  937. ZA[21]+=ZR15(ZA[23]);
  938. ZA[21]+=ZA[5];
  939. ZA[21]+=ZR25(ZA[24]);
  940. ZA[9]+=ZMa(ZA[10],ZA[3],ZA[12]);
  941. ZA[9]+=ZR30(ZA[12]);
  942. ZA[3]+=ZA[1];
  943. ZA[15]+=ZCh(ZA[3],ZA[8],ZA[13]);
  944. ZA[15]+=ZA[20];
  945. ZA[15]+=0x650a7354U;
  946. ZA[15]+=ZR26(ZA[3]);
  947. ZA[24]+=ZR15(ZA[20]);
  948. ZA[24]+=ZA[22];
  949. ZA[24]+=ZR25(ZA[14]);
  950. ZA[1]+=ZMa(ZA[12],ZA[10],ZA[9]);
  951. ZA[1]+=ZR30(ZA[9]);
  952. ZA[10]+=ZA[15];
  953. ZA[13]+=ZCh(ZA[10],ZA[3],ZA[8]);
  954. ZA[13]+=ZA[21];
  955. ZA[13]+=0x766a0abbU;
  956. ZA[13]+=ZR26(ZA[10]);
  957. ZA[14]+=ZR15(ZA[21]);
  958. ZA[14]+=ZA[7];
  959. ZA[14]+=ZR25(ZA[19]);
  960. ZA[15]+=ZMa(ZA[9],ZA[12],ZA[1]);
  961. ZA[15]+=ZR30(ZA[1]);
  962. ZA[12]+=ZA[13];
  963. ZA[8]+=ZCh(ZA[12],ZA[10],ZA[3]);
  964. ZA[8]+=ZA[24];
  965. ZA[8]+=0x81c2c92eU;
  966. ZA[8]+=ZR26(ZA[12]);
  967. ZA[19]+=ZR15(ZA[24]);
  968. ZA[19]+=ZA[4];
  969. ZA[19]+=ZR25(ZA[2]);
  970. ZA[13]+=ZMa(ZA[1],ZA[9],ZA[15]);
  971. ZA[13]+=ZR30(ZA[15]);
  972. ZA[9]+=ZA[8];
  973. ZA[3]+=ZCh(ZA[9],ZA[12],ZA[10]);
  974. ZA[3]+=ZA[14];
  975. ZA[3]+=0x92722c85U;
  976. ZA[3]+=ZR26(ZA[9]);
  977. ZA[2]+=ZR15(ZA[14]);
  978. ZA[2]+=ZA[16];
  979. ZA[2]+=ZR25(ZA[17]);
  980. ZA[8]+=ZMa(ZA[15],ZA[1],ZA[13]);
  981. ZA[8]+=ZR30(ZA[13]);
  982. ZA[1]+=ZA[3];
  983. ZA[10]+=ZCh(ZA[1],ZA[9],ZA[12]);
  984. ZA[10]+=ZA[19];
  985. ZA[10]+=0xa2bfe8a1U;
  986. ZA[10]+=ZR26(ZA[1]);
  987. ZA[17]+=ZR15(ZA[19]);
  988. ZA[17]+=ZA[23];
  989. ZA[17]+=ZR25(ZA[0]);
  990. ZA[3]+=ZMa(ZA[13],ZA[15],ZA[8]);
  991. ZA[3]+=ZR30(ZA[8]);
  992. ZA[15]+=ZA[10];
  993. ZA[12]+=ZCh(ZA[15],ZA[1],ZA[9]);
  994. ZA[12]+=ZA[2];
  995. ZA[12]+=0xa81a664bU;
  996. ZA[12]+=ZR26(ZA[15]);
  997. ZA[0]+=ZR15(ZA[2]);
  998. ZA[0]+=ZA[20];
  999. ZA[0]+=ZR25(ZA[6]);
  1000. ZA[10]+=ZMa(ZA[8],ZA[13],ZA[3]);
  1001. ZA[10]+=ZR30(ZA[3]);
  1002. ZA[13]+=ZA[12];
  1003. ZA[9]+=ZCh(ZA[13],ZA[15],ZA[1]);
  1004. ZA[9]+=ZA[17];
  1005. ZA[9]+=0xc24b8b70U;
  1006. ZA[9]+=ZR26(ZA[13]);
  1007. ZA[6]+=ZR15(ZA[17]);
  1008. ZA[6]+=ZA[21];
  1009. ZA[6]+=ZR25(ZA[11]);
  1010. ZA[12]+=ZMa(ZA[3],ZA[8],ZA[10]);
  1011. ZA[12]+=ZR30(ZA[10]);
  1012. ZA[8]+=ZA[9];
  1013. ZA[1]+=ZCh(ZA[8],ZA[13],ZA[15]);
  1014. ZA[1]+=ZA[0];
  1015. ZA[1]+=0xc76c51a3U;
  1016. ZA[1]+=ZR26(ZA[8]);
  1017. ZA[11]+=ZR15(ZA[0]);
  1018. ZA[11]+=ZA[24];
  1019. ZA[11]+=ZR25(ZA[5]);
  1020. ZA[9]+=ZMa(ZA[10],ZA[3],ZA[12]);
  1021. ZA[9]+=ZR30(ZA[12]);
  1022. ZA[3]+=ZA[1];
  1023. ZA[15]+=ZCh(ZA[3],ZA[8],ZA[13]);
  1024. ZA[15]+=ZA[6];
  1025. ZA[15]+=0xd192e819U;
  1026. ZA[15]+=ZR26(ZA[3]);
  1027. ZA[5]+=ZR15(ZA[6]);
  1028. ZA[5]+=ZA[14];
  1029. ZA[5]+=ZR25(ZA[22]);
  1030. ZA[1]+=ZMa(ZA[12],ZA[10],ZA[9]);
  1031. ZA[1]+=ZR30(ZA[9]);
  1032. ZA[10]+=ZA[15];
  1033. ZA[13]+=ZCh(ZA[10],ZA[3],ZA[8]);
  1034. ZA[13]+=ZA[11];
  1035. ZA[13]+=0xd6990624U;
  1036. ZA[13]+=ZR26(ZA[10]);
  1037. ZA[22]+=ZR15(ZA[11]);
  1038. ZA[22]+=ZA[19];
  1039. ZA[22]+=ZR25(ZA[7]);
  1040. ZA[15]+=ZMa(ZA[9],ZA[12],ZA[1]);
  1041. ZA[15]+=ZR30(ZA[1]);
  1042. ZA[12]+=ZA[13];
  1043. ZA[8]+=ZCh(ZA[12],ZA[10],ZA[3]);
  1044. ZA[8]+=ZA[5];
  1045. ZA[8]+=0xf40e3585U;
  1046. ZA[8]+=ZR26(ZA[12]);
  1047. ZA[7]+=ZR15(ZA[5]);
  1048. ZA[7]+=ZA[2];
  1049. ZA[7]+=ZR25(ZA[4]);
  1050. ZA[13]+=ZMa(ZA[1],ZA[9],ZA[15]);
  1051. ZA[13]+=ZR30(ZA[15]);
  1052. ZA[9]+=ZA[8];
  1053. ZA[3]+=ZCh(ZA[9],ZA[12],ZA[10]);
  1054. ZA[3]+=ZA[22];
  1055. ZA[3]+=0x106aa070U;
  1056. ZA[3]+=ZR26(ZA[9]);
  1057. ZA[4]+=ZR15(ZA[22]);
  1058. ZA[4]+=ZA[17];
  1059. ZA[4]+=ZR25(ZA[16]);
  1060. ZA[8]+=ZMa(ZA[15],ZA[1],ZA[13]);
  1061. ZA[8]+=ZR30(ZA[13]);
  1062. ZA[1]+=ZA[3];
  1063. ZA[10]+=ZCh(ZA[1],ZA[9],ZA[12]);
  1064. ZA[10]+=ZA[7];
  1065. ZA[10]+=0x19a4c116U;
  1066. ZA[10]+=ZR26(ZA[1]);
  1067. ZA[16]+=ZR15(ZA[7]);
  1068. ZA[16]+=ZA[0];
  1069. ZA[16]+=ZR25(ZA[23]);
  1070. ZA[3]+=ZMa(ZA[13],ZA[15],ZA[8]);
  1071. ZA[3]+=ZR30(ZA[8]);
  1072. ZA[15]+=ZA[10];
  1073. ZA[12]+=ZCh(ZA[15],ZA[1],ZA[9]);
  1074. ZA[12]+=ZA[4];
  1075. ZA[12]+=0x1e376c08U;
  1076. ZA[12]+=ZR26(ZA[15]);
  1077. ZA[23]+=ZR15(ZA[4]);
  1078. ZA[23]+=ZA[6];
  1079. ZA[23]+=ZR25(ZA[20]);
  1080. ZA[10]+=ZMa(ZA[8],ZA[13],ZA[3]);
  1081. ZA[10]+=ZR30(ZA[3]);
  1082. ZA[13]+=ZA[12];
  1083. ZA[9]+=ZCh(ZA[13],ZA[15],ZA[1]);
  1084. ZA[9]+=ZA[16];
  1085. ZA[9]+=0x2748774cU;
  1086. ZA[9]+=ZR26(ZA[13]);
  1087. ZA[20]+=ZR15(ZA[16]);
  1088. ZA[20]+=ZA[11];
  1089. ZA[20]+=ZR25(ZA[21]);
  1090. ZA[12]+=ZMa(ZA[3],ZA[8],ZA[10]);
  1091. ZA[12]+=ZR30(ZA[10]);
  1092. ZA[8]+=ZA[9];
  1093. ZA[1]+=ZCh(ZA[8],ZA[13],ZA[15]);
  1094. ZA[1]+=ZA[23];
  1095. ZA[1]+=0x34b0bcb5U;
  1096. ZA[1]+=ZR26(ZA[8]);
  1097. ZA[21]+=ZR15(ZA[23]);
  1098. ZA[21]+=ZA[5];
  1099. ZA[21]+=ZR25(ZA[24]);
  1100. ZA[9]+=ZMa(ZA[10],ZA[3],ZA[12]);
  1101. ZA[9]+=ZR30(ZA[12]);
  1102. ZA[3]+=ZA[1];
  1103. ZA[15]+=ZCh(ZA[3],ZA[8],ZA[13]);
  1104. ZA[15]+=ZA[20];
  1105. ZA[15]+=0x391c0cb3U;
  1106. ZA[15]+=ZR26(ZA[3]);
  1107. ZA[24]+=ZR15(ZA[20]);
  1108. ZA[24]+=ZA[22];
  1109. ZA[24]+=ZR25(ZA[14]);
  1110. ZA[1]+=ZMa(ZA[12],ZA[10],ZA[9]);
  1111. ZA[1]+=ZR30(ZA[9]);
  1112. ZA[10]+=ZA[15];
  1113. ZA[13]+=ZCh(ZA[10],ZA[3],ZA[8]);
  1114. ZA[13]+=ZA[21];
  1115. ZA[13]+=0x4ed8aa4aU;
  1116. ZA[13]+=ZR26(ZA[10]);
  1117. ZA[7]+=ZR15(ZA[21]);
  1118. ZA[7]+=ZR25(ZA[19]);
  1119. ZA[7]+=ZA[14];
  1120. ZA[15]+=ZMa(ZA[9],ZA[12],ZA[1]);
  1121. ZA[15]+=ZR30(ZA[1]);
  1122. ZA[12]+=ZA[13];
  1123. ZA[8]+=ZCh(ZA[12],ZA[10],ZA[3]);
  1124. ZA[8]+=ZA[24];
  1125. ZA[8]+=0x5b9cca4fU;
  1126. ZA[8]+=ZR26(ZA[12]);
  1127. ZA[19]+=ZR15(ZA[24]);
  1128. ZA[19]+=ZA[4];
  1129. ZA[19]+=ZR25(ZA[2]);
  1130. ZA[13]+=ZMa(ZA[1],ZA[9],ZA[15]);
  1131. ZA[13]+=ZR30(ZA[15]);
  1132. ZA[9]+=ZA[8];
  1133. ZA[3]+=ZCh(ZA[9],ZA[12],ZA[10]);
  1134. ZA[3]+=ZA[7];
  1135. ZA[3]+=0x682e6ff3U;
  1136. ZA[3]+=ZR26(ZA[9]);
  1137. ZA[16]+=ZR15(ZA[7]);
  1138. ZA[16]+=ZR25(ZA[17]);
  1139. ZA[16]+=ZA[2];
  1140. ZA[8]+=ZMa(ZA[15],ZA[1],ZA[13]);
  1141. ZA[8]+=ZR30(ZA[13]);
  1142. ZA[1]+=ZA[3];
  1143. ZA[10]+=ZCh(ZA[1],ZA[9],ZA[12]);
  1144. ZA[10]+=ZA[19];
  1145. ZA[10]+=0x748f82eeU;
  1146. ZA[10]+=ZR26(ZA[1]);
  1147. ZA[17]+=ZR15(ZA[19]);
  1148. ZA[17]+=ZA[23];
  1149. ZA[17]+=ZR25(ZA[0]);
  1150. ZA[3]+=ZR30(ZA[8]);
  1151. ZA[3]+=ZMa(ZA[13],ZA[15],ZA[8]);
  1152. ZA[15]+=ZA[10];
  1153. ZA[12]+=ZCh(ZA[15],ZA[1],ZA[9]);
  1154. ZA[12]+=ZA[13];
  1155. ZA[12]+=ZA[16];
  1156. ZA[12]+=0x78a5636fU;
  1157. ZA[12]+=ZR26(ZA[15]);
  1158. ZA[9]+=ZR26(ZA[12]);
  1159. ZA[9]+=ZCh(ZA[12],ZA[15],ZA[1]);
  1160. ZA[9]+=ZA[8];
  1161. ZA[9]+=ZA[17];
  1162. ZA[9]+=0x84c87814U;
  1163. ZA[1]+=ZR26(ZA[9]);
  1164. ZA[1]+=ZCh(ZA[9],ZA[12],ZA[15]);
  1165. ZA[1]+=ZA[3];
  1166. ZA[1]+=ZR15(ZA[16]);
  1167. ZA[1]+=ZA[20];
  1168. ZA[1]+=ZR25(ZA[6]);
  1169. ZA[1]+=ZA[0];
  1170. ZA[1]+=0x8cc70208U;
  1171. #define FOUND (0x80)
  1172. #define NFLAG (0x7F)
  1173. #if defined(VECTORS2) || defined(VECTORS4)
  1174. ZA[15]+=ZR26(ZA[1]);
  1175. ZA[15]+=ZCh(ZA[1],ZA[9],ZA[12]);
  1176. ZA[15]+=ZA[10];
  1177. ZA[15]+=ZMa(ZA[8],ZA[13],ZA[3]);
  1178. ZA[15]+=ZR30(ZA[3]);
  1179. ZA[15]+=ZR15(ZA[17]);
  1180. ZA[15]+=ZA[21];
  1181. ZA[15]+=ZR25(ZA[11]);
  1182. ZA[15]+=ZA[6];
  1183. if (any(ZA[15] == 0x136032EDU)) {
  1184. if (ZA[15].x == 0x136032EDU)
  1185. output[FOUND] = output[NFLAG & Znonce.x] = Znonce.x;
  1186. if (ZA[15].y == 0x136032EDU)
  1187. output[FOUND] = output[NFLAG & Znonce.y] = Znonce.y;
  1188. #if defined(VECTORS4)
  1189. if (ZA[15].z == 0x136032EDU)
  1190. output[FOUND] = output[NFLAG & Znonce.z] = Znonce.z;
  1191. if (ZA[15].w == 0x136032EDU)
  1192. output[FOUND] = output[NFLAG & Znonce.w] = Znonce.w;
  1193. #endif
  1194. }
  1195. #else
  1196. if (ZA[15]+(ZCh(ZA[1],ZA[9],ZA[12])+ZA[10]+ZMa(ZA[8],ZA[13],ZA[3])+
  1197. ZR30(ZA[3])+ZR15(ZA[17])+ZA[21]+ZR25(ZA[11])+ZA[6])+ZR26(ZA[1]) == 0x136032EDU)
  1198. output[FOUND] = output[NFLAG & Znonce] = Znonce;
  1199. #endif
  1200. }