1; This file is generated from a similarly-named Perl script in the BoringSSL
2; source tree. Do not edit by hand.
3
4default	rel
5%define XMMWORD
6%define YMMWORD
7%define ZMMWORD
8
9%ifdef BORINGSSL_PREFIX
10%include "boringssl_prefix_symbols_nasm.inc"
11%endif
12section	.text code align=64
13
14
15ALIGN	16
16_x86_64_AES_encrypt:
17	xor	eax,DWORD[r15]
18	xor	ebx,DWORD[4+r15]
19	xor	ecx,DWORD[8+r15]
20	xor	edx,DWORD[12+r15]
21
22	mov	r13d,DWORD[240+r15]
23	sub	r13d,1
24	jmp	NEAR $L$enc_loop
25ALIGN	16
26$L$enc_loop:
27
28	movzx	esi,al
29	movzx	edi,bl
30	movzx	ebp,cl
31	mov	r10d,DWORD[rsi*8+r14]
32	mov	r11d,DWORD[rdi*8+r14]
33	mov	r12d,DWORD[rbp*8+r14]
34
35	movzx	esi,bh
36	movzx	edi,ch
37	movzx	ebp,dl
38	xor	r10d,DWORD[3+rsi*8+r14]
39	xor	r11d,DWORD[3+rdi*8+r14]
40	mov	r8d,DWORD[rbp*8+r14]
41
42	movzx	esi,dh
43	shr	ecx,16
44	movzx	ebp,ah
45	xor	r12d,DWORD[3+rsi*8+r14]
46	shr	edx,16
47	xor	r8d,DWORD[3+rbp*8+r14]
48
49	shr	ebx,16
50	lea	r15,[16+r15]
51	shr	eax,16
52
53	movzx	esi,cl
54	movzx	edi,dl
55	movzx	ebp,al
56	xor	r10d,DWORD[2+rsi*8+r14]
57	xor	r11d,DWORD[2+rdi*8+r14]
58	xor	r12d,DWORD[2+rbp*8+r14]
59
60	movzx	esi,dh
61	movzx	edi,ah
62	movzx	ebp,bl
63	xor	r10d,DWORD[1+rsi*8+r14]
64	xor	r11d,DWORD[1+rdi*8+r14]
65	xor	r8d,DWORD[2+rbp*8+r14]
66
67	mov	edx,DWORD[12+r15]
68	movzx	edi,bh
69	movzx	ebp,ch
70	mov	eax,DWORD[r15]
71	xor	r12d,DWORD[1+rdi*8+r14]
72	xor	r8d,DWORD[1+rbp*8+r14]
73
74	mov	ebx,DWORD[4+r15]
75	mov	ecx,DWORD[8+r15]
76	xor	eax,r10d
77	xor	ebx,r11d
78	xor	ecx,r12d
79	xor	edx,r8d
80	sub	r13d,1
81	jnz	NEAR $L$enc_loop
82	movzx	esi,al
83	movzx	edi,bl
84	movzx	ebp,cl
85	movzx	r10d,BYTE[2+rsi*8+r14]
86	movzx	r11d,BYTE[2+rdi*8+r14]
87	movzx	r12d,BYTE[2+rbp*8+r14]
88
89	movzx	esi,dl
90	movzx	edi,bh
91	movzx	ebp,ch
92	movzx	r8d,BYTE[2+rsi*8+r14]
93	mov	edi,DWORD[rdi*8+r14]
94	mov	ebp,DWORD[rbp*8+r14]
95
96	and	edi,0x0000ff00
97	and	ebp,0x0000ff00
98
99	xor	r10d,edi
100	xor	r11d,ebp
101	shr	ecx,16
102
103	movzx	esi,dh
104	movzx	edi,ah
105	shr	edx,16
106	mov	esi,DWORD[rsi*8+r14]
107	mov	edi,DWORD[rdi*8+r14]
108
109	and	esi,0x0000ff00
110	and	edi,0x0000ff00
111	shr	ebx,16
112	xor	r12d,esi
113	xor	r8d,edi
114	shr	eax,16
115
116	movzx	esi,cl
117	movzx	edi,dl
118	movzx	ebp,al
119	mov	esi,DWORD[rsi*8+r14]
120	mov	edi,DWORD[rdi*8+r14]
121	mov	ebp,DWORD[rbp*8+r14]
122
123	and	esi,0x00ff0000
124	and	edi,0x00ff0000
125	and	ebp,0x00ff0000
126
127	xor	r10d,esi
128	xor	r11d,edi
129	xor	r12d,ebp
130
131	movzx	esi,bl
132	movzx	edi,dh
133	movzx	ebp,ah
134	mov	esi,DWORD[rsi*8+r14]
135	mov	edi,DWORD[2+rdi*8+r14]
136	mov	ebp,DWORD[2+rbp*8+r14]
137
138	and	esi,0x00ff0000
139	and	edi,0xff000000
140	and	ebp,0xff000000
141
142	xor	r8d,esi
143	xor	r10d,edi
144	xor	r11d,ebp
145
146	movzx	esi,bh
147	movzx	edi,ch
148	mov	edx,DWORD[((16+12))+r15]
149	mov	esi,DWORD[2+rsi*8+r14]
150	mov	edi,DWORD[2+rdi*8+r14]
151	mov	eax,DWORD[((16+0))+r15]
152
153	and	esi,0xff000000
154	and	edi,0xff000000
155
156	xor	r12d,esi
157	xor	r8d,edi
158
159	mov	ebx,DWORD[((16+4))+r15]
160	mov	ecx,DWORD[((16+8))+r15]
161	xor	eax,r10d
162	xor	ebx,r11d
163	xor	ecx,r12d
164	xor	edx,r8d
165DB	0xf3,0xc3
166
167
168ALIGN	16
169_x86_64_AES_encrypt_compact:
170
171	lea	r8,[128+r14]
172	mov	edi,DWORD[((0-128))+r8]
173	mov	ebp,DWORD[((32-128))+r8]
174	mov	r10d,DWORD[((64-128))+r8]
175	mov	r11d,DWORD[((96-128))+r8]
176	mov	edi,DWORD[((128-128))+r8]
177	mov	ebp,DWORD[((160-128))+r8]
178	mov	r10d,DWORD[((192-128))+r8]
179	mov	r11d,DWORD[((224-128))+r8]
180	jmp	NEAR $L$enc_loop_compact
181ALIGN	16
182$L$enc_loop_compact:
183	xor	eax,DWORD[r15]
184	xor	ebx,DWORD[4+r15]
185	xor	ecx,DWORD[8+r15]
186	xor	edx,DWORD[12+r15]
187	lea	r15,[16+r15]
188	movzx	r10d,al
189	movzx	r11d,bl
190	movzx	r12d,cl
191	movzx	r8d,dl
192	movzx	esi,bh
193	movzx	edi,ch
194	shr	ecx,16
195	movzx	ebp,dh
196	movzx	r10d,BYTE[r10*1+r14]
197	movzx	r11d,BYTE[r11*1+r14]
198	movzx	r12d,BYTE[r12*1+r14]
199	movzx	r8d,BYTE[r8*1+r14]
200
201	movzx	r9d,BYTE[rsi*1+r14]
202	movzx	esi,ah
203	movzx	r13d,BYTE[rdi*1+r14]
204	movzx	edi,cl
205	movzx	ebp,BYTE[rbp*1+r14]
206	movzx	esi,BYTE[rsi*1+r14]
207
208	shl	r9d,8
209	shr	edx,16
210	shl	r13d,8
211	xor	r10d,r9d
212	shr	eax,16
213	movzx	r9d,dl
214	shr	ebx,16
215	xor	r11d,r13d
216	shl	ebp,8
217	movzx	r13d,al
218	movzx	edi,BYTE[rdi*1+r14]
219	xor	r12d,ebp
220
221	shl	esi,8
222	movzx	ebp,bl
223	shl	edi,16
224	xor	r8d,esi
225	movzx	r9d,BYTE[r9*1+r14]
226	movzx	esi,dh
227	movzx	r13d,BYTE[r13*1+r14]
228	xor	r10d,edi
229
230	shr	ecx,8
231	movzx	edi,ah
232	shl	r9d,16
233	shr	ebx,8
234	shl	r13d,16
235	xor	r11d,r9d
236	movzx	ebp,BYTE[rbp*1+r14]
237	movzx	esi,BYTE[rsi*1+r14]
238	movzx	edi,BYTE[rdi*1+r14]
239	movzx	edx,BYTE[rcx*1+r14]
240	movzx	ecx,BYTE[rbx*1+r14]
241
242	shl	ebp,16
243	xor	r12d,r13d
244	shl	esi,24
245	xor	r8d,ebp
246	shl	edi,24
247	xor	r10d,esi
248	shl	edx,24
249	xor	r11d,edi
250	shl	ecx,24
251	mov	eax,r10d
252	mov	ebx,r11d
253	xor	ecx,r12d
254	xor	edx,r8d
255	cmp	r15,QWORD[16+rsp]
256	je	NEAR $L$enc_compact_done
257	mov	r10d,0x80808080
258	mov	r11d,0x80808080
259	and	r10d,eax
260	and	r11d,ebx
261	mov	esi,r10d
262	mov	edi,r11d
263	shr	r10d,7
264	lea	r8d,[rax*1+rax]
265	shr	r11d,7
266	lea	r9d,[rbx*1+rbx]
267	sub	esi,r10d
268	sub	edi,r11d
269	and	r8d,0xfefefefe
270	and	r9d,0xfefefefe
271	and	esi,0x1b1b1b1b
272	and	edi,0x1b1b1b1b
273	mov	r10d,eax
274	mov	r11d,ebx
275	xor	r8d,esi
276	xor	r9d,edi
277
278	xor	eax,r8d
279	xor	ebx,r9d
280	mov	r12d,0x80808080
281	rol	eax,24
282	mov	ebp,0x80808080
283	rol	ebx,24
284	and	r12d,ecx
285	and	ebp,edx
286	xor	eax,r8d
287	xor	ebx,r9d
288	mov	esi,r12d
289	ror	r10d,16
290	mov	edi,ebp
291	ror	r11d,16
292	lea	r8d,[rcx*1+rcx]
293	shr	r12d,7
294	xor	eax,r10d
295	shr	ebp,7
296	xor	ebx,r11d
297	ror	r10d,8
298	lea	r9d,[rdx*1+rdx]
299	ror	r11d,8
300	sub	esi,r12d
301	sub	edi,ebp
302	xor	eax,r10d
303	xor	ebx,r11d
304
305	and	r8d,0xfefefefe
306	and	r9d,0xfefefefe
307	and	esi,0x1b1b1b1b
308	and	edi,0x1b1b1b1b
309	mov	r12d,ecx
310	mov	ebp,edx
311	xor	r8d,esi
312	xor	r9d,edi
313
314	ror	r12d,16
315	xor	ecx,r8d
316	ror	ebp,16
317	xor	edx,r9d
318	rol	ecx,24
319	mov	esi,DWORD[r14]
320	rol	edx,24
321	xor	ecx,r8d
322	mov	edi,DWORD[64+r14]
323	xor	edx,r9d
324	mov	r8d,DWORD[128+r14]
325	xor	ecx,r12d
326	ror	r12d,8
327	xor	edx,ebp
328	ror	ebp,8
329	xor	ecx,r12d
330	mov	r9d,DWORD[192+r14]
331	xor	edx,ebp
332	jmp	NEAR $L$enc_loop_compact
333ALIGN	16
334$L$enc_compact_done:
335	xor	eax,DWORD[r15]
336	xor	ebx,DWORD[4+r15]
337	xor	ecx,DWORD[8+r15]
338	xor	edx,DWORD[12+r15]
339DB	0xf3,0xc3
340
341
342ALIGN	16
343global	aes_nohw_encrypt
344
345
346aes_nohw_encrypt:
347	mov	QWORD[8+rsp],rdi	;WIN64 prologue
348	mov	QWORD[16+rsp],rsi
349	mov	rax,rsp
350$L$SEH_begin_aes_nohw_encrypt:
351	mov	rdi,rcx
352	mov	rsi,rdx
353	mov	rdx,r8
354
355
356
357	mov	rax,rsp
358
359	push	rbx
360
361	push	rbp
362
363	push	r12
364
365	push	r13
366
367	push	r14
368
369	push	r15
370
371
372
373	lea	rcx,[((-63))+rdx]
374	and	rsp,-64
375	sub	rcx,rsp
376	neg	rcx
377	and	rcx,0x3c0
378	sub	rsp,rcx
379	sub	rsp,32
380
381	mov	QWORD[16+rsp],rsi
382	mov	QWORD[24+rsp],rax
383
384$L$enc_prologue:
385
386	mov	r15,rdx
387	mov	r13d,DWORD[240+r15]
388
389	mov	eax,DWORD[rdi]
390	mov	ebx,DWORD[4+rdi]
391	mov	ecx,DWORD[8+rdi]
392	mov	edx,DWORD[12+rdi]
393
394	shl	r13d,4
395	lea	rbp,[r13*1+r15]
396	mov	QWORD[rsp],r15
397	mov	QWORD[8+rsp],rbp
398
399
400	lea	r14,[(($L$AES_Te+2048))]
401	lea	rbp,[768+rsp]
402	sub	rbp,r14
403	and	rbp,0x300
404	lea	r14,[rbp*1+r14]
405
406	call	_x86_64_AES_encrypt_compact
407
408	mov	r9,QWORD[16+rsp]
409	mov	rsi,QWORD[24+rsp]
410
411	mov	DWORD[r9],eax
412	mov	DWORD[4+r9],ebx
413	mov	DWORD[8+r9],ecx
414	mov	DWORD[12+r9],edx
415
416	mov	r15,QWORD[((-48))+rsi]
417
418	mov	r14,QWORD[((-40))+rsi]
419
420	mov	r13,QWORD[((-32))+rsi]
421
422	mov	r12,QWORD[((-24))+rsi]
423
424	mov	rbp,QWORD[((-16))+rsi]
425
426	mov	rbx,QWORD[((-8))+rsi]
427
428	lea	rsp,[rsi]
429
430$L$enc_epilogue:
431	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
432	mov	rsi,QWORD[16+rsp]
433	DB	0F3h,0C3h		;repret
434
435$L$SEH_end_aes_nohw_encrypt:
436
437ALIGN	16
438_x86_64_AES_decrypt:
439	xor	eax,DWORD[r15]
440	xor	ebx,DWORD[4+r15]
441	xor	ecx,DWORD[8+r15]
442	xor	edx,DWORD[12+r15]
443
444	mov	r13d,DWORD[240+r15]
445	sub	r13d,1
446	jmp	NEAR $L$dec_loop
447ALIGN	16
448$L$dec_loop:
449
450	movzx	esi,al
451	movzx	edi,bl
452	movzx	ebp,cl
453	mov	r10d,DWORD[rsi*8+r14]
454	mov	r11d,DWORD[rdi*8+r14]
455	mov	r12d,DWORD[rbp*8+r14]
456
457	movzx	esi,dh
458	movzx	edi,ah
459	movzx	ebp,dl
460	xor	r10d,DWORD[3+rsi*8+r14]
461	xor	r11d,DWORD[3+rdi*8+r14]
462	mov	r8d,DWORD[rbp*8+r14]
463
464	movzx	esi,bh
465	shr	eax,16
466	movzx	ebp,ch
467	xor	r12d,DWORD[3+rsi*8+r14]
468	shr	edx,16
469	xor	r8d,DWORD[3+rbp*8+r14]
470
471	shr	ebx,16
472	lea	r15,[16+r15]
473	shr	ecx,16
474
475	movzx	esi,cl
476	movzx	edi,dl
477	movzx	ebp,al
478	xor	r10d,DWORD[2+rsi*8+r14]
479	xor	r11d,DWORD[2+rdi*8+r14]
480	xor	r12d,DWORD[2+rbp*8+r14]
481
482	movzx	esi,bh
483	movzx	edi,ch
484	movzx	ebp,bl
485	xor	r10d,DWORD[1+rsi*8+r14]
486	xor	r11d,DWORD[1+rdi*8+r14]
487	xor	r8d,DWORD[2+rbp*8+r14]
488
489	movzx	esi,dh
490	mov	edx,DWORD[12+r15]
491	movzx	ebp,ah
492	xor	r12d,DWORD[1+rsi*8+r14]
493	mov	eax,DWORD[r15]
494	xor	r8d,DWORD[1+rbp*8+r14]
495
496	xor	eax,r10d
497	mov	ebx,DWORD[4+r15]
498	mov	ecx,DWORD[8+r15]
499	xor	ecx,r12d
500	xor	ebx,r11d
501	xor	edx,r8d
502	sub	r13d,1
503	jnz	NEAR $L$dec_loop
504	lea	r14,[2048+r14]
505	movzx	esi,al
506	movzx	edi,bl
507	movzx	ebp,cl
508	movzx	r10d,BYTE[rsi*1+r14]
509	movzx	r11d,BYTE[rdi*1+r14]
510	movzx	r12d,BYTE[rbp*1+r14]
511
512	movzx	esi,dl
513	movzx	edi,dh
514	movzx	ebp,ah
515	movzx	r8d,BYTE[rsi*1+r14]
516	movzx	edi,BYTE[rdi*1+r14]
517	movzx	ebp,BYTE[rbp*1+r14]
518
519	shl	edi,8
520	shl	ebp,8
521
522	xor	r10d,edi
523	xor	r11d,ebp
524	shr	edx,16
525
526	movzx	esi,bh
527	movzx	edi,ch
528	shr	eax,16
529	movzx	esi,BYTE[rsi*1+r14]
530	movzx	edi,BYTE[rdi*1+r14]
531
532	shl	esi,8
533	shl	edi,8
534	shr	ebx,16
535	xor	r12d,esi
536	xor	r8d,edi
537	shr	ecx,16
538
539	movzx	esi,cl
540	movzx	edi,dl
541	movzx	ebp,al
542	movzx	esi,BYTE[rsi*1+r14]
543	movzx	edi,BYTE[rdi*1+r14]
544	movzx	ebp,BYTE[rbp*1+r14]
545
546	shl	esi,16
547	shl	edi,16
548	shl	ebp,16
549
550	xor	r10d,esi
551	xor	r11d,edi
552	xor	r12d,ebp
553
554	movzx	esi,bl
555	movzx	edi,bh
556	movzx	ebp,ch
557	movzx	esi,BYTE[rsi*1+r14]
558	movzx	edi,BYTE[rdi*1+r14]
559	movzx	ebp,BYTE[rbp*1+r14]
560
561	shl	esi,16
562	shl	edi,24
563	shl	ebp,24
564
565	xor	r8d,esi
566	xor	r10d,edi
567	xor	r11d,ebp
568
569	movzx	esi,dh
570	movzx	edi,ah
571	mov	edx,DWORD[((16+12))+r15]
572	movzx	esi,BYTE[rsi*1+r14]
573	movzx	edi,BYTE[rdi*1+r14]
574	mov	eax,DWORD[((16+0))+r15]
575
576	shl	esi,24
577	shl	edi,24
578
579	xor	r12d,esi
580	xor	r8d,edi
581
582	mov	ebx,DWORD[((16+4))+r15]
583	mov	ecx,DWORD[((16+8))+r15]
584	lea	r14,[((-2048))+r14]
585	xor	eax,r10d
586	xor	ebx,r11d
587	xor	ecx,r12d
588	xor	edx,r8d
589DB	0xf3,0xc3
590
591
592ALIGN	16
593_x86_64_AES_decrypt_compact:
594
595	lea	r8,[128+r14]
596	mov	edi,DWORD[((0-128))+r8]
597	mov	ebp,DWORD[((32-128))+r8]
598	mov	r10d,DWORD[((64-128))+r8]
599	mov	r11d,DWORD[((96-128))+r8]
600	mov	edi,DWORD[((128-128))+r8]
601	mov	ebp,DWORD[((160-128))+r8]
602	mov	r10d,DWORD[((192-128))+r8]
603	mov	r11d,DWORD[((224-128))+r8]
604	jmp	NEAR $L$dec_loop_compact
605
606ALIGN	16
607$L$dec_loop_compact:
608	xor	eax,DWORD[r15]
609	xor	ebx,DWORD[4+r15]
610	xor	ecx,DWORD[8+r15]
611	xor	edx,DWORD[12+r15]
612	lea	r15,[16+r15]
613	movzx	r10d,al
614	movzx	r11d,bl
615	movzx	r12d,cl
616	movzx	r8d,dl
617	movzx	esi,dh
618	movzx	edi,ah
619	shr	edx,16
620	movzx	ebp,bh
621	movzx	r10d,BYTE[r10*1+r14]
622	movzx	r11d,BYTE[r11*1+r14]
623	movzx	r12d,BYTE[r12*1+r14]
624	movzx	r8d,BYTE[r8*1+r14]
625
626	movzx	r9d,BYTE[rsi*1+r14]
627	movzx	esi,ch
628	movzx	r13d,BYTE[rdi*1+r14]
629	movzx	ebp,BYTE[rbp*1+r14]
630	movzx	esi,BYTE[rsi*1+r14]
631
632	shr	ecx,16
633	shl	r13d,8
634	shl	r9d,8
635	movzx	edi,cl
636	shr	eax,16
637	xor	r10d,r9d
638	shr	ebx,16
639	movzx	r9d,dl
640
641	shl	ebp,8
642	xor	r11d,r13d
643	shl	esi,8
644	movzx	r13d,al
645	movzx	edi,BYTE[rdi*1+r14]
646	xor	r12d,ebp
647	movzx	ebp,bl
648
649	shl	edi,16
650	xor	r8d,esi
651	movzx	r9d,BYTE[r9*1+r14]
652	movzx	esi,bh
653	movzx	ebp,BYTE[rbp*1+r14]
654	xor	r10d,edi
655	movzx	r13d,BYTE[r13*1+r14]
656	movzx	edi,ch
657
658	shl	ebp,16
659	shl	r9d,16
660	shl	r13d,16
661	xor	r8d,ebp
662	movzx	ebp,dh
663	xor	r11d,r9d
664	shr	eax,8
665	xor	r12d,r13d
666
667	movzx	esi,BYTE[rsi*1+r14]
668	movzx	ebx,BYTE[rdi*1+r14]
669	movzx	ecx,BYTE[rbp*1+r14]
670	movzx	edx,BYTE[rax*1+r14]
671
672	mov	eax,r10d
673	shl	esi,24
674	shl	ebx,24
675	shl	ecx,24
676	xor	eax,esi
677	shl	edx,24
678	xor	ebx,r11d
679	xor	ecx,r12d
680	xor	edx,r8d
681	cmp	r15,QWORD[16+rsp]
682	je	NEAR $L$dec_compact_done
683
684	mov	rsi,QWORD[((256+0))+r14]
685	shl	rbx,32
686	shl	rdx,32
687	mov	rdi,QWORD[((256+8))+r14]
688	or	rax,rbx
689	or	rcx,rdx
690	mov	rbp,QWORD[((256+16))+r14]
691	mov	r9,rsi
692	mov	r12,rsi
693	and	r9,rax
694	and	r12,rcx
695	mov	rbx,r9
696	mov	rdx,r12
697	shr	r9,7
698	lea	r8,[rax*1+rax]
699	shr	r12,7
700	lea	r11,[rcx*1+rcx]
701	sub	rbx,r9
702	sub	rdx,r12
703	and	r8,rdi
704	and	r11,rdi
705	and	rbx,rbp
706	and	rdx,rbp
707	xor	r8,rbx
708	xor	r11,rdx
709	mov	r10,rsi
710	mov	r13,rsi
711
712	and	r10,r8
713	and	r13,r11
714	mov	rbx,r10
715	mov	rdx,r13
716	shr	r10,7
717	lea	r9,[r8*1+r8]
718	shr	r13,7
719	lea	r12,[r11*1+r11]
720	sub	rbx,r10
721	sub	rdx,r13
722	and	r9,rdi
723	and	r12,rdi
724	and	rbx,rbp
725	and	rdx,rbp
726	xor	r9,rbx
727	xor	r12,rdx
728	mov	r10,rsi
729	mov	r13,rsi
730
731	and	r10,r9
732	and	r13,r12
733	mov	rbx,r10
734	mov	rdx,r13
735	shr	r10,7
736	xor	r8,rax
737	shr	r13,7
738	xor	r11,rcx
739	sub	rbx,r10
740	sub	rdx,r13
741	lea	r10,[r9*1+r9]
742	lea	r13,[r12*1+r12]
743	xor	r9,rax
744	xor	r12,rcx
745	and	r10,rdi
746	and	r13,rdi
747	and	rbx,rbp
748	and	rdx,rbp
749	xor	r10,rbx
750	xor	r13,rdx
751
752	xor	rax,r10
753	xor	rcx,r13
754	xor	r8,r10
755	xor	r11,r13
756	mov	rbx,rax
757	mov	rdx,rcx
758	xor	r9,r10
759	shr	rbx,32
760	xor	r12,r13
761	shr	rdx,32
762	xor	r10,r8
763	rol	eax,8
764	xor	r13,r11
765	rol	ecx,8
766	xor	r10,r9
767	rol	ebx,8
768	xor	r13,r12
769
770	rol	edx,8
771	xor	eax,r10d
772	shr	r10,32
773	xor	ecx,r13d
774	shr	r13,32
775	xor	ebx,r10d
776	xor	edx,r13d
777
778	mov	r10,r8
779	rol	r8d,24
780	mov	r13,r11
781	rol	r11d,24
782	shr	r10,32
783	xor	eax,r8d
784	shr	r13,32
785	xor	ecx,r11d
786	rol	r10d,24
787	mov	r8,r9
788	rol	r13d,24
789	mov	r11,r12
790	shr	r8,32
791	xor	ebx,r10d
792	shr	r11,32
793	xor	edx,r13d
794
795	mov	rsi,QWORD[r14]
796	rol	r9d,16
797	mov	rdi,QWORD[64+r14]
798	rol	r12d,16
799	mov	rbp,QWORD[128+r14]
800	rol	r8d,16
801	mov	r10,QWORD[192+r14]
802	xor	eax,r9d
803	rol	r11d,16
804	xor	ecx,r12d
805	mov	r13,QWORD[256+r14]
806	xor	ebx,r8d
807	xor	edx,r11d
808	jmp	NEAR $L$dec_loop_compact
809ALIGN	16
810$L$dec_compact_done:
811	xor	eax,DWORD[r15]
812	xor	ebx,DWORD[4+r15]
813	xor	ecx,DWORD[8+r15]
814	xor	edx,DWORD[12+r15]
815DB	0xf3,0xc3
816
817
818ALIGN	16
819global	aes_nohw_decrypt
820
821
822aes_nohw_decrypt:
823	mov	QWORD[8+rsp],rdi	;WIN64 prologue
824	mov	QWORD[16+rsp],rsi
825	mov	rax,rsp
826$L$SEH_begin_aes_nohw_decrypt:
827	mov	rdi,rcx
828	mov	rsi,rdx
829	mov	rdx,r8
830
831
832
833	mov	rax,rsp
834
835	push	rbx
836
837	push	rbp
838
839	push	r12
840
841	push	r13
842
843	push	r14
844
845	push	r15
846
847
848
849	lea	rcx,[((-63))+rdx]
850	and	rsp,-64
851	sub	rcx,rsp
852	neg	rcx
853	and	rcx,0x3c0
854	sub	rsp,rcx
855	sub	rsp,32
856
857	mov	QWORD[16+rsp],rsi
858	mov	QWORD[24+rsp],rax
859
860$L$dec_prologue:
861
862	mov	r15,rdx
863	mov	r13d,DWORD[240+r15]
864
865	mov	eax,DWORD[rdi]
866	mov	ebx,DWORD[4+rdi]
867	mov	ecx,DWORD[8+rdi]
868	mov	edx,DWORD[12+rdi]
869
870	shl	r13d,4
871	lea	rbp,[r13*1+r15]
872	mov	QWORD[rsp],r15
873	mov	QWORD[8+rsp],rbp
874
875
876	lea	r14,[(($L$AES_Td+2048))]
877	lea	rbp,[768+rsp]
878	sub	rbp,r14
879	and	rbp,0x300
880	lea	r14,[rbp*1+r14]
881	shr	rbp,3
882	add	r14,rbp
883
884	call	_x86_64_AES_decrypt_compact
885
886	mov	r9,QWORD[16+rsp]
887	mov	rsi,QWORD[24+rsp]
888
889	mov	DWORD[r9],eax
890	mov	DWORD[4+r9],ebx
891	mov	DWORD[8+r9],ecx
892	mov	DWORD[12+r9],edx
893
894	mov	r15,QWORD[((-48))+rsi]
895
896	mov	r14,QWORD[((-40))+rsi]
897
898	mov	r13,QWORD[((-32))+rsi]
899
900	mov	r12,QWORD[((-24))+rsi]
901
902	mov	rbp,QWORD[((-16))+rsi]
903
904	mov	rbx,QWORD[((-8))+rsi]
905
906	lea	rsp,[rsi]
907
908$L$dec_epilogue:
909	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
910	mov	rsi,QWORD[16+rsp]
911	DB	0F3h,0C3h		;repret
912
913$L$SEH_end_aes_nohw_decrypt:
914ALIGN	16
915global	aes_nohw_set_encrypt_key
916
917aes_nohw_set_encrypt_key:
918	mov	QWORD[8+rsp],rdi	;WIN64 prologue
919	mov	QWORD[16+rsp],rsi
920	mov	rax,rsp
921$L$SEH_begin_aes_nohw_set_encrypt_key:
922	mov	rdi,rcx
923	mov	rsi,rdx
924	mov	rdx,r8
925
926
927
928	push	rbx
929
930	push	rbp
931
932	push	r12
933
934	push	r13
935
936	push	r14
937
938	push	r15
939
940	sub	rsp,8
941
942$L$enc_key_prologue:
943
944	call	_x86_64_AES_set_encrypt_key
945
946	mov	rbp,QWORD[40+rsp]
947
948	mov	rbx,QWORD[48+rsp]
949
950	add	rsp,56
951
952$L$enc_key_epilogue:
953	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
954	mov	rsi,QWORD[16+rsp]
955	DB	0F3h,0C3h		;repret
956
957$L$SEH_end_aes_nohw_set_encrypt_key:
958
959
960ALIGN	16
961_x86_64_AES_set_encrypt_key:
962
963	mov	ecx,esi
964	mov	rsi,rdi
965	mov	rdi,rdx
966
967	test	rsi,-1
968	jz	NEAR $L$badpointer
969	test	rdi,-1
970	jz	NEAR $L$badpointer
971
972	lea	rbp,[$L$AES_Te]
973	lea	rbp,[((2048+128))+rbp]
974
975
976	mov	eax,DWORD[((0-128))+rbp]
977	mov	ebx,DWORD[((32-128))+rbp]
978	mov	r8d,DWORD[((64-128))+rbp]
979	mov	edx,DWORD[((96-128))+rbp]
980	mov	eax,DWORD[((128-128))+rbp]
981	mov	ebx,DWORD[((160-128))+rbp]
982	mov	r8d,DWORD[((192-128))+rbp]
983	mov	edx,DWORD[((224-128))+rbp]
984
985	cmp	ecx,128
986	je	NEAR $L$10rounds
987	cmp	ecx,192
988	je	NEAR $L$12rounds
989	cmp	ecx,256
990	je	NEAR $L$14rounds
991	mov	rax,-2
992	jmp	NEAR $L$exit
993
994$L$10rounds:
995	mov	rax,QWORD[rsi]
996	mov	rdx,QWORD[8+rsi]
997	mov	QWORD[rdi],rax
998	mov	QWORD[8+rdi],rdx
999
1000	shr	rdx,32
1001	xor	ecx,ecx
1002	jmp	NEAR $L$10shortcut
1003ALIGN	4
1004$L$10loop:
1005	mov	eax,DWORD[rdi]
1006	mov	edx,DWORD[12+rdi]
1007$L$10shortcut:
1008	movzx	esi,dl
1009	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1010	movzx	esi,dh
1011	shl	ebx,24
1012	xor	eax,ebx
1013
1014	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1015	shr	edx,16
1016	movzx	esi,dl
1017	xor	eax,ebx
1018
1019	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1020	movzx	esi,dh
1021	shl	ebx,8
1022	xor	eax,ebx
1023
1024	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1025	shl	ebx,16
1026	xor	eax,ebx
1027
1028	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
1029	mov	DWORD[16+rdi],eax
1030	xor	eax,DWORD[4+rdi]
1031	mov	DWORD[20+rdi],eax
1032	xor	eax,DWORD[8+rdi]
1033	mov	DWORD[24+rdi],eax
1034	xor	eax,DWORD[12+rdi]
1035	mov	DWORD[28+rdi],eax
1036	add	ecx,1
1037	lea	rdi,[16+rdi]
1038	cmp	ecx,10
1039	jl	NEAR $L$10loop
1040
1041	mov	DWORD[80+rdi],10
1042	xor	rax,rax
1043	jmp	NEAR $L$exit
1044
1045$L$12rounds:
1046	mov	rax,QWORD[rsi]
1047	mov	rbx,QWORD[8+rsi]
1048	mov	rdx,QWORD[16+rsi]
1049	mov	QWORD[rdi],rax
1050	mov	QWORD[8+rdi],rbx
1051	mov	QWORD[16+rdi],rdx
1052
1053	shr	rdx,32
1054	xor	ecx,ecx
1055	jmp	NEAR $L$12shortcut
1056ALIGN	4
1057$L$12loop:
1058	mov	eax,DWORD[rdi]
1059	mov	edx,DWORD[20+rdi]
1060$L$12shortcut:
1061	movzx	esi,dl
1062	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1063	movzx	esi,dh
1064	shl	ebx,24
1065	xor	eax,ebx
1066
1067	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1068	shr	edx,16
1069	movzx	esi,dl
1070	xor	eax,ebx
1071
1072	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1073	movzx	esi,dh
1074	shl	ebx,8
1075	xor	eax,ebx
1076
1077	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1078	shl	ebx,16
1079	xor	eax,ebx
1080
1081	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
1082	mov	DWORD[24+rdi],eax
1083	xor	eax,DWORD[4+rdi]
1084	mov	DWORD[28+rdi],eax
1085	xor	eax,DWORD[8+rdi]
1086	mov	DWORD[32+rdi],eax
1087	xor	eax,DWORD[12+rdi]
1088	mov	DWORD[36+rdi],eax
1089
1090	cmp	ecx,7
1091	je	NEAR $L$12break
1092	add	ecx,1
1093
1094	xor	eax,DWORD[16+rdi]
1095	mov	DWORD[40+rdi],eax
1096	xor	eax,DWORD[20+rdi]
1097	mov	DWORD[44+rdi],eax
1098
1099	lea	rdi,[24+rdi]
1100	jmp	NEAR $L$12loop
1101$L$12break:
1102	mov	DWORD[72+rdi],12
1103	xor	rax,rax
1104	jmp	NEAR $L$exit
1105
1106$L$14rounds:
1107	mov	rax,QWORD[rsi]
1108	mov	rbx,QWORD[8+rsi]
1109	mov	rcx,QWORD[16+rsi]
1110	mov	rdx,QWORD[24+rsi]
1111	mov	QWORD[rdi],rax
1112	mov	QWORD[8+rdi],rbx
1113	mov	QWORD[16+rdi],rcx
1114	mov	QWORD[24+rdi],rdx
1115
1116	shr	rdx,32
1117	xor	ecx,ecx
1118	jmp	NEAR $L$14shortcut
1119ALIGN	4
1120$L$14loop:
1121	mov	eax,DWORD[rdi]
1122	mov	edx,DWORD[28+rdi]
1123$L$14shortcut:
1124	movzx	esi,dl
1125	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1126	movzx	esi,dh
1127	shl	ebx,24
1128	xor	eax,ebx
1129
1130	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1131	shr	edx,16
1132	movzx	esi,dl
1133	xor	eax,ebx
1134
1135	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1136	movzx	esi,dh
1137	shl	ebx,8
1138	xor	eax,ebx
1139
1140	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1141	shl	ebx,16
1142	xor	eax,ebx
1143
1144	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
1145	mov	DWORD[32+rdi],eax
1146	xor	eax,DWORD[4+rdi]
1147	mov	DWORD[36+rdi],eax
1148	xor	eax,DWORD[8+rdi]
1149	mov	DWORD[40+rdi],eax
1150	xor	eax,DWORD[12+rdi]
1151	mov	DWORD[44+rdi],eax
1152
1153	cmp	ecx,6
1154	je	NEAR $L$14break
1155	add	ecx,1
1156
1157	mov	edx,eax
1158	mov	eax,DWORD[16+rdi]
1159	movzx	esi,dl
1160	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1161	movzx	esi,dh
1162	xor	eax,ebx
1163
1164	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1165	shr	edx,16
1166	shl	ebx,8
1167	movzx	esi,dl
1168	xor	eax,ebx
1169
1170	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1171	movzx	esi,dh
1172	shl	ebx,16
1173	xor	eax,ebx
1174
1175	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
1176	shl	ebx,24
1177	xor	eax,ebx
1178
1179	mov	DWORD[48+rdi],eax
1180	xor	eax,DWORD[20+rdi]
1181	mov	DWORD[52+rdi],eax
1182	xor	eax,DWORD[24+rdi]
1183	mov	DWORD[56+rdi],eax
1184	xor	eax,DWORD[28+rdi]
1185	mov	DWORD[60+rdi],eax
1186
1187	lea	rdi,[32+rdi]
1188	jmp	NEAR $L$14loop
1189$L$14break:
1190	mov	DWORD[48+rdi],14
1191	xor	rax,rax
1192	jmp	NEAR $L$exit
1193
1194$L$badpointer:
1195	mov	rax,-1
1196$L$exit:
1197DB	0xf3,0xc3
1198
1199
1200ALIGN	16
1201global	aes_nohw_set_decrypt_key
1202
1203aes_nohw_set_decrypt_key:
1204	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1205	mov	QWORD[16+rsp],rsi
1206	mov	rax,rsp
1207$L$SEH_begin_aes_nohw_set_decrypt_key:
1208	mov	rdi,rcx
1209	mov	rsi,rdx
1210	mov	rdx,r8
1211
1212
1213
1214	push	rbx
1215
1216	push	rbp
1217
1218	push	r12
1219
1220	push	r13
1221
1222	push	r14
1223
1224	push	r15
1225
1226	push	rdx
1227
1228$L$dec_key_prologue:
1229
1230	call	_x86_64_AES_set_encrypt_key
1231	mov	r8,QWORD[rsp]
1232	cmp	eax,0
1233	jne	NEAR $L$abort
1234
1235	mov	r14d,DWORD[240+r8]
1236	xor	rdi,rdi
1237	lea	rcx,[r14*4+rdi]
1238	mov	rsi,r8
1239	lea	rdi,[rcx*4+r8]
1240ALIGN	4
1241$L$invert:
1242	mov	rax,QWORD[rsi]
1243	mov	rbx,QWORD[8+rsi]
1244	mov	rcx,QWORD[rdi]
1245	mov	rdx,QWORD[8+rdi]
1246	mov	QWORD[rdi],rax
1247	mov	QWORD[8+rdi],rbx
1248	mov	QWORD[rsi],rcx
1249	mov	QWORD[8+rsi],rdx
1250	lea	rsi,[16+rsi]
1251	lea	rdi,[((-16))+rdi]
1252	cmp	rdi,rsi
1253	jne	NEAR $L$invert
1254
1255	lea	rax,[(($L$AES_Te+2048+1024))]
1256
1257	mov	rsi,QWORD[40+rax]
1258	mov	rdi,QWORD[48+rax]
1259	mov	rbp,QWORD[56+rax]
1260
1261	mov	r15,r8
1262	sub	r14d,1
1263ALIGN	4
1264$L$permute:
1265	lea	r15,[16+r15]
1266	mov	rax,QWORD[r15]
1267	mov	rcx,QWORD[8+r15]
1268	mov	r9,rsi
1269	mov	r12,rsi
1270	and	r9,rax
1271	and	r12,rcx
1272	mov	rbx,r9
1273	mov	rdx,r12
1274	shr	r9,7
1275	lea	r8,[rax*1+rax]
1276	shr	r12,7
1277	lea	r11,[rcx*1+rcx]
1278	sub	rbx,r9
1279	sub	rdx,r12
1280	and	r8,rdi
1281	and	r11,rdi
1282	and	rbx,rbp
1283	and	rdx,rbp
1284	xor	r8,rbx
1285	xor	r11,rdx
1286	mov	r10,rsi
1287	mov	r13,rsi
1288
1289	and	r10,r8
1290	and	r13,r11
1291	mov	rbx,r10
1292	mov	rdx,r13
1293	shr	r10,7
1294	lea	r9,[r8*1+r8]
1295	shr	r13,7
1296	lea	r12,[r11*1+r11]
1297	sub	rbx,r10
1298	sub	rdx,r13
1299	and	r9,rdi
1300	and	r12,rdi
1301	and	rbx,rbp
1302	and	rdx,rbp
1303	xor	r9,rbx
1304	xor	r12,rdx
1305	mov	r10,rsi
1306	mov	r13,rsi
1307
1308	and	r10,r9
1309	and	r13,r12
1310	mov	rbx,r10
1311	mov	rdx,r13
1312	shr	r10,7
1313	xor	r8,rax
1314	shr	r13,7
1315	xor	r11,rcx
1316	sub	rbx,r10
1317	sub	rdx,r13
1318	lea	r10,[r9*1+r9]
1319	lea	r13,[r12*1+r12]
1320	xor	r9,rax
1321	xor	r12,rcx
1322	and	r10,rdi
1323	and	r13,rdi
1324	and	rbx,rbp
1325	and	rdx,rbp
1326	xor	r10,rbx
1327	xor	r13,rdx
1328
1329	xor	rax,r10
1330	xor	rcx,r13
1331	xor	r8,r10
1332	xor	r11,r13
1333	mov	rbx,rax
1334	mov	rdx,rcx
1335	xor	r9,r10
1336	shr	rbx,32
1337	xor	r12,r13
1338	shr	rdx,32
1339	xor	r10,r8
1340	rol	eax,8
1341	xor	r13,r11
1342	rol	ecx,8
1343	xor	r10,r9
1344	rol	ebx,8
1345	xor	r13,r12
1346
1347	rol	edx,8
1348	xor	eax,r10d
1349	shr	r10,32
1350	xor	ecx,r13d
1351	shr	r13,32
1352	xor	ebx,r10d
1353	xor	edx,r13d
1354
1355	mov	r10,r8
1356	rol	r8d,24
1357	mov	r13,r11
1358	rol	r11d,24
1359	shr	r10,32
1360	xor	eax,r8d
1361	shr	r13,32
1362	xor	ecx,r11d
1363	rol	r10d,24
1364	mov	r8,r9
1365	rol	r13d,24
1366	mov	r11,r12
1367	shr	r8,32
1368	xor	ebx,r10d
1369	shr	r11,32
1370	xor	edx,r13d
1371
1372
1373	rol	r9d,16
1374
1375	rol	r12d,16
1376
1377	rol	r8d,16
1378
1379	xor	eax,r9d
1380	rol	r11d,16
1381	xor	ecx,r12d
1382
1383	xor	ebx,r8d
1384	xor	edx,r11d
1385	mov	DWORD[r15],eax
1386	mov	DWORD[4+r15],ebx
1387	mov	DWORD[8+r15],ecx
1388	mov	DWORD[12+r15],edx
1389	sub	r14d,1
1390	jnz	NEAR $L$permute
1391
1392	xor	rax,rax
1393$L$abort:
1394	mov	r15,QWORD[8+rsp]
1395
1396	mov	r14,QWORD[16+rsp]
1397
1398	mov	r13,QWORD[24+rsp]
1399
1400	mov	r12,QWORD[32+rsp]
1401
1402	mov	rbp,QWORD[40+rsp]
1403
1404	mov	rbx,QWORD[48+rsp]
1405
1406	add	rsp,56
1407
1408$L$dec_key_epilogue:
1409	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1410	mov	rsi,QWORD[16+rsp]
1411	DB	0F3h,0C3h		;repret
1412
1413$L$SEH_end_aes_nohw_set_decrypt_key:
1414ALIGN	16
1415global	aes_nohw_cbc_encrypt
1416
1417EXTERN	OPENSSL_ia32cap_P
1418
1419aes_nohw_cbc_encrypt:
1420	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1421	mov	QWORD[16+rsp],rsi
1422	mov	rax,rsp
1423$L$SEH_begin_aes_nohw_cbc_encrypt:
1424	mov	rdi,rcx
1425	mov	rsi,rdx
1426	mov	rdx,r8
1427	mov	rcx,r9
1428	mov	r8,QWORD[40+rsp]
1429	mov	r9,QWORD[48+rsp]
1430
1431
1432
1433	cmp	rdx,0
1434	je	NEAR $L$cbc_epilogue
1435	pushfq
1436
1437
1438
1439	push	rbx
1440
1441	push	rbp
1442
1443	push	r12
1444
1445	push	r13
1446
1447	push	r14
1448
1449	push	r15
1450
1451$L$cbc_prologue:
1452
1453	cld
1454	mov	r9d,r9d
1455
1456	lea	r14,[$L$AES_Te]
1457	lea	r10,[$L$AES_Td]
1458	cmp	r9,0
1459	cmove	r14,r10
1460
1461
1462	lea	r10,[OPENSSL_ia32cap_P]
1463	mov	r10d,DWORD[r10]
1464	cmp	rdx,512
1465	jb	NEAR $L$cbc_slow_prologue
1466	test	rdx,15
1467	jnz	NEAR $L$cbc_slow_prologue
1468	bt	r10d,28
1469	jc	NEAR $L$cbc_slow_prologue
1470
1471
1472	lea	r15,[((-88-248))+rsp]
1473	and	r15,-64
1474
1475
1476	mov	r10,r14
1477	lea	r11,[2304+r14]
1478	mov	r12,r15
1479	and	r10,0xFFF
1480	and	r11,0xFFF
1481	and	r12,0xFFF
1482
1483	cmp	r12,r11
1484	jb	NEAR $L$cbc_te_break_out
1485	sub	r12,r11
1486	sub	r15,r12
1487	jmp	NEAR $L$cbc_te_ok
1488$L$cbc_te_break_out:
1489	sub	r12,r10
1490	and	r12,0xFFF
1491	add	r12,320
1492	sub	r15,r12
1493ALIGN	4
1494$L$cbc_te_ok:
1495
1496	xchg	r15,rsp
1497
1498
1499	mov	QWORD[16+rsp],r15
1500
1501$L$cbc_fast_body:
1502	mov	QWORD[24+rsp],rdi
1503	mov	QWORD[32+rsp],rsi
1504	mov	QWORD[40+rsp],rdx
1505	mov	QWORD[48+rsp],rcx
1506	mov	QWORD[56+rsp],r8
1507	mov	DWORD[((80+240))+rsp],0
1508	mov	rbp,r8
1509	mov	rbx,r9
1510	mov	r9,rsi
1511	mov	r8,rdi
1512	mov	r15,rcx
1513
1514	mov	eax,DWORD[240+r15]
1515
1516	mov	r10,r15
1517	sub	r10,r14
1518	and	r10,0xfff
1519	cmp	r10,2304
1520	jb	NEAR $L$cbc_do_ecopy
1521	cmp	r10,4096-248
1522	jb	NEAR $L$cbc_skip_ecopy
1523ALIGN	4
1524$L$cbc_do_ecopy:
1525	mov	rsi,r15
1526	lea	rdi,[80+rsp]
1527	lea	r15,[80+rsp]
1528	mov	ecx,240/8
1529	DD	0x90A548F3
1530	mov	DWORD[rdi],eax
1531$L$cbc_skip_ecopy:
1532	mov	QWORD[rsp],r15
1533
1534	mov	ecx,18
1535ALIGN	4
1536$L$cbc_prefetch_te:
1537	mov	r10,QWORD[r14]
1538	mov	r11,QWORD[32+r14]
1539	mov	r12,QWORD[64+r14]
1540	mov	r13,QWORD[96+r14]
1541	lea	r14,[128+r14]
1542	sub	ecx,1
1543	jnz	NEAR $L$cbc_prefetch_te
1544	lea	r14,[((-2304))+r14]
1545
1546	cmp	rbx,0
1547	je	NEAR $L$FAST_DECRYPT
1548
1549
1550	mov	eax,DWORD[rbp]
1551	mov	ebx,DWORD[4+rbp]
1552	mov	ecx,DWORD[8+rbp]
1553	mov	edx,DWORD[12+rbp]
1554
1555ALIGN	4
1556$L$cbc_fast_enc_loop:
1557	xor	eax,DWORD[r8]
1558	xor	ebx,DWORD[4+r8]
1559	xor	ecx,DWORD[8+r8]
1560	xor	edx,DWORD[12+r8]
1561	mov	r15,QWORD[rsp]
1562	mov	QWORD[24+rsp],r8
1563
1564	call	_x86_64_AES_encrypt
1565
1566	mov	r8,QWORD[24+rsp]
1567	mov	r10,QWORD[40+rsp]
1568	mov	DWORD[r9],eax
1569	mov	DWORD[4+r9],ebx
1570	mov	DWORD[8+r9],ecx
1571	mov	DWORD[12+r9],edx
1572
1573	lea	r8,[16+r8]
1574	lea	r9,[16+r9]
1575	sub	r10,16
1576	test	r10,-16
1577	mov	QWORD[40+rsp],r10
1578	jnz	NEAR $L$cbc_fast_enc_loop
1579	mov	rbp,QWORD[56+rsp]
1580	mov	DWORD[rbp],eax
1581	mov	DWORD[4+rbp],ebx
1582	mov	DWORD[8+rbp],ecx
1583	mov	DWORD[12+rbp],edx
1584
1585	jmp	NEAR $L$cbc_fast_cleanup
1586
1587
1588ALIGN	16
1589$L$FAST_DECRYPT:
1590	cmp	r9,r8
1591	je	NEAR $L$cbc_fast_dec_in_place
1592
1593	mov	QWORD[64+rsp],rbp
1594ALIGN	4
1595$L$cbc_fast_dec_loop:
1596	mov	eax,DWORD[r8]
1597	mov	ebx,DWORD[4+r8]
1598	mov	ecx,DWORD[8+r8]
1599	mov	edx,DWORD[12+r8]
1600	mov	r15,QWORD[rsp]
1601	mov	QWORD[24+rsp],r8
1602
1603	call	_x86_64_AES_decrypt
1604
1605	mov	rbp,QWORD[64+rsp]
1606	mov	r8,QWORD[24+rsp]
1607	mov	r10,QWORD[40+rsp]
1608	xor	eax,DWORD[rbp]
1609	xor	ebx,DWORD[4+rbp]
1610	xor	ecx,DWORD[8+rbp]
1611	xor	edx,DWORD[12+rbp]
1612	mov	rbp,r8
1613
1614	sub	r10,16
1615	mov	QWORD[40+rsp],r10
1616	mov	QWORD[64+rsp],rbp
1617
1618	mov	DWORD[r9],eax
1619	mov	DWORD[4+r9],ebx
1620	mov	DWORD[8+r9],ecx
1621	mov	DWORD[12+r9],edx
1622
1623	lea	r8,[16+r8]
1624	lea	r9,[16+r9]
1625	jnz	NEAR $L$cbc_fast_dec_loop
1626	mov	r12,QWORD[56+rsp]
1627	mov	r10,QWORD[rbp]
1628	mov	r11,QWORD[8+rbp]
1629	mov	QWORD[r12],r10
1630	mov	QWORD[8+r12],r11
1631	jmp	NEAR $L$cbc_fast_cleanup
1632
1633ALIGN	16
1634$L$cbc_fast_dec_in_place:
1635	mov	r10,QWORD[rbp]
1636	mov	r11,QWORD[8+rbp]
1637	mov	QWORD[((0+64))+rsp],r10
1638	mov	QWORD[((8+64))+rsp],r11
1639ALIGN	4
1640$L$cbc_fast_dec_in_place_loop:
1641	mov	eax,DWORD[r8]
1642	mov	ebx,DWORD[4+r8]
1643	mov	ecx,DWORD[8+r8]
1644	mov	edx,DWORD[12+r8]
1645	mov	r15,QWORD[rsp]
1646	mov	QWORD[24+rsp],r8
1647
1648	call	_x86_64_AES_decrypt
1649
1650	mov	r8,QWORD[24+rsp]
1651	mov	r10,QWORD[40+rsp]
1652	xor	eax,DWORD[((0+64))+rsp]
1653	xor	ebx,DWORD[((4+64))+rsp]
1654	xor	ecx,DWORD[((8+64))+rsp]
1655	xor	edx,DWORD[((12+64))+rsp]
1656
1657	mov	r11,QWORD[r8]
1658	mov	r12,QWORD[8+r8]
1659	sub	r10,16
1660	jz	NEAR $L$cbc_fast_dec_in_place_done
1661
1662	mov	QWORD[((0+64))+rsp],r11
1663	mov	QWORD[((8+64))+rsp],r12
1664
1665	mov	DWORD[r9],eax
1666	mov	DWORD[4+r9],ebx
1667	mov	DWORD[8+r9],ecx
1668	mov	DWORD[12+r9],edx
1669
1670	lea	r8,[16+r8]
1671	lea	r9,[16+r9]
1672	mov	QWORD[40+rsp],r10
1673	jmp	NEAR $L$cbc_fast_dec_in_place_loop
1674$L$cbc_fast_dec_in_place_done:
1675	mov	rdi,QWORD[56+rsp]
1676	mov	QWORD[rdi],r11
1677	mov	QWORD[8+rdi],r12
1678
1679	mov	DWORD[r9],eax
1680	mov	DWORD[4+r9],ebx
1681	mov	DWORD[8+r9],ecx
1682	mov	DWORD[12+r9],edx
1683
1684ALIGN	4
1685$L$cbc_fast_cleanup:
1686	cmp	DWORD[((80+240))+rsp],0
1687	lea	rdi,[80+rsp]
1688	je	NEAR $L$cbc_exit
1689	mov	ecx,240/8
1690	xor	rax,rax
1691	DD	0x90AB48F3
1692
1693	jmp	NEAR $L$cbc_exit
1694
1695
1696ALIGN	16
1697$L$cbc_slow_prologue:
1698
1699
1700	lea	rbp,[((-88))+rsp]
1701	and	rbp,-64
1702
1703	lea	r10,[((-88-63))+rcx]
1704	sub	r10,rbp
1705	neg	r10
1706	and	r10,0x3c0
1707	sub	rbp,r10
1708
1709	xchg	rbp,rsp
1710
1711
1712	mov	QWORD[16+rsp],rbp
1713
1714$L$cbc_slow_body:
1715
1716
1717
1718
1719	mov	QWORD[56+rsp],r8
1720	mov	rbp,r8
1721	mov	rbx,r9
1722	mov	r9,rsi
1723	mov	r8,rdi
1724	mov	r15,rcx
1725	mov	r10,rdx
1726
1727	mov	eax,DWORD[240+r15]
1728	mov	QWORD[rsp],r15
1729	shl	eax,4
1730	lea	rax,[rax*1+r15]
1731	mov	QWORD[8+rsp],rax
1732
1733
1734	lea	r14,[2048+r14]
1735	lea	rax,[((768-8))+rsp]
1736	sub	rax,r14
1737	and	rax,0x300
1738	lea	r14,[rax*1+r14]
1739
1740	cmp	rbx,0
1741	je	NEAR $L$SLOW_DECRYPT
1742
1743
1744	test	r10,-16
1745	mov	eax,DWORD[rbp]
1746	mov	ebx,DWORD[4+rbp]
1747	mov	ecx,DWORD[8+rbp]
1748	mov	edx,DWORD[12+rbp]
1749	jz	NEAR $L$cbc_slow_enc_tail
1750
1751ALIGN	4
1752$L$cbc_slow_enc_loop:
1753	xor	eax,DWORD[r8]
1754	xor	ebx,DWORD[4+r8]
1755	xor	ecx,DWORD[8+r8]
1756	xor	edx,DWORD[12+r8]
1757	mov	r15,QWORD[rsp]
1758	mov	QWORD[24+rsp],r8
1759	mov	QWORD[32+rsp],r9
1760	mov	QWORD[40+rsp],r10
1761
1762	call	_x86_64_AES_encrypt_compact
1763
1764	mov	r8,QWORD[24+rsp]
1765	mov	r9,QWORD[32+rsp]
1766	mov	r10,QWORD[40+rsp]
1767	mov	DWORD[r9],eax
1768	mov	DWORD[4+r9],ebx
1769	mov	DWORD[8+r9],ecx
1770	mov	DWORD[12+r9],edx
1771
1772	lea	r8,[16+r8]
1773	lea	r9,[16+r9]
1774	sub	r10,16
1775	test	r10,-16
1776	jnz	NEAR $L$cbc_slow_enc_loop
1777	test	r10,15
1778	jnz	NEAR $L$cbc_slow_enc_tail
1779	mov	rbp,QWORD[56+rsp]
1780	mov	DWORD[rbp],eax
1781	mov	DWORD[4+rbp],ebx
1782	mov	DWORD[8+rbp],ecx
1783	mov	DWORD[12+rbp],edx
1784
1785	jmp	NEAR $L$cbc_exit
1786
1787ALIGN	4
1788$L$cbc_slow_enc_tail:
1789	mov	r11,rax
1790	mov	r12,rcx
1791	mov	rcx,r10
1792	mov	rsi,r8
1793	mov	rdi,r9
1794	DD	0x9066A4F3
1795	mov	rcx,16
1796	sub	rcx,r10
1797	xor	rax,rax
1798	DD	0x9066AAF3
1799	mov	r8,r9
1800	mov	r10,16
1801	mov	rax,r11
1802	mov	rcx,r12
1803	jmp	NEAR $L$cbc_slow_enc_loop
1804
1805ALIGN	16
1806$L$SLOW_DECRYPT:
1807	shr	rax,3
1808	add	r14,rax
1809
1810	mov	r11,QWORD[rbp]
1811	mov	r12,QWORD[8+rbp]
1812	mov	QWORD[((0+64))+rsp],r11
1813	mov	QWORD[((8+64))+rsp],r12
1814
1815ALIGN	4
1816$L$cbc_slow_dec_loop:
1817	mov	eax,DWORD[r8]
1818	mov	ebx,DWORD[4+r8]
1819	mov	ecx,DWORD[8+r8]
1820	mov	edx,DWORD[12+r8]
1821	mov	r15,QWORD[rsp]
1822	mov	QWORD[24+rsp],r8
1823	mov	QWORD[32+rsp],r9
1824	mov	QWORD[40+rsp],r10
1825
1826	call	_x86_64_AES_decrypt_compact
1827
1828	mov	r8,QWORD[24+rsp]
1829	mov	r9,QWORD[32+rsp]
1830	mov	r10,QWORD[40+rsp]
1831	xor	eax,DWORD[((0+64))+rsp]
1832	xor	ebx,DWORD[((4+64))+rsp]
1833	xor	ecx,DWORD[((8+64))+rsp]
1834	xor	edx,DWORD[((12+64))+rsp]
1835
1836	mov	r11,QWORD[r8]
1837	mov	r12,QWORD[8+r8]
1838	sub	r10,16
1839	jc	NEAR $L$cbc_slow_dec_partial
1840	jz	NEAR $L$cbc_slow_dec_done
1841
1842	mov	QWORD[((0+64))+rsp],r11
1843	mov	QWORD[((8+64))+rsp],r12
1844
1845	mov	DWORD[r9],eax
1846	mov	DWORD[4+r9],ebx
1847	mov	DWORD[8+r9],ecx
1848	mov	DWORD[12+r9],edx
1849
1850	lea	r8,[16+r8]
1851	lea	r9,[16+r9]
1852	jmp	NEAR $L$cbc_slow_dec_loop
1853$L$cbc_slow_dec_done:
1854	mov	rdi,QWORD[56+rsp]
1855	mov	QWORD[rdi],r11
1856	mov	QWORD[8+rdi],r12
1857
1858	mov	DWORD[r9],eax
1859	mov	DWORD[4+r9],ebx
1860	mov	DWORD[8+r9],ecx
1861	mov	DWORD[12+r9],edx
1862
1863	jmp	NEAR $L$cbc_exit
1864
1865ALIGN	4
1866$L$cbc_slow_dec_partial:
1867	mov	rdi,QWORD[56+rsp]
1868	mov	QWORD[rdi],r11
1869	mov	QWORD[8+rdi],r12
1870
1871	mov	DWORD[((0+64))+rsp],eax
1872	mov	DWORD[((4+64))+rsp],ebx
1873	mov	DWORD[((8+64))+rsp],ecx
1874	mov	DWORD[((12+64))+rsp],edx
1875
1876	mov	rdi,r9
1877	lea	rsi,[64+rsp]
1878	lea	rcx,[16+r10]
1879	DD	0x9066A4F3
1880	jmp	NEAR $L$cbc_exit
1881
1882ALIGN	16
1883$L$cbc_exit:
1884	mov	rsi,QWORD[16+rsp]
1885
1886	mov	r15,QWORD[rsi]
1887
1888	mov	r14,QWORD[8+rsi]
1889
1890	mov	r13,QWORD[16+rsi]
1891
1892	mov	r12,QWORD[24+rsi]
1893
1894	mov	rbp,QWORD[32+rsi]
1895
1896	mov	rbx,QWORD[40+rsi]
1897
1898	lea	rsp,[48+rsi]
1899
1900$L$cbc_popfq:
1901	popfq
1902
1903
1904
1905$L$cbc_epilogue:
1906	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1907	mov	rsi,QWORD[16+rsp]
1908	DB	0F3h,0C3h		;repret
1909
1910$L$SEH_end_aes_nohw_cbc_encrypt:
1911ALIGN	64
1912$L$AES_Te:
1913	DD	0xa56363c6,0xa56363c6
1914	DD	0x847c7cf8,0x847c7cf8
1915	DD	0x997777ee,0x997777ee
1916	DD	0x8d7b7bf6,0x8d7b7bf6
1917	DD	0x0df2f2ff,0x0df2f2ff
1918	DD	0xbd6b6bd6,0xbd6b6bd6
1919	DD	0xb16f6fde,0xb16f6fde
1920	DD	0x54c5c591,0x54c5c591
1921	DD	0x50303060,0x50303060
1922	DD	0x03010102,0x03010102
1923	DD	0xa96767ce,0xa96767ce
1924	DD	0x7d2b2b56,0x7d2b2b56
1925	DD	0x19fefee7,0x19fefee7
1926	DD	0x62d7d7b5,0x62d7d7b5
1927	DD	0xe6abab4d,0xe6abab4d
1928	DD	0x9a7676ec,0x9a7676ec
1929	DD	0x45caca8f,0x45caca8f
1930	DD	0x9d82821f,0x9d82821f
1931	DD	0x40c9c989,0x40c9c989
1932	DD	0x877d7dfa,0x877d7dfa
1933	DD	0x15fafaef,0x15fafaef
1934	DD	0xeb5959b2,0xeb5959b2
1935	DD	0xc947478e,0xc947478e
1936	DD	0x0bf0f0fb,0x0bf0f0fb
1937	DD	0xecadad41,0xecadad41
1938	DD	0x67d4d4b3,0x67d4d4b3
1939	DD	0xfda2a25f,0xfda2a25f
1940	DD	0xeaafaf45,0xeaafaf45
1941	DD	0xbf9c9c23,0xbf9c9c23
1942	DD	0xf7a4a453,0xf7a4a453
1943	DD	0x967272e4,0x967272e4
1944	DD	0x5bc0c09b,0x5bc0c09b
1945	DD	0xc2b7b775,0xc2b7b775
1946	DD	0x1cfdfde1,0x1cfdfde1
1947	DD	0xae93933d,0xae93933d
1948	DD	0x6a26264c,0x6a26264c
1949	DD	0x5a36366c,0x5a36366c
1950	DD	0x413f3f7e,0x413f3f7e
1951	DD	0x02f7f7f5,0x02f7f7f5
1952	DD	0x4fcccc83,0x4fcccc83
1953	DD	0x5c343468,0x5c343468
1954	DD	0xf4a5a551,0xf4a5a551
1955	DD	0x34e5e5d1,0x34e5e5d1
1956	DD	0x08f1f1f9,0x08f1f1f9
1957	DD	0x937171e2,0x937171e2
1958	DD	0x73d8d8ab,0x73d8d8ab
1959	DD	0x53313162,0x53313162
1960	DD	0x3f15152a,0x3f15152a
1961	DD	0x0c040408,0x0c040408
1962	DD	0x52c7c795,0x52c7c795
1963	DD	0x65232346,0x65232346
1964	DD	0x5ec3c39d,0x5ec3c39d
1965	DD	0x28181830,0x28181830
1966	DD	0xa1969637,0xa1969637
1967	DD	0x0f05050a,0x0f05050a
1968	DD	0xb59a9a2f,0xb59a9a2f
1969	DD	0x0907070e,0x0907070e
1970	DD	0x36121224,0x36121224
1971	DD	0x9b80801b,0x9b80801b
1972	DD	0x3de2e2df,0x3de2e2df
1973	DD	0x26ebebcd,0x26ebebcd
1974	DD	0x6927274e,0x6927274e
1975	DD	0xcdb2b27f,0xcdb2b27f
1976	DD	0x9f7575ea,0x9f7575ea
1977	DD	0x1b090912,0x1b090912
1978	DD	0x9e83831d,0x9e83831d
1979	DD	0x742c2c58,0x742c2c58
1980	DD	0x2e1a1a34,0x2e1a1a34
1981	DD	0x2d1b1b36,0x2d1b1b36
1982	DD	0xb26e6edc,0xb26e6edc
1983	DD	0xee5a5ab4,0xee5a5ab4
1984	DD	0xfba0a05b,0xfba0a05b
1985	DD	0xf65252a4,0xf65252a4
1986	DD	0x4d3b3b76,0x4d3b3b76
1987	DD	0x61d6d6b7,0x61d6d6b7
1988	DD	0xceb3b37d,0xceb3b37d
1989	DD	0x7b292952,0x7b292952
1990	DD	0x3ee3e3dd,0x3ee3e3dd
1991	DD	0x712f2f5e,0x712f2f5e
1992	DD	0x97848413,0x97848413
1993	DD	0xf55353a6,0xf55353a6
1994	DD	0x68d1d1b9,0x68d1d1b9
1995	DD	0x00000000,0x00000000
1996	DD	0x2cededc1,0x2cededc1
1997	DD	0x60202040,0x60202040
1998	DD	0x1ffcfce3,0x1ffcfce3
1999	DD	0xc8b1b179,0xc8b1b179
2000	DD	0xed5b5bb6,0xed5b5bb6
2001	DD	0xbe6a6ad4,0xbe6a6ad4
2002	DD	0x46cbcb8d,0x46cbcb8d
2003	DD	0xd9bebe67,0xd9bebe67
2004	DD	0x4b393972,0x4b393972
2005	DD	0xde4a4a94,0xde4a4a94
2006	DD	0xd44c4c98,0xd44c4c98
2007	DD	0xe85858b0,0xe85858b0
2008	DD	0x4acfcf85,0x4acfcf85
2009	DD	0x6bd0d0bb,0x6bd0d0bb
2010	DD	0x2aefefc5,0x2aefefc5
2011	DD	0xe5aaaa4f,0xe5aaaa4f
2012	DD	0x16fbfbed,0x16fbfbed
2013	DD	0xc5434386,0xc5434386
2014	DD	0xd74d4d9a,0xd74d4d9a
2015	DD	0x55333366,0x55333366
2016	DD	0x94858511,0x94858511
2017	DD	0xcf45458a,0xcf45458a
2018	DD	0x10f9f9e9,0x10f9f9e9
2019	DD	0x06020204,0x06020204
2020	DD	0x817f7ffe,0x817f7ffe
2021	DD	0xf05050a0,0xf05050a0
2022	DD	0x443c3c78,0x443c3c78
2023	DD	0xba9f9f25,0xba9f9f25
2024	DD	0xe3a8a84b,0xe3a8a84b
2025	DD	0xf35151a2,0xf35151a2
2026	DD	0xfea3a35d,0xfea3a35d
2027	DD	0xc0404080,0xc0404080
2028	DD	0x8a8f8f05,0x8a8f8f05
2029	DD	0xad92923f,0xad92923f
2030	DD	0xbc9d9d21,0xbc9d9d21
2031	DD	0x48383870,0x48383870
2032	DD	0x04f5f5f1,0x04f5f5f1
2033	DD	0xdfbcbc63,0xdfbcbc63
2034	DD	0xc1b6b677,0xc1b6b677
2035	DD	0x75dadaaf,0x75dadaaf
2036	DD	0x63212142,0x63212142
2037	DD	0x30101020,0x30101020
2038	DD	0x1affffe5,0x1affffe5
2039	DD	0x0ef3f3fd,0x0ef3f3fd
2040	DD	0x6dd2d2bf,0x6dd2d2bf
2041	DD	0x4ccdcd81,0x4ccdcd81
2042	DD	0x140c0c18,0x140c0c18
2043	DD	0x35131326,0x35131326
2044	DD	0x2fececc3,0x2fececc3
2045	DD	0xe15f5fbe,0xe15f5fbe
2046	DD	0xa2979735,0xa2979735
2047	DD	0xcc444488,0xcc444488
2048	DD	0x3917172e,0x3917172e
2049	DD	0x57c4c493,0x57c4c493
2050	DD	0xf2a7a755,0xf2a7a755
2051	DD	0x827e7efc,0x827e7efc
2052	DD	0x473d3d7a,0x473d3d7a
2053	DD	0xac6464c8,0xac6464c8
2054	DD	0xe75d5dba,0xe75d5dba
2055	DD	0x2b191932,0x2b191932
2056	DD	0x957373e6,0x957373e6
2057	DD	0xa06060c0,0xa06060c0
2058	DD	0x98818119,0x98818119
2059	DD	0xd14f4f9e,0xd14f4f9e
2060	DD	0x7fdcdca3,0x7fdcdca3
2061	DD	0x66222244,0x66222244
2062	DD	0x7e2a2a54,0x7e2a2a54
2063	DD	0xab90903b,0xab90903b
2064	DD	0x8388880b,0x8388880b
2065	DD	0xca46468c,0xca46468c
2066	DD	0x29eeeec7,0x29eeeec7
2067	DD	0xd3b8b86b,0xd3b8b86b
2068	DD	0x3c141428,0x3c141428
2069	DD	0x79dedea7,0x79dedea7
2070	DD	0xe25e5ebc,0xe25e5ebc
2071	DD	0x1d0b0b16,0x1d0b0b16
2072	DD	0x76dbdbad,0x76dbdbad
2073	DD	0x3be0e0db,0x3be0e0db
2074	DD	0x56323264,0x56323264
2075	DD	0x4e3a3a74,0x4e3a3a74
2076	DD	0x1e0a0a14,0x1e0a0a14
2077	DD	0xdb494992,0xdb494992
2078	DD	0x0a06060c,0x0a06060c
2079	DD	0x6c242448,0x6c242448
2080	DD	0xe45c5cb8,0xe45c5cb8
2081	DD	0x5dc2c29f,0x5dc2c29f
2082	DD	0x6ed3d3bd,0x6ed3d3bd
2083	DD	0xefacac43,0xefacac43
2084	DD	0xa66262c4,0xa66262c4
2085	DD	0xa8919139,0xa8919139
2086	DD	0xa4959531,0xa4959531
2087	DD	0x37e4e4d3,0x37e4e4d3
2088	DD	0x8b7979f2,0x8b7979f2
2089	DD	0x32e7e7d5,0x32e7e7d5
2090	DD	0x43c8c88b,0x43c8c88b
2091	DD	0x5937376e,0x5937376e
2092	DD	0xb76d6dda,0xb76d6dda
2093	DD	0x8c8d8d01,0x8c8d8d01
2094	DD	0x64d5d5b1,0x64d5d5b1
2095	DD	0xd24e4e9c,0xd24e4e9c
2096	DD	0xe0a9a949,0xe0a9a949
2097	DD	0xb46c6cd8,0xb46c6cd8
2098	DD	0xfa5656ac,0xfa5656ac
2099	DD	0x07f4f4f3,0x07f4f4f3
2100	DD	0x25eaeacf,0x25eaeacf
2101	DD	0xaf6565ca,0xaf6565ca
2102	DD	0x8e7a7af4,0x8e7a7af4
2103	DD	0xe9aeae47,0xe9aeae47
2104	DD	0x18080810,0x18080810
2105	DD	0xd5baba6f,0xd5baba6f
2106	DD	0x887878f0,0x887878f0
2107	DD	0x6f25254a,0x6f25254a
2108	DD	0x722e2e5c,0x722e2e5c
2109	DD	0x241c1c38,0x241c1c38
2110	DD	0xf1a6a657,0xf1a6a657
2111	DD	0xc7b4b473,0xc7b4b473
2112	DD	0x51c6c697,0x51c6c697
2113	DD	0x23e8e8cb,0x23e8e8cb
2114	DD	0x7cdddda1,0x7cdddda1
2115	DD	0x9c7474e8,0x9c7474e8
2116	DD	0x211f1f3e,0x211f1f3e
2117	DD	0xdd4b4b96,0xdd4b4b96
2118	DD	0xdcbdbd61,0xdcbdbd61
2119	DD	0x868b8b0d,0x868b8b0d
2120	DD	0x858a8a0f,0x858a8a0f
2121	DD	0x907070e0,0x907070e0
2122	DD	0x423e3e7c,0x423e3e7c
2123	DD	0xc4b5b571,0xc4b5b571
2124	DD	0xaa6666cc,0xaa6666cc
2125	DD	0xd8484890,0xd8484890
2126	DD	0x05030306,0x05030306
2127	DD	0x01f6f6f7,0x01f6f6f7
2128	DD	0x120e0e1c,0x120e0e1c
2129	DD	0xa36161c2,0xa36161c2
2130	DD	0x5f35356a,0x5f35356a
2131	DD	0xf95757ae,0xf95757ae
2132	DD	0xd0b9b969,0xd0b9b969
2133	DD	0x91868617,0x91868617
2134	DD	0x58c1c199,0x58c1c199
2135	DD	0x271d1d3a,0x271d1d3a
2136	DD	0xb99e9e27,0xb99e9e27
2137	DD	0x38e1e1d9,0x38e1e1d9
2138	DD	0x13f8f8eb,0x13f8f8eb
2139	DD	0xb398982b,0xb398982b
2140	DD	0x33111122,0x33111122
2141	DD	0xbb6969d2,0xbb6969d2
2142	DD	0x70d9d9a9,0x70d9d9a9
2143	DD	0x898e8e07,0x898e8e07
2144	DD	0xa7949433,0xa7949433
2145	DD	0xb69b9b2d,0xb69b9b2d
2146	DD	0x221e1e3c,0x221e1e3c
2147	DD	0x92878715,0x92878715
2148	DD	0x20e9e9c9,0x20e9e9c9
2149	DD	0x49cece87,0x49cece87
2150	DD	0xff5555aa,0xff5555aa
2151	DD	0x78282850,0x78282850
2152	DD	0x7adfdfa5,0x7adfdfa5
2153	DD	0x8f8c8c03,0x8f8c8c03
2154	DD	0xf8a1a159,0xf8a1a159
2155	DD	0x80898909,0x80898909
2156	DD	0x170d0d1a,0x170d0d1a
2157	DD	0xdabfbf65,0xdabfbf65
2158	DD	0x31e6e6d7,0x31e6e6d7
2159	DD	0xc6424284,0xc6424284
2160	DD	0xb86868d0,0xb86868d0
2161	DD	0xc3414182,0xc3414182
2162	DD	0xb0999929,0xb0999929
2163	DD	0x772d2d5a,0x772d2d5a
2164	DD	0x110f0f1e,0x110f0f1e
2165	DD	0xcbb0b07b,0xcbb0b07b
2166	DD	0xfc5454a8,0xfc5454a8
2167	DD	0xd6bbbb6d,0xd6bbbb6d
2168	DD	0x3a16162c,0x3a16162c
2169DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2170DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2171DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2172DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2173DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2174DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2175DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2176DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2177DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2178DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2179DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2180DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2181DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2182DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2183DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2184DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2185DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2186DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2187DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2188DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2189DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2190DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2191DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2192DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2193DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2194DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2195DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2196DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2197DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2198DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2199DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2200DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2201DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2202DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2203DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2204DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2205DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2206DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2207DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2208DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2209DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2210DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2211DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2212DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2213DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2214DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2215DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2216DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2217DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2218DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2219DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2220DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2221DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2222DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2223DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2224DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2225DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2226DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2227DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2228DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2229DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2230DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2231DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2232DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2233DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2234DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2235DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2236DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2237DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2238DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2239DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2240DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2241DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2242DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2243DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2244DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2245DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2246DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2247DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2248DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2249DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2250DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2251DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2252DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2253DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2254DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2255DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2256DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2257DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2258DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2259DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2260DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2261DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2262DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2263DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2264DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2265DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2266DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2267DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2268DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2269DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2270DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2271DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2272DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2273DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2274DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2275DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2276DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2277DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2278DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2279DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2280DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2281DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2282DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2283DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2284DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2285DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2286DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2287DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2288DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2289DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2290DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2291DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2292DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2293DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2294DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2295DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2296DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2297	DD	0x00000001,0x00000002,0x00000004,0x00000008
2298	DD	0x00000010,0x00000020,0x00000040,0x00000080
2299	DD	0x0000001b,0x00000036,0x80808080,0x80808080
2300	DD	0xfefefefe,0xfefefefe,0x1b1b1b1b,0x1b1b1b1b
2301ALIGN	64
2302$L$AES_Td:
2303	DD	0x50a7f451,0x50a7f451
2304	DD	0x5365417e,0x5365417e
2305	DD	0xc3a4171a,0xc3a4171a
2306	DD	0x965e273a,0x965e273a
2307	DD	0xcb6bab3b,0xcb6bab3b
2308	DD	0xf1459d1f,0xf1459d1f
2309	DD	0xab58faac,0xab58faac
2310	DD	0x9303e34b,0x9303e34b
2311	DD	0x55fa3020,0x55fa3020
2312	DD	0xf66d76ad,0xf66d76ad
2313	DD	0x9176cc88,0x9176cc88
2314	DD	0x254c02f5,0x254c02f5
2315	DD	0xfcd7e54f,0xfcd7e54f
2316	DD	0xd7cb2ac5,0xd7cb2ac5
2317	DD	0x80443526,0x80443526
2318	DD	0x8fa362b5,0x8fa362b5
2319	DD	0x495ab1de,0x495ab1de
2320	DD	0x671bba25,0x671bba25
2321	DD	0x980eea45,0x980eea45
2322	DD	0xe1c0fe5d,0xe1c0fe5d
2323	DD	0x02752fc3,0x02752fc3
2324	DD	0x12f04c81,0x12f04c81
2325	DD	0xa397468d,0xa397468d
2326	DD	0xc6f9d36b,0xc6f9d36b
2327	DD	0xe75f8f03,0xe75f8f03
2328	DD	0x959c9215,0x959c9215
2329	DD	0xeb7a6dbf,0xeb7a6dbf
2330	DD	0xda595295,0xda595295
2331	DD	0x2d83bed4,0x2d83bed4
2332	DD	0xd3217458,0xd3217458
2333	DD	0x2969e049,0x2969e049
2334	DD	0x44c8c98e,0x44c8c98e
2335	DD	0x6a89c275,0x6a89c275
2336	DD	0x78798ef4,0x78798ef4
2337	DD	0x6b3e5899,0x6b3e5899
2338	DD	0xdd71b927,0xdd71b927
2339	DD	0xb64fe1be,0xb64fe1be
2340	DD	0x17ad88f0,0x17ad88f0
2341	DD	0x66ac20c9,0x66ac20c9
2342	DD	0xb43ace7d,0xb43ace7d
2343	DD	0x184adf63,0x184adf63
2344	DD	0x82311ae5,0x82311ae5
2345	DD	0x60335197,0x60335197
2346	DD	0x457f5362,0x457f5362
2347	DD	0xe07764b1,0xe07764b1
2348	DD	0x84ae6bbb,0x84ae6bbb
2349	DD	0x1ca081fe,0x1ca081fe
2350	DD	0x942b08f9,0x942b08f9
2351	DD	0x58684870,0x58684870
2352	DD	0x19fd458f,0x19fd458f
2353	DD	0x876cde94,0x876cde94
2354	DD	0xb7f87b52,0xb7f87b52
2355	DD	0x23d373ab,0x23d373ab
2356	DD	0xe2024b72,0xe2024b72
2357	DD	0x578f1fe3,0x578f1fe3
2358	DD	0x2aab5566,0x2aab5566
2359	DD	0x0728ebb2,0x0728ebb2
2360	DD	0x03c2b52f,0x03c2b52f
2361	DD	0x9a7bc586,0x9a7bc586
2362	DD	0xa50837d3,0xa50837d3
2363	DD	0xf2872830,0xf2872830
2364	DD	0xb2a5bf23,0xb2a5bf23
2365	DD	0xba6a0302,0xba6a0302
2366	DD	0x5c8216ed,0x5c8216ed
2367	DD	0x2b1ccf8a,0x2b1ccf8a
2368	DD	0x92b479a7,0x92b479a7
2369	DD	0xf0f207f3,0xf0f207f3
2370	DD	0xa1e2694e,0xa1e2694e
2371	DD	0xcdf4da65,0xcdf4da65
2372	DD	0xd5be0506,0xd5be0506
2373	DD	0x1f6234d1,0x1f6234d1
2374	DD	0x8afea6c4,0x8afea6c4
2375	DD	0x9d532e34,0x9d532e34
2376	DD	0xa055f3a2,0xa055f3a2
2377	DD	0x32e18a05,0x32e18a05
2378	DD	0x75ebf6a4,0x75ebf6a4
2379	DD	0x39ec830b,0x39ec830b
2380	DD	0xaaef6040,0xaaef6040
2381	DD	0x069f715e,0x069f715e
2382	DD	0x51106ebd,0x51106ebd
2383	DD	0xf98a213e,0xf98a213e
2384	DD	0x3d06dd96,0x3d06dd96
2385	DD	0xae053edd,0xae053edd
2386	DD	0x46bde64d,0x46bde64d
2387	DD	0xb58d5491,0xb58d5491
2388	DD	0x055dc471,0x055dc471
2389	DD	0x6fd40604,0x6fd40604
2390	DD	0xff155060,0xff155060
2391	DD	0x24fb9819,0x24fb9819
2392	DD	0x97e9bdd6,0x97e9bdd6
2393	DD	0xcc434089,0xcc434089
2394	DD	0x779ed967,0x779ed967
2395	DD	0xbd42e8b0,0xbd42e8b0
2396	DD	0x888b8907,0x888b8907
2397	DD	0x385b19e7,0x385b19e7
2398	DD	0xdbeec879,0xdbeec879
2399	DD	0x470a7ca1,0x470a7ca1
2400	DD	0xe90f427c,0xe90f427c
2401	DD	0xc91e84f8,0xc91e84f8
2402	DD	0x00000000,0x00000000
2403	DD	0x83868009,0x83868009
2404	DD	0x48ed2b32,0x48ed2b32
2405	DD	0xac70111e,0xac70111e
2406	DD	0x4e725a6c,0x4e725a6c
2407	DD	0xfbff0efd,0xfbff0efd
2408	DD	0x5638850f,0x5638850f
2409	DD	0x1ed5ae3d,0x1ed5ae3d
2410	DD	0x27392d36,0x27392d36
2411	DD	0x64d90f0a,0x64d90f0a
2412	DD	0x21a65c68,0x21a65c68
2413	DD	0xd1545b9b,0xd1545b9b
2414	DD	0x3a2e3624,0x3a2e3624
2415	DD	0xb1670a0c,0xb1670a0c
2416	DD	0x0fe75793,0x0fe75793
2417	DD	0xd296eeb4,0xd296eeb4
2418	DD	0x9e919b1b,0x9e919b1b
2419	DD	0x4fc5c080,0x4fc5c080
2420	DD	0xa220dc61,0xa220dc61
2421	DD	0x694b775a,0x694b775a
2422	DD	0x161a121c,0x161a121c
2423	DD	0x0aba93e2,0x0aba93e2
2424	DD	0xe52aa0c0,0xe52aa0c0
2425	DD	0x43e0223c,0x43e0223c
2426	DD	0x1d171b12,0x1d171b12
2427	DD	0x0b0d090e,0x0b0d090e
2428	DD	0xadc78bf2,0xadc78bf2
2429	DD	0xb9a8b62d,0xb9a8b62d
2430	DD	0xc8a91e14,0xc8a91e14
2431	DD	0x8519f157,0x8519f157
2432	DD	0x4c0775af,0x4c0775af
2433	DD	0xbbdd99ee,0xbbdd99ee
2434	DD	0xfd607fa3,0xfd607fa3
2435	DD	0x9f2601f7,0x9f2601f7
2436	DD	0xbcf5725c,0xbcf5725c
2437	DD	0xc53b6644,0xc53b6644
2438	DD	0x347efb5b,0x347efb5b
2439	DD	0x7629438b,0x7629438b
2440	DD	0xdcc623cb,0xdcc623cb
2441	DD	0x68fcedb6,0x68fcedb6
2442	DD	0x63f1e4b8,0x63f1e4b8
2443	DD	0xcadc31d7,0xcadc31d7
2444	DD	0x10856342,0x10856342
2445	DD	0x40229713,0x40229713
2446	DD	0x2011c684,0x2011c684
2447	DD	0x7d244a85,0x7d244a85
2448	DD	0xf83dbbd2,0xf83dbbd2
2449	DD	0x1132f9ae,0x1132f9ae
2450	DD	0x6da129c7,0x6da129c7
2451	DD	0x4b2f9e1d,0x4b2f9e1d
2452	DD	0xf330b2dc,0xf330b2dc
2453	DD	0xec52860d,0xec52860d
2454	DD	0xd0e3c177,0xd0e3c177
2455	DD	0x6c16b32b,0x6c16b32b
2456	DD	0x99b970a9,0x99b970a9
2457	DD	0xfa489411,0xfa489411
2458	DD	0x2264e947,0x2264e947
2459	DD	0xc48cfca8,0xc48cfca8
2460	DD	0x1a3ff0a0,0x1a3ff0a0
2461	DD	0xd82c7d56,0xd82c7d56
2462	DD	0xef903322,0xef903322
2463	DD	0xc74e4987,0xc74e4987
2464	DD	0xc1d138d9,0xc1d138d9
2465	DD	0xfea2ca8c,0xfea2ca8c
2466	DD	0x360bd498,0x360bd498
2467	DD	0xcf81f5a6,0xcf81f5a6
2468	DD	0x28de7aa5,0x28de7aa5
2469	DD	0x268eb7da,0x268eb7da
2470	DD	0xa4bfad3f,0xa4bfad3f
2471	DD	0xe49d3a2c,0xe49d3a2c
2472	DD	0x0d927850,0x0d927850
2473	DD	0x9bcc5f6a,0x9bcc5f6a
2474	DD	0x62467e54,0x62467e54
2475	DD	0xc2138df6,0xc2138df6
2476	DD	0xe8b8d890,0xe8b8d890
2477	DD	0x5ef7392e,0x5ef7392e
2478	DD	0xf5afc382,0xf5afc382
2479	DD	0xbe805d9f,0xbe805d9f
2480	DD	0x7c93d069,0x7c93d069
2481	DD	0xa92dd56f,0xa92dd56f
2482	DD	0xb31225cf,0xb31225cf
2483	DD	0x3b99acc8,0x3b99acc8
2484	DD	0xa77d1810,0xa77d1810
2485	DD	0x6e639ce8,0x6e639ce8
2486	DD	0x7bbb3bdb,0x7bbb3bdb
2487	DD	0x097826cd,0x097826cd
2488	DD	0xf418596e,0xf418596e
2489	DD	0x01b79aec,0x01b79aec
2490	DD	0xa89a4f83,0xa89a4f83
2491	DD	0x656e95e6,0x656e95e6
2492	DD	0x7ee6ffaa,0x7ee6ffaa
2493	DD	0x08cfbc21,0x08cfbc21
2494	DD	0xe6e815ef,0xe6e815ef
2495	DD	0xd99be7ba,0xd99be7ba
2496	DD	0xce366f4a,0xce366f4a
2497	DD	0xd4099fea,0xd4099fea
2498	DD	0xd67cb029,0xd67cb029
2499	DD	0xafb2a431,0xafb2a431
2500	DD	0x31233f2a,0x31233f2a
2501	DD	0x3094a5c6,0x3094a5c6
2502	DD	0xc066a235,0xc066a235
2503	DD	0x37bc4e74,0x37bc4e74
2504	DD	0xa6ca82fc,0xa6ca82fc
2505	DD	0xb0d090e0,0xb0d090e0
2506	DD	0x15d8a733,0x15d8a733
2507	DD	0x4a9804f1,0x4a9804f1
2508	DD	0xf7daec41,0xf7daec41
2509	DD	0x0e50cd7f,0x0e50cd7f
2510	DD	0x2ff69117,0x2ff69117
2511	DD	0x8dd64d76,0x8dd64d76
2512	DD	0x4db0ef43,0x4db0ef43
2513	DD	0x544daacc,0x544daacc
2514	DD	0xdf0496e4,0xdf0496e4
2515	DD	0xe3b5d19e,0xe3b5d19e
2516	DD	0x1b886a4c,0x1b886a4c
2517	DD	0xb81f2cc1,0xb81f2cc1
2518	DD	0x7f516546,0x7f516546
2519	DD	0x04ea5e9d,0x04ea5e9d
2520	DD	0x5d358c01,0x5d358c01
2521	DD	0x737487fa,0x737487fa
2522	DD	0x2e410bfb,0x2e410bfb
2523	DD	0x5a1d67b3,0x5a1d67b3
2524	DD	0x52d2db92,0x52d2db92
2525	DD	0x335610e9,0x335610e9
2526	DD	0x1347d66d,0x1347d66d
2527	DD	0x8c61d79a,0x8c61d79a
2528	DD	0x7a0ca137,0x7a0ca137
2529	DD	0x8e14f859,0x8e14f859
2530	DD	0x893c13eb,0x893c13eb
2531	DD	0xee27a9ce,0xee27a9ce
2532	DD	0x35c961b7,0x35c961b7
2533	DD	0xede51ce1,0xede51ce1
2534	DD	0x3cb1477a,0x3cb1477a
2535	DD	0x59dfd29c,0x59dfd29c
2536	DD	0x3f73f255,0x3f73f255
2537	DD	0x79ce1418,0x79ce1418
2538	DD	0xbf37c773,0xbf37c773
2539	DD	0xeacdf753,0xeacdf753
2540	DD	0x5baafd5f,0x5baafd5f
2541	DD	0x146f3ddf,0x146f3ddf
2542	DD	0x86db4478,0x86db4478
2543	DD	0x81f3afca,0x81f3afca
2544	DD	0x3ec468b9,0x3ec468b9
2545	DD	0x2c342438,0x2c342438
2546	DD	0x5f40a3c2,0x5f40a3c2
2547	DD	0x72c31d16,0x72c31d16
2548	DD	0x0c25e2bc,0x0c25e2bc
2549	DD	0x8b493c28,0x8b493c28
2550	DD	0x41950dff,0x41950dff
2551	DD	0x7101a839,0x7101a839
2552	DD	0xdeb30c08,0xdeb30c08
2553	DD	0x9ce4b4d8,0x9ce4b4d8
2554	DD	0x90c15664,0x90c15664
2555	DD	0x6184cb7b,0x6184cb7b
2556	DD	0x70b632d5,0x70b632d5
2557	DD	0x745c6c48,0x745c6c48
2558	DD	0x4257b8d0,0x4257b8d0
2559DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2560DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2561DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2562DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2563DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2564DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2565DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2566DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2567DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2568DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2569DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2570DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2571DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2572DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2573DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2574DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2575DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2576DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2577DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2578DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2579DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2580DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2581DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2582DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2583DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2584DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2585DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2586DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2587DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2588DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2589DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2590DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2591	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
2592	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
2593DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2594DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2595DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2596DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2597DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2598DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2599DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2600DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2601DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2602DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2603DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2604DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2605DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2606DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2607DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2608DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2609DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2610DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2611DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2612DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2613DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2614DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2615DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2616DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2617DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2618DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2619DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2620DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2621DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2622DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2623DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2624DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2625	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
2626	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
2627DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2628DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2629DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2630DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2631DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2632DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2633DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2634DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2635DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2636DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2637DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2638DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2639DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2640DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2641DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2642DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2643DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2644DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2645DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2646DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2647DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2648DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2649DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2650DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2651DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2652DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2653DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2654DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2655DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2656DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2657DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2658DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2659	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
2660	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
2661DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2662DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2663DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2664DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2665DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2666DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2667DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2668DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2669DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2670DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2671DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2672DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2673DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2674DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2675DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2676DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2677DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2678DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2679DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2680DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2681DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2682DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2683DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2684DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2685DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2686DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2687DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2688DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2689DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2690DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2691DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2692DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2693	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
2694	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
2695DB	65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
2696DB	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
2697DB	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
2698DB	62,0
2699ALIGN	64
2700EXTERN	__imp_RtlVirtualUnwind
2701
2702ALIGN	16
2703block_se_handler:
2704	push	rsi
2705	push	rdi
2706	push	rbx
2707	push	rbp
2708	push	r12
2709	push	r13
2710	push	r14
2711	push	r15
2712	pushfq
2713	sub	rsp,64
2714
2715	mov	rax,QWORD[120+r8]
2716	mov	rbx,QWORD[248+r8]
2717
2718	mov	rsi,QWORD[8+r9]
2719	mov	r11,QWORD[56+r9]
2720
2721	mov	r10d,DWORD[r11]
2722	lea	r10,[r10*1+rsi]
2723	cmp	rbx,r10
2724	jb	NEAR $L$in_block_prologue
2725
2726	mov	rax,QWORD[152+r8]
2727
2728	mov	r10d,DWORD[4+r11]
2729	lea	r10,[r10*1+rsi]
2730	cmp	rbx,r10
2731	jae	NEAR $L$in_block_prologue
2732
2733	mov	rax,QWORD[24+rax]
2734
2735	mov	rbx,QWORD[((-8))+rax]
2736	mov	rbp,QWORD[((-16))+rax]
2737	mov	r12,QWORD[((-24))+rax]
2738	mov	r13,QWORD[((-32))+rax]
2739	mov	r14,QWORD[((-40))+rax]
2740	mov	r15,QWORD[((-48))+rax]
2741	mov	QWORD[144+r8],rbx
2742	mov	QWORD[160+r8],rbp
2743	mov	QWORD[216+r8],r12
2744	mov	QWORD[224+r8],r13
2745	mov	QWORD[232+r8],r14
2746	mov	QWORD[240+r8],r15
2747
2748$L$in_block_prologue:
2749	mov	rdi,QWORD[8+rax]
2750	mov	rsi,QWORD[16+rax]
2751	mov	QWORD[152+r8],rax
2752	mov	QWORD[168+r8],rsi
2753	mov	QWORD[176+r8],rdi
2754
2755	jmp	NEAR $L$common_seh_exit
2756
2757
2758
2759ALIGN	16
2760key_se_handler:
2761	push	rsi
2762	push	rdi
2763	push	rbx
2764	push	rbp
2765	push	r12
2766	push	r13
2767	push	r14
2768	push	r15
2769	pushfq
2770	sub	rsp,64
2771
2772	mov	rax,QWORD[120+r8]
2773	mov	rbx,QWORD[248+r8]
2774
2775	mov	rsi,QWORD[8+r9]
2776	mov	r11,QWORD[56+r9]
2777
2778	mov	r10d,DWORD[r11]
2779	lea	r10,[r10*1+rsi]
2780	cmp	rbx,r10
2781	jb	NEAR $L$in_key_prologue
2782
2783	mov	rax,QWORD[152+r8]
2784
2785	mov	r10d,DWORD[4+r11]
2786	lea	r10,[r10*1+rsi]
2787	cmp	rbx,r10
2788	jae	NEAR $L$in_key_prologue
2789
2790	lea	rax,[56+rax]
2791
2792	mov	rbx,QWORD[((-8))+rax]
2793	mov	rbp,QWORD[((-16))+rax]
2794	mov	r12,QWORD[((-24))+rax]
2795	mov	r13,QWORD[((-32))+rax]
2796	mov	r14,QWORD[((-40))+rax]
2797	mov	r15,QWORD[((-48))+rax]
2798	mov	QWORD[144+r8],rbx
2799	mov	QWORD[160+r8],rbp
2800	mov	QWORD[216+r8],r12
2801	mov	QWORD[224+r8],r13
2802	mov	QWORD[232+r8],r14
2803	mov	QWORD[240+r8],r15
2804
2805$L$in_key_prologue:
2806	mov	rdi,QWORD[8+rax]
2807	mov	rsi,QWORD[16+rax]
2808	mov	QWORD[152+r8],rax
2809	mov	QWORD[168+r8],rsi
2810	mov	QWORD[176+r8],rdi
2811
2812	jmp	NEAR $L$common_seh_exit
2813
2814
2815
2816ALIGN	16
2817cbc_se_handler:
2818	push	rsi
2819	push	rdi
2820	push	rbx
2821	push	rbp
2822	push	r12
2823	push	r13
2824	push	r14
2825	push	r15
2826	pushfq
2827	sub	rsp,64
2828
2829	mov	rax,QWORD[120+r8]
2830	mov	rbx,QWORD[248+r8]
2831
2832	lea	r10,[$L$cbc_prologue]
2833	cmp	rbx,r10
2834	jb	NEAR $L$in_cbc_prologue
2835
2836	lea	r10,[$L$cbc_fast_body]
2837	cmp	rbx,r10
2838	jb	NEAR $L$in_cbc_frame_setup
2839
2840	lea	r10,[$L$cbc_slow_prologue]
2841	cmp	rbx,r10
2842	jb	NEAR $L$in_cbc_body
2843
2844	lea	r10,[$L$cbc_slow_body]
2845	cmp	rbx,r10
2846	jb	NEAR $L$in_cbc_frame_setup
2847
2848$L$in_cbc_body:
2849	mov	rax,QWORD[152+r8]
2850
2851	lea	r10,[$L$cbc_epilogue]
2852	cmp	rbx,r10
2853	jae	NEAR $L$in_cbc_prologue
2854
2855	lea	rax,[8+rax]
2856
2857	lea	r10,[$L$cbc_popfq]
2858	cmp	rbx,r10
2859	jae	NEAR $L$in_cbc_prologue
2860
2861	mov	rax,QWORD[8+rax]
2862	lea	rax,[56+rax]
2863
2864$L$in_cbc_frame_setup:
2865	mov	rbx,QWORD[((-16))+rax]
2866	mov	rbp,QWORD[((-24))+rax]
2867	mov	r12,QWORD[((-32))+rax]
2868	mov	r13,QWORD[((-40))+rax]
2869	mov	r14,QWORD[((-48))+rax]
2870	mov	r15,QWORD[((-56))+rax]
2871	mov	QWORD[144+r8],rbx
2872	mov	QWORD[160+r8],rbp
2873	mov	QWORD[216+r8],r12
2874	mov	QWORD[224+r8],r13
2875	mov	QWORD[232+r8],r14
2876	mov	QWORD[240+r8],r15
2877
2878$L$in_cbc_prologue:
2879	mov	rdi,QWORD[8+rax]
2880	mov	rsi,QWORD[16+rax]
2881	mov	QWORD[152+r8],rax
2882	mov	QWORD[168+r8],rsi
2883	mov	QWORD[176+r8],rdi
2884
2885$L$common_seh_exit:
2886
2887	mov	rdi,QWORD[40+r9]
2888	mov	rsi,r8
2889	mov	ecx,154
2890	DD	0xa548f3fc
2891
2892	mov	rsi,r9
2893	xor	rcx,rcx
2894	mov	rdx,QWORD[8+rsi]
2895	mov	r8,QWORD[rsi]
2896	mov	r9,QWORD[16+rsi]
2897	mov	r10,QWORD[40+rsi]
2898	lea	r11,[56+rsi]
2899	lea	r12,[24+rsi]
2900	mov	QWORD[32+rsp],r10
2901	mov	QWORD[40+rsp],r11
2902	mov	QWORD[48+rsp],r12
2903	mov	QWORD[56+rsp],rcx
2904	call	QWORD[__imp_RtlVirtualUnwind]
2905
2906	mov	eax,1
2907	add	rsp,64
2908	popfq
2909	pop	r15
2910	pop	r14
2911	pop	r13
2912	pop	r12
2913	pop	rbp
2914	pop	rbx
2915	pop	rdi
2916	pop	rsi
2917	DB	0F3h,0C3h		;repret
2918
2919
2920section	.pdata rdata align=4
2921ALIGN	4
2922	DD	$L$SEH_begin_aes_nohw_encrypt wrt ..imagebase
2923	DD	$L$SEH_end_aes_nohw_encrypt wrt ..imagebase
2924	DD	$L$SEH_info_aes_nohw_encrypt wrt ..imagebase
2925
2926	DD	$L$SEH_begin_aes_nohw_decrypt wrt ..imagebase
2927	DD	$L$SEH_end_aes_nohw_decrypt wrt ..imagebase
2928	DD	$L$SEH_info_aes_nohw_decrypt wrt ..imagebase
2929
2930	DD	$L$SEH_begin_aes_nohw_set_encrypt_key wrt ..imagebase
2931	DD	$L$SEH_end_aes_nohw_set_encrypt_key wrt ..imagebase
2932	DD	$L$SEH_info_aes_nohw_set_encrypt_key wrt ..imagebase
2933
2934	DD	$L$SEH_begin_aes_nohw_set_decrypt_key wrt ..imagebase
2935	DD	$L$SEH_end_aes_nohw_set_decrypt_key wrt ..imagebase
2936	DD	$L$SEH_info_aes_nohw_set_decrypt_key wrt ..imagebase
2937
2938	DD	$L$SEH_begin_aes_nohw_cbc_encrypt wrt ..imagebase
2939	DD	$L$SEH_end_aes_nohw_cbc_encrypt wrt ..imagebase
2940	DD	$L$SEH_info_aes_nohw_cbc_encrypt wrt ..imagebase
2941
2942section	.xdata rdata align=8
2943ALIGN	8
2944$L$SEH_info_aes_nohw_encrypt:
2945DB	9,0,0,0
2946	DD	block_se_handler wrt ..imagebase
2947	DD	$L$enc_prologue wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
2948$L$SEH_info_aes_nohw_decrypt:
2949DB	9,0,0,0
2950	DD	block_se_handler wrt ..imagebase
2951	DD	$L$dec_prologue wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
2952$L$SEH_info_aes_nohw_set_encrypt_key:
2953DB	9,0,0,0
2954	DD	key_se_handler wrt ..imagebase
2955	DD	$L$enc_key_prologue wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
2956$L$SEH_info_aes_nohw_set_decrypt_key:
2957DB	9,0,0,0
2958	DD	key_se_handler wrt ..imagebase
2959	DD	$L$dec_key_prologue wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
2960$L$SEH_info_aes_nohw_cbc_encrypt:
2961DB	9,0,0,0
2962	DD	cbc_se_handler wrt ..imagebase
2963