Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
L
lsh
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
LSH
lsh
Commits
8581e507
Commit
8581e507
authored
15 years ago
by
Niels Möller
Browse files
Options
Downloads
Patches
Plain Diff
Improved performance by 17% on AMD K7, by letting loopmix scramble the
instruction order. Rev: nettle/x86/sha1-compress.asm:1.9
parent
19e6b152
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
nettle/x86/sha1-compress.asm
+1375
-121
1375 additions, 121 deletions
nettle/x86/sha1-compress.asm
with
1375 additions
and
121 deletions
nettle/x86/sha1-compress.asm
+
1375
−
121
View file @
8581e507
...
...
@@ -25,7 +25,7 @@ define(<SD>,<%edx>)
define
(
<
SE
>
,
<%
ebp
>
)
define
(
<
DATA
>
,
<%
esp
>
)
define
(
<
T1
>
,
<%
edi
>
)
define
(
<
T2
>
,
<%
esi
>
)
C
Used
by
SWAP
define
(
<
T2
>
,
<%
esi
>
)
C
Constants
define
(
<
K1VALUE
>
,
<
0x5A827999
>
)
C
Rounds
0
-
19
...
...
@@ -77,8 +77,8 @@ define(<ROUND_F1>, <
xor
$
3
,
T2
and
$
2
,
T2
xor
$
4
,
T2
lea
K1VALUE
(
T1
,
T2
),
T2
rol
<
$
>
30
,
$
2
lea
K1VALUE
(
T1
,
$
5
),
$
5
mov
$
1
,
T1
rol
<
$
>
5
,
T1
add
T1
,
$
5
...
...
@@ -110,8 +110,8 @@ define(<ROUND_F2>, <
mov
$
4
,
T2
xor
$
3
,
T2
xor
$
2
,
T2
lea
$
7
(
T1
,
T2
),
T2
rol
<
$
>
30
,
$
2
lea
$
7
(
T1
,
$
5
),
$
5
mov
$
1
,
T1
rol
<
$
>
5
,
T1
add
T1
,
$
5
...
...
@@ -128,14 +128,14 @@ define(<ROUND_F3>, <
mov
T1
,
OFFSET
(
eval
(
$
6
%
16
))
(
DATA
)
mov
$
4
,
T2
and
$
3
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
mov
$
4
,
T
2
xor
$
3
,
T
2
and
$
2
,
T
2
add
T
1
,
$
5
lea
K3VALUE
(
T1
,
$
5
),
$
5
mov
$
4
,
T
1
xor
$
3
,
T
1
and
$
2
,
T
1
add
T
2
,
$
5
rol
<
$
>
30
,
$
2
mov
$
1
,
T
1
rol
<
$
>
5
,
T
1
mov
$
1
,
T
2
rol
<
$
>
5
,
T
2
add
T1
,
$
5
add
T2
,
$
5
>
)
...
...
@@ -145,7 +145,7 @@ define(<ROUND_F3>, <
C
_nettle_sha1_compress
(
uint32_t
*
state
,
uint8_t
*
data
)
.text
ALIGN
(
4
)
PROLOGUE
(
_nettle_sha1_compress
)
C
save
al
l
registers
that
need
to
be
saved
C
88
(
%
esp
)
data
...
...
@@ -158,117 +158,1360 @@ PROLOGUE(_nettle_sha1_compress)
subl
$
64
,
%
esp
C
%
esp
=
W
C
Load
and
byte
swap
data
movl
88
(
%
esp
),
T2
SWAP
(
0
,
%
eax
)
SWAP
(
1
,
%
ebx
)
SWAP
(
2
,
%
ecx
)
SWAP
(
3
,
%
edx
)
SWAP
(
4
,
%
eax
)
SWAP
(
5
,
%
ebx
)
SWAP
(
6
,
%
ecx
)
SWAP
(
7
,
%
edx
)
SWAP
(
8
,
%
eax
)
SWAP
(
9
,
%
ebx
)
SWAP
(
10
,
%
ecx
)
SWAP
(
11
,
%
edx
)
SWAP
(
12
,
%
eax
)
SWAP
(
13
,
%
ebx
)
SWAP
(
14
,
%
ecx
)
SWAP
(
15
,
%
edx
)
C
load
the
state
vector
movl
84
(
%
esp
),
T1
movl
(
T1
),
SA
movl
4
(
T1
),
SB
movl
8
(
T1
),
SC
movl
12
(
T1
),
SD
movl
16
(
T1
),
SE
ROUND_F1_NOEXP
(
SA
,
SB
,
SC
,
SD
,
SE
,
0
)
ROUND_F1_NOEXP
(
SE
,
SA
,
SB
,
SC
,
SD
,
1
)
ROUND_F1_NOEXP
(
SD
,
SE
,
SA
,
SB
,
SC
,
2
)
ROUND_F1_NOEXP
(
SC
,
SD
,
SE
,
SA
,
SB
,
3
)
ROUND_F1_NOEXP
(
SB
,
SC
,
SD
,
SE
,
SA
,
4
)
ROUND_F1_NOEXP
(
SA
,
SB
,
SC
,
SD
,
SE
,
5
)
ROUND_F1_NOEXP
(
SE
,
SA
,
SB
,
SC
,
SD
,
6
)
ROUND_F1_NOEXP
(
SD
,
SE
,
SA
,
SB
,
SC
,
7
)
ROUND_F1_NOEXP
(
SC
,
SD
,
SE
,
SA
,
SB
,
8
)
ROUND_F1_NOEXP
(
SB
,
SC
,
SD
,
SE
,
SA
,
9
)
ROUND_F1_NOEXP
(
SA
,
SB
,
SC
,
SD
,
SE
,
10
)
ROUND_F1_NOEXP
(
SE
,
SA
,
SB
,
SC
,
SD
,
11
)
ROUND_F1_NOEXP
(
SD
,
SE
,
SA
,
SB
,
SC
,
12
)
ROUND_F1_NOEXP
(
SC
,
SD
,
SE
,
SA
,
SB
,
13
)
ROUND_F1_NOEXP
(
SB
,
SC
,
SD
,
SE
,
SA
,
14
)
ROUND_F1_NOEXP
(
SA
,
SB
,
SC
,
SD
,
SE
,
15
)
ROUND_F1
(
SE
,
SA
,
SB
,
SC
,
SD
,
16
)
ROUND_F1
(
SD
,
SE
,
SA
,
SB
,
SC
,
17
)
ROUND_F1
(
SC
,
SD
,
SE
,
SA
,
SB
,
18
)
ROUND_F1
(
SB
,
SC
,
SD
,
SE
,
SA
,
19
)
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
20
,
K2VALUE
)
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
21
,
K2VALUE
)
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
22
,
K2VALUE
)
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
23
,
K2VALUE
)
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
24
,
K2VALUE
)
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
25
,
K2VALUE
)
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
26
,
K2VALUE
)
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
27
,
K2VALUE
)
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
28
,
K2VALUE
)
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
29
,
K2VALUE
)
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
30
,
K2VALUE
)
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
31
,
K2VALUE
)
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
32
,
K2VALUE
)
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
33
,
K2VALUE
)
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
34
,
K2VALUE
)
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
35
,
K2VALUE
)
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
36
,
K2VALUE
)
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
37
,
K2VALUE
)
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
38
,
K2VALUE
)
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
39
,
K2VALUE
)
ROUND_F3
(
SA
,
SB
,
SC
,
SD
,
SE
,
40
)
ROUND_F3
(
SE
,
SA
,
SB
,
SC
,
SD
,
41
)
ROUND_F3
(
SD
,
SE
,
SA
,
SB
,
SC
,
42
)
ROUND_F3
(
SC
,
SD
,
SE
,
SA
,
SB
,
43
)
ROUND_F3
(
SB
,
SC
,
SD
,
SE
,
SA
,
44
)
ROUND_F3
(
SA
,
SB
,
SC
,
SD
,
SE
,
45
)
ROUND_F3
(
SE
,
SA
,
SB
,
SC
,
SD
,
46
)
ROUND_F3
(
SD
,
SE
,
SA
,
SB
,
SC
,
47
)
ROUND_F3
(
SC
,
SD
,
SE
,
SA
,
SB
,
48
)
ROUND_F3
(
SB
,
SC
,
SD
,
SE
,
SA
,
49
)
ROUND_F3
(
SA
,
SB
,
SC
,
SD
,
SE
,
50
)
ROUND_F3
(
SE
,
SA
,
SB
,
SC
,
SD
,
51
)
ROUND_F3
(
SD
,
SE
,
SA
,
SB
,
SC
,
52
)
ROUND_F3
(
SC
,
SD
,
SE
,
SA
,
SB
,
53
)
ROUND_F3
(
SB
,
SC
,
SD
,
SE
,
SA
,
54
)
ROUND_F3
(
SA
,
SB
,
SC
,
SD
,
SE
,
55
)
ROUND_F3
(
SE
,
SA
,
SB
,
SC
,
SD
,
56
)
ROUND_F3
(
SD
,
SE
,
SA
,
SB
,
SC
,
57
)
ROUND_F3
(
SC
,
SD
,
SE
,
SA
,
SB
,
58
)
ROUND_F3
(
SB
,
SC
,
SD
,
SE
,
SA
,
59
)
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
60
,
K4VALUE
)
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
61
,
K4VALUE
)
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
62
,
K4VALUE
)
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
63
,
K4VALUE
)
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
64
,
K4VALUE
)
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
65
,
K4VALUE
)
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
66
,
K4VALUE
)
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
67
,
K4VALUE
)
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
68
,
K4VALUE
)
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
69
,
K4VALUE
)
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
70
,
K4VALUE
)
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
71
,
K4VALUE
)
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
72
,
K4VALUE
)
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
73
,
K4VALUE
)
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
74
,
K4VALUE
)
C
Loop
-
mixed
to
520
cycles
(
for
the
complete
function
call
)
on
C
AMD
K7.
ALIGN
(
5
)
mov
88
(
%
esp
),
T2
mov
OFFSET
(
2
)(
T2
),
%
ecx
mov
OFFSET
(
0
)(
T2
),
%
eax
bswap
%
ecx
bswap
%
eax
mov
%
ecx
,
OFFSET
(
2
)
(
DATA
)
mov
%
eax
,
OFFSET
(
0
)
(
DATA
)
mov
OFFSET
(
3
)(
T2
),
%
edx
mov
OFFSET
(
6
)(
T2
),
%
ecx
mov
OFFSET
(
4
)(
T2
),
%
eax
mov
OFFSET
(
1
)(
T2
),
%
ebx
bswap
%
ebx
bswap
%
eax
bswap
%
ecx
mov
%
ecx
,
OFFSET
(
6
)
(
DATA
)
mov
%
eax
,
OFFSET
(
4
)
(
DATA
)
bswap
%
edx
mov
%
edx
,
OFFSET
(
3
)
(
DATA
)
mov
%
ebx
,
OFFSET
(
1
)
(
DATA
)
mov
OFFSET
(
10
)(
T2
),
%
ecx
mov
OFFSET
(
8
)(
T2
),
%
eax
mov
OFFSET
(
7
)(
T2
),
%
edx
bswap
%
eax
bswap
%
edx
mov
%
edx
,
OFFSET
(
7
)
(
DATA
)
mov
OFFSET
(
5
)(
T2
),
%
ebx
mov
%
eax
,
OFFSET
(
8
)
(
DATA
)
mov
OFFSET
(
11
)(
T2
),
%
edx
bswap
%
ecx
bswap
%
edx
mov
OFFSET
(
12
)(
T2
),
%
eax
bswap
%
ebx
mov
%
ecx
,
OFFSET
(
10
)
(
DATA
)
mov
%
ebx
,
OFFSET
(
5
)
(
DATA
)
mov
%
edx
,
OFFSET
(
11
)
(
DATA
)
mov
OFFSET
(
15
)(
T2
),
%
edx
mov
84
(
%
esp
),
T1
mov
OFFSET
(
9
)(
T2
),
%
ebx
bswap
%
edx
bswap
%
ebx
bswap
%
eax
mov
OFFSET
(
14
)(
T2
),
%
ecx
mov
%
edx
,
OFFSET
(
15
)
(
DATA
)
bswap
%
ecx
mov
%
ecx
,
OFFSET
(
14
)
(
DATA
)
mov
%
ebx
,
OFFSET
(
9
)
(
DATA
)
mov
OFFSET
(
13
)(
T2
),
%
ebx
mov
12
(
T1
),
SD
bswap
%
ebx
mov
%
ebx
,
OFFSET
(
13
)
(
DATA
)
mov
8
(
T1
),
SC
mov
16
(
T1
),
SE
mov
4
(
T1
),
SB
mov
SD
,
T2
add
OFFSET
(
0
)
(
DATA
),
SE
xor
SC
,
T2
mov
%
eax
,
OFFSET
(
12
)
(
DATA
)
mov
(
T1
),
SA
and
SB
,
T2
xor
SD
,
T2
rol
$
30
,
SB
add
T2
,
SE
mov
SA
,
T1
mov
SC
,
T2
add
OFFSET
(
1
)
(
DATA
),
SD
rol
$
5
,
T1
xor
SB
,
T2
and
SA
,
T2
xor
SC
,
T2
lea
K1VALUE
(
T1
,
SE
),
SE
add
T2
,
SD
mov
SB
,
T2
rol
$
30
,
SA
xor
SA
,
T2
and
SE
,
T2
mov
SE
,
T1
add
OFFSET
(
2
)
(
DATA
),
SC
rol
$
30
,
SE
xor
SB
,
T2
rol
$
5
,
T1
lea
K1VALUE
(
T1
,
SD
),
SD
mov
SD
,
T1
rol
$
5
,
T1
add
T2
,
SC
mov
SA
,
T2
xor
SE
,
T2
lea
K1VALUE
(
T1
,
SC
),
SC
and
SD
,
T2
xor
SA
,
T2
add
OFFSET
(
3
)
(
DATA
),
SB
mov
SC
,
T1
add
T2
,
SB
mov
SE
,
T2
rol
$
30
,
SD
xor
SD
,
T2
and
SC
,
T2
rol
$
5
,
T1
xor
SE
,
T2
add
OFFSET
(
4
)
(
DATA
),
SA
lea
K1VALUE
(
T1
,
SB
),
SB
add
T2
,
SA
rol
$
30
,
SC
mov
SD
,
T2
xor
SC
,
T2
and
SB
,
T2
mov
SB
,
T1
rol
$
5
,
T1
add
OFFSET
(
5
)
(
DATA
),
SE
rol
$
30
,
SB
xor
SD
,
T2
add
T2
,
SE
mov
SC
,
T2
xor
SB
,
T2
lea
K1VALUE
(
T1
,
SA
),
SA
mov
SA
,
T1
add
OFFSET
(
6
)
(
DATA
),
SD
and
SA
,
T2
rol
$
5
,
T1
xor
SC
,
T2
lea
K1VALUE
(
T1
,
SE
),
SE
rol
$
30
,
SA
add
T2
,
SD
mov
SB
,
T2
mov
SE
,
T1
xor
SA
,
T2
and
SE
,
T2
rol
$
5
,
T1
lea
K1VALUE
(
T1
,
SD
),
SD
xor
SB
,
T2
add
OFFSET
(
7
)
(
DATA
),
SC
rol
$
30
,
SE
add
OFFSET
(
8
)
(
DATA
),
SB
mov
SD
,
T1
add
T2
,
SC
mov
SA
,
T2
xor
SE
,
T2
rol
$
5
,
T1
and
SD
,
T2
lea
K1VALUE
(
T1
,
SC
),
SC
xor
SA
,
T2
add
T2
,
SB
mov
SE
,
T2
mov
SC
,
T1
rol
$
30
,
SD
xor
SD
,
T2
rol
$
5
,
T1
lea
K1VALUE
(
T1
,
SB
),
SB
and
SC
,
T2
xor
SE
,
T2
add
OFFSET
(
10
)
(
DATA
),
SE
add
OFFSET
(
9
)
(
DATA
),
SA
mov
SB
,
T1
add
T2
,
SA
rol
$
5
,
T1
lea
K1VALUE
(
T1
,
SA
),
SA
mov
SD
,
T2
rol
$
30
,
SC
xor
SC
,
T2
and
SB
,
T2
xor
SD
,
T2
rol
$
30
,
SB
add
T2
,
SE
mov
SC
,
T2
mov
SA
,
T1
xor
SB
,
T2
add
OFFSET
(
11
)
(
DATA
),
SD
and
SA
,
T2
rol
$
30
,
SA
rol
$
5
,
T1
xor
SC
,
T2
lea
K1VALUE
(
T1
,
SE
),
SE
add
T2
,
SD
mov
SB
,
T2
xor
SA
,
T2
mov
SE
,
T1
rol
$
5
,
T1
and
SE
,
T2
lea
K1VALUE
(
T1
,
SD
),
SD
xor
SB
,
T2
add
OFFSET
(
12
)
(
DATA
),
SC
add
T2
,
SC
rol
$
30
,
SE
mov
SA
,
T2
xor
SE
,
T2
mov
SD
,
T1
rol
$
5
,
T1
and
SD
,
T2
add
OFFSET
(
13
)
(
DATA
),
SB
lea
K1VALUE
(
T1
,
SC
),
SC
xor
SA
,
T2
add
T2
,
SB
mov
SE
,
T2
rol
$
30
,
SD
xor
SD
,
T2
and
SC
,
T2
mov
SC
,
T1
rol
$
5
,
T1
rol
$
30
,
SC
add
OFFSET
(
14
)
(
DATA
),
SA
xor
SE
,
T2
add
T2
,
SA
mov
SD
,
T2
xor
SC
,
T2
lea
K1VALUE
(
T1
,
SB
),
SB
and
SB
,
T2
mov
SB
,
T1
rol
$
5
,
T1
lea
K1VALUE
(
T1
,
SA
),
SA
mov
SA
,
T1
xor
SD
,
T2
add
OFFSET
(
15
)
(
DATA
),
SE
add
T2
,
SE
rol
$
5
,
T1
lea
K1VALUE
(
T1
,
SE
),
SE
mov
OFFSET
(
0
)
(
DATA
),
T1
xor
OFFSET
(
2
)
(
DATA
),
T1
mov
SC
,
T2
xor
OFFSET
(
8
)
(
DATA
),
T1
xor
OFFSET
(
13
)
(
DATA
),
T1
rol
$
30
,
SB
xor
SB
,
T2
and
SA
,
T2
xor
SC
,
T2
rol
$
1
,
T1
lea
K1VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
0
)
(
DATA
)
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
1
)
(
DATA
),
T1
xor
OFFSET
(
3
)
(
DATA
),
T1
rol
$
30
,
SA
add
T2
,
SD
mov
SB
,
T2
xor
SA
,
T2
and
SE
,
T2
xor
OFFSET
(
9
)
(
DATA
),
T1
xor
OFFSET
(
14
)
(
DATA
),
T1
xor
SB
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
1
)
(
DATA
)
lea
K1VALUE
(
T1
,
T2
),
T2
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
mov
OFFSET
(
2
)
(
DATA
),
T1
xor
OFFSET
(
4
)
(
DATA
),
T1
rol
$
30
,
SE
add
T2
,
SC
mov
SA
,
T2
xor
SE
,
T2
xor
OFFSET
(
10
)
(
DATA
),
T1
xor
OFFSET
(
15
)
(
DATA
),
T1
and
SD
,
T2
rol
$
1
,
T1
xor
SA
,
T2
mov
T1
,
OFFSET
(
2
)
(
DATA
)
lea
K1VALUE
(
T1
,
T2
),
T2
mov
SC
,
T1
rol
$
30
,
SD
rol
$
5
,
T1
add
T1
,
SB
add
T2
,
SB
mov
SE
,
T2
mov
OFFSET
(
3
)
(
DATA
),
T1
xor
SD
,
T2
xor
OFFSET
(
5
)
(
DATA
),
T1
and
SC
,
T2
xor
SE
,
T2
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
0
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
3
)
(
DATA
)
lea
K1VALUE
(
T1
,
T2
),
T2
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
4
)
(
DATA
),
T1
xor
OFFSET
(
6
)
(
DATA
),
T1
rol
$
30
,
SC
xor
OFFSET
(
12
)
(
DATA
),
T1
add
T2
,
SA
xor
OFFSET
(
1
)
(
DATA
),
T1
mov
SD
,
T2
xor
SC
,
T2
rol
$
1
,
T1
xor
SB
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
4
)
(
DATA
)
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
5
)
(
DATA
),
T1
add
T2
,
SE
mov
SC
,
T2
xor
OFFSET
(
7
)
(
DATA
),
T1
rol
$
30
,
SB
xor
OFFSET
(
13
)
(
DATA
),
T1
xor
SB
,
T2
xor
OFFSET
(
2
)
(
DATA
),
T1
xor
SA
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
5
)
(
DATA
)
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
6
)
(
DATA
),
T1
xor
OFFSET
(
8
)
(
DATA
),
T1
add
T2
,
SD
rol
$
30
,
SA
xor
OFFSET
(
14
)
(
DATA
),
T1
mov
SB
,
T2
xor
OFFSET
(
3
)
(
DATA
),
T1
xor
SA
,
T2
rol
$
1
,
T1
xor
SE
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
6
)
(
DATA
)
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
add
T2
,
SC
mov
SA
,
T2
rol
$
30
,
SE
mov
OFFSET
(
7
)
(
DATA
),
T1
xor
OFFSET
(
9
)
(
DATA
),
T1
xor
SE
,
T2
xor
OFFSET
(
15
)
(
DATA
),
T1
xor
OFFSET
(
4
)
(
DATA
),
T1
xor
SD
,
T2
rol
$
1
,
T1
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
7
)
(
DATA
)
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
mov
OFFSET
(
8
)
(
DATA
),
T1
xor
OFFSET
(
10
)
(
DATA
),
T1
add
T2
,
SB
rol
$
30
,
SD
mov
SE
,
T2
xor
OFFSET
(
0
)
(
DATA
),
T1
xor
OFFSET
(
5
)
(
DATA
),
T1
xor
SD
,
T2
xor
SC
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
8
)
(
DATA
)
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
9
)
(
DATA
),
T1
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
1
)
(
DATA
),
T1
add
T2
,
SA
xor
OFFSET
(
6
)
(
DATA
),
T1
mov
SD
,
T2
rol
$
1
,
T1
rol
$
30
,
SC
xor
SC
,
T2
mov
T1
,
OFFSET
(
9
)
(
DATA
)
xor
SB
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
10
)
(
DATA
),
T1
xor
OFFSET
(
12
)
(
DATA
),
T1
xor
OFFSET
(
2
)
(
DATA
),
T1
add
T2
,
SE
mov
SC
,
T2
rol
$
30
,
SB
xor
OFFSET
(
7
)
(
DATA
),
T1
xor
SB
,
T2
rol
$
1
,
T1
xor
SA
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
10
)
(
DATA
)
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
13
)
(
DATA
),
T1
rol
$
30
,
SA
xor
OFFSET
(
3
)
(
DATA
),
T1
add
T2
,
SD
xor
OFFSET
(
8
)
(
DATA
),
T1
mov
SB
,
T2
xor
SA
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
11
)
(
DATA
)
xor
SE
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
mov
OFFSET
(
12
)
(
DATA
),
T1
xor
OFFSET
(
14
)
(
DATA
),
T1
rol
$
30
,
SE
add
T2
,
SC
xor
OFFSET
(
4
)
(
DATA
),
T1
mov
SA
,
T2
xor
OFFSET
(
9
)
(
DATA
),
T1
xor
SE
,
T2
rol
$
1
,
T1
xor
SD
,
T2
mov
T1
,
OFFSET
(
12
)
(
DATA
)
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
rol
$
30
,
SD
mov
OFFSET
(
13
)
(
DATA
),
T1
xor
OFFSET
(
15
)
(
DATA
),
T1
add
T2
,
SB
mov
SE
,
T2
xor
OFFSET
(
5
)
(
DATA
),
T1
xor
SD
,
T2
xor
OFFSET
(
10
)
(
DATA
),
T1
xor
SC
,
T2
rol
$
1
,
T1
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
13
)
(
DATA
)
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
add
T2
,
SA
mov
SD
,
T2
mov
OFFSET
(
14
)
(
DATA
),
T1
xor
OFFSET
(
0
)
(
DATA
),
T1
rol
$
30
,
SC
xor
OFFSET
(
6
)
(
DATA
),
T1
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
SC
,
T2
xor
SB
,
T2
rol
$
1
,
T1
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
14
)
(
DATA
)
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
15
)
(
DATA
),
T1
xor
OFFSET
(
1
)
(
DATA
),
T1
add
T2
,
SE
mov
SC
,
T2
rol
$
30
,
SB
xor
SB
,
T2
xor
OFFSET
(
7
)
(
DATA
),
T1
xor
OFFSET
(
12
)
(
DATA
),
T1
xor
SA
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
15
)
(
DATA
)
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
0
)
(
DATA
),
T1
xor
OFFSET
(
2
)
(
DATA
),
T1
xor
OFFSET
(
8
)
(
DATA
),
T1
add
T2
,
SD
mov
SB
,
T2
rol
$
30
,
SA
xor
SA
,
T2
xor
OFFSET
(
13
)
(
DATA
),
T1
rol
$
1
,
T1
xor
SE
,
T2
mov
T1
,
OFFSET
(
0
)
(
DATA
)
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
mov
OFFSET
(
1
)
(
DATA
),
T1
xor
OFFSET
(
3
)
(
DATA
),
T1
add
T2
,
SC
mov
SA
,
T2
rol
$
30
,
SE
xor
SE
,
T2
xor
OFFSET
(
9
)
(
DATA
),
T1
xor
OFFSET
(
14
)
(
DATA
),
T1
rol
$
1
,
T1
xor
SD
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
1
)
(
DATA
)
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
mov
OFFSET
(
2
)
(
DATA
),
T1
rol
$
30
,
SD
xor
OFFSET
(
4
)
(
DATA
),
T1
add
T2
,
SB
mov
SE
,
T2
xor
OFFSET
(
10
)
(
DATA
),
T1
xor
OFFSET
(
15
)
(
DATA
),
T1
xor
SD
,
T2
xor
SC
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
2
)
(
DATA
)
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
3
)
(
DATA
),
T1
xor
OFFSET
(
5
)
(
DATA
),
T1
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
0
)
(
DATA
),
T1
add
T2
,
SA
rol
$
30
,
SC
mov
SD
,
T2
xor
SC
,
T2
rol
$
1
,
T1
xor
SB
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
3
)
(
DATA
)
mov
SA
,
T1
rol
$
5
,
T1
rol
$
30
,
SB
add
T1
,
SE
mov
OFFSET
(
4
)
(
DATA
),
T1
add
T2
,
SE
xor
OFFSET
(
6
)
(
DATA
),
T1
xor
OFFSET
(
12
)
(
DATA
),
T1
xor
OFFSET
(
1
)
(
DATA
),
T1
mov
SC
,
T2
xor
SB
,
T2
rol
$
1
,
T1
xor
SA
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
4
)
(
DATA
)
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
add
T2
,
SD
mov
OFFSET
(
5
)
(
DATA
),
T1
mov
SB
,
T2
rol
$
30
,
SA
xor
SA
,
T2
xor
SE
,
T2
xor
OFFSET
(
7
)
(
DATA
),
T1
xor
OFFSET
(
13
)
(
DATA
),
T1
xor
OFFSET
(
2
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
5
)
(
DATA
)
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
mov
OFFSET
(
6
)
(
DATA
),
T1
xor
OFFSET
(
8
)
(
DATA
),
T1
add
T2
,
SC
xor
OFFSET
(
14
)
(
DATA
),
T1
xor
OFFSET
(
3
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
6
)
(
DATA
)
mov
SA
,
T2
rol
$
30
,
SE
xor
SE
,
T2
xor
SD
,
T2
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
add
T2
,
SB
mov
OFFSET
(
7
)
(
DATA
),
T1
mov
SE
,
T2
rol
$
30
,
SD
xor
OFFSET
(
9
)
(
DATA
),
T1
xor
SD
,
T2
xor
SC
,
T2
xor
OFFSET
(
15
)
(
DATA
),
T1
xor
OFFSET
(
4
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
7
)
(
DATA
)
lea
K2VALUE
(
T1
,
T2
),
T2
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
8
)
(
DATA
),
T1
xor
OFFSET
(
10
)
(
DATA
),
T1
rol
$
30
,
SC
xor
OFFSET
(
0
)
(
DATA
),
T1
add
T2
,
SA
mov
SD
,
T2
xor
OFFSET
(
5
)
(
DATA
),
T1
rol
$
1
,
T1
and
SC
,
T2
mov
T1
,
OFFSET
(
8
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SE
mov
SA
,
T1
mov
SD
,
T2
xor
SC
,
T2
and
SB
,
T2
rol
$
30
,
SB
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
9
)
(
DATA
),
T1
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
1
)
(
DATA
),
T1
add
T2
,
SE
mov
SC
,
T2
xor
OFFSET
(
6
)
(
DATA
),
T1
rol
$
1
,
T1
and
SB
,
T2
mov
T1
,
OFFSET
(
9
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SD
mov
SC
,
T2
xor
SB
,
T2
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
10
)
(
DATA
),
T1
and
SA
,
T2
add
T2
,
SD
xor
OFFSET
(
12
)
(
DATA
),
T1
xor
OFFSET
(
2
)
(
DATA
),
T1
rol
$
30
,
SA
mov
SB
,
T2
and
SA
,
T2
xor
OFFSET
(
7
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
10
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SC
mov
SD
,
T1
rol
$
5
,
T1
mov
SB
,
T2
add
T1
,
SC
mov
OFFSET
(
11
)
(
DATA
),
T1
xor
SA
,
T2
xor
OFFSET
(
13
)
(
DATA
),
T1
xor
OFFSET
(
3
)
(
DATA
),
T1
and
SE
,
T2
xor
OFFSET
(
8
)
(
DATA
),
T1
add
T2
,
SC
rol
$
1
,
T1
mov
SA
,
T2
mov
T1
,
OFFSET
(
11
)
(
DATA
)
rol
$
30
,
SE
and
SE
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SB
mov
SA
,
T2
mov
SC
,
T1
xor
SE
,
T2
rol
$
5
,
T1
add
T1
,
SB
mov
OFFSET
(
12
)
(
DATA
),
T1
xor
OFFSET
(
14
)
(
DATA
),
T1
xor
OFFSET
(
4
)
(
DATA
),
T1
xor
OFFSET
(
9
)
(
DATA
),
T1
and
SD
,
T2
rol
$
30
,
SD
add
T2
,
SB
rol
$
1
,
T1
mov
T1
,
OFFSET
(
12
)
(
DATA
)
mov
SE
,
T2
and
SD
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SA
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
13
)
(
DATA
),
T1
xor
OFFSET
(
15
)
(
DATA
),
T1
mov
SE
,
T2
xor
OFFSET
(
5
)
(
DATA
),
T1
xor
SD
,
T2
and
SC
,
T2
xor
OFFSET
(
10
)
(
DATA
),
T1
add
T2
,
SA
rol
$
1
,
T1
rol
$
30
,
SC
mov
T1
,
OFFSET
(
13
)
(
DATA
)
mov
SD
,
T2
and
SC
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
mov
SD
,
T2
add
T1
,
SE
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
14
)
(
DATA
),
T1
xor
OFFSET
(
0
)
(
DATA
),
T1
xor
SC
,
T2
and
SB
,
T2
xor
OFFSET
(
6
)
(
DATA
),
T1
rol
$
30
,
SB
xor
OFFSET
(
11
)
(
DATA
),
T1
rol
$
1
,
T1
add
T2
,
SE
mov
SC
,
T2
mov
T1
,
OFFSET
(
14
)
(
DATA
)
and
SB
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
mov
SC
,
T2
add
T1
,
SD
mov
SE
,
T1
xor
SB
,
T2
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
15
)
(
DATA
),
T1
xor
OFFSET
(
1
)
(
DATA
),
T1
and
SA
,
T2
xor
OFFSET
(
7
)
(
DATA
),
T1
xor
OFFSET
(
12
)
(
DATA
),
T1
add
T2
,
SD
rol
$
30
,
SA
mov
SB
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
15
)
(
DATA
)
and
SA
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SC
mov
SD
,
T1
mov
SB
,
T2
rol
$
5
,
T1
add
T1
,
SC
mov
OFFSET
(
0
)
(
DATA
),
T1
xor
SA
,
T2
xor
OFFSET
(
2
)
(
DATA
),
T1
xor
OFFSET
(
8
)
(
DATA
),
T1
xor
OFFSET
(
13
)
(
DATA
),
T1
and
SE
,
T2
add
T2
,
SC
rol
$
30
,
SE
rol
$
1
,
T1
mov
T1
,
OFFSET
(
0
)
(
DATA
)
mov
SA
,
T2
and
SE
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SB
mov
SC
,
T1
mov
SA
,
T2
xor
SE
,
T2
rol
$
5
,
T1
add
T1
,
SB
mov
OFFSET
(
1
)
(
DATA
),
T1
xor
OFFSET
(
3
)
(
DATA
),
T1
xor
OFFSET
(
9
)
(
DATA
),
T1
and
SD
,
T2
xor
OFFSET
(
14
)
(
DATA
),
T1
add
T2
,
SB
rol
$
30
,
SD
mov
SE
,
T2
rol
$
1
,
T1
and
SD
,
T2
mov
T1
,
OFFSET
(
1
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SA
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
SE
,
T2
mov
OFFSET
(
2
)
(
DATA
),
T1
xor
SD
,
T2
xor
OFFSET
(
4
)
(
DATA
),
T1
xor
OFFSET
(
10
)
(
DATA
),
T1
and
SC
,
T2
add
T2
,
SA
xor
OFFSET
(
15
)
(
DATA
),
T1
rol
$
30
,
SC
mov
SD
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
2
)
(
DATA
)
and
SC
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SE
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
3
)
(
DATA
),
T1
xor
OFFSET
(
5
)
(
DATA
),
T1
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
0
)
(
DATA
),
T1
mov
SD
,
T2
rol
$
1
,
T1
xor
SC
,
T2
and
SB
,
T2
mov
T1
,
OFFSET
(
3
)
(
DATA
)
rol
$
30
,
SB
add
T2
,
SE
mov
SC
,
T2
and
SB
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SD
mov
SE
,
T1
mov
SC
,
T2
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
4
)
(
DATA
),
T1
xor
OFFSET
(
6
)
(
DATA
),
T1
xor
SB
,
T2
and
SA
,
T2
add
T2
,
SD
mov
SB
,
T2
xor
OFFSET
(
12
)
(
DATA
),
T1
rol
$
30
,
SA
and
SA
,
T2
xor
OFFSET
(
1
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
4
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SC
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
mov
OFFSET
(
5
)
(
DATA
),
T1
xor
OFFSET
(
7
)
(
DATA
),
T1
mov
SB
,
T2
xor
OFFSET
(
13
)
(
DATA
),
T1
xor
SA
,
T2
xor
OFFSET
(
2
)
(
DATA
),
T1
and
SE
,
T2
rol
$
30
,
SE
add
T2
,
SC
rol
$
1
,
T1
mov
SA
,
T2
mov
T1
,
OFFSET
(
5
)
(
DATA
)
and
SE
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SB
mov
SA
,
T2
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
xor
SE
,
T2
and
SD
,
T2
mov
OFFSET
(
6
)
(
DATA
),
T1
xor
OFFSET
(
8
)
(
DATA
),
T1
xor
OFFSET
(
14
)
(
DATA
),
T1
xor
OFFSET
(
3
)
(
DATA
),
T1
rol
$
1
,
T1
add
T2
,
SB
rol
$
30
,
SD
mov
SE
,
T2
and
SD
,
T2
mov
T1
,
OFFSET
(
6
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SA
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
7
)
(
DATA
),
T1
xor
OFFSET
(
9
)
(
DATA
),
T1
mov
SE
,
T2
xor
SD
,
T2
xor
OFFSET
(
15
)
(
DATA
),
T1
and
SC
,
T2
rol
$
30
,
SC
add
T2
,
SA
mov
SD
,
T2
xor
OFFSET
(
4
)
(
DATA
),
T1
rol
$
1
,
T1
and
SC
,
T2
mov
T1
,
OFFSET
(
7
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SE
mov
SA
,
T1
rol
$
5
,
T1
mov
SD
,
T2
add
T1
,
SE
mov
OFFSET
(
8
)
(
DATA
),
T1
xor
OFFSET
(
10
)
(
DATA
),
T1
xor
SC
,
T2
xor
OFFSET
(
0
)
(
DATA
),
T1
and
SB
,
T2
add
T2
,
SE
xor
OFFSET
(
5
)
(
DATA
),
T1
rol
$
30
,
SB
mov
SC
,
T2
and
SB
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
8
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SD
mov
SE
,
T1
rol
$
5
,
T1
mov
SC
,
T2
xor
SB
,
T2
add
T1
,
SD
and
SA
,
T2
mov
OFFSET
(
9
)
(
DATA
),
T1
rol
$
30
,
SA
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
1
)
(
DATA
),
T1
add
T2
,
SD
mov
SB
,
T2
and
SA
,
T2
xor
OFFSET
(
6
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
9
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
add
T1
,
SC
mov
SD
,
T1
rol
$
5
,
T1
mov
SB
,
T2
xor
SA
,
T2
and
SE
,
T2
add
T1
,
SC
mov
OFFSET
(
10
)
(
DATA
),
T1
xor
OFFSET
(
12
)
(
DATA
),
T1
xor
OFFSET
(
2
)
(
DATA
),
T1
add
T2
,
SC
mov
SA
,
T2
rol
$
30
,
SE
xor
OFFSET
(
7
)
(
DATA
),
T1
rol
$
1
,
T1
and
SE
,
T2
mov
T1
,
OFFSET
(
10
)
(
DATA
)
lea
K3VALUE
(
T1
,
T2
),
T1
mov
SA
,
T2
xor
SE
,
T2
add
T1
,
SB
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
mov
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
13
)
(
DATA
),
T1
xor
OFFSET
(
3
)
(
DATA
),
T1
xor
OFFSET
(
8
)
(
DATA
),
T1
and
SD
,
T2
add
T2
,
SB
mov
SE
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
11
)
(
DATA
)
rol
$
30
,
SD
and
SD
,
T2
lea
K3VALUE
(
T1
,
T2
),
T1
mov
SE
,
T2
add
T1
,
SA
xor
SD
,
T2
mov
SB
,
T1
and
SC
,
T2
rol
$
30
,
SC
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
12
)
(
DATA
),
T1
xor
OFFSET
(
14
)
(
DATA
),
T1
add
T2
,
SA
mov
SD
,
T2
xor
OFFSET
(
4
)
(
DATA
),
T1
xor
OFFSET
(
9
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
12
)
(
DATA
)
xor
SC
,
T2
xor
SB
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
13
)
(
DATA
),
T1
xor
OFFSET
(
15
)
(
DATA
),
T1
add
T2
,
SE
rol
$
30
,
SB
mov
SC
,
T2
xor
OFFSET
(
5
)
(
DATA
),
T1
xor
SB
,
T2
xor
OFFSET
(
10
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
13
)
(
DATA
)
xor
SA
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
14
)
(
DATA
),
T1
xor
OFFSET
(
0
)
(
DATA
),
T1
rol
$
30
,
SA
add
T2
,
SD
mov
SB
,
T2
xor
SA
,
T2
xor
SE
,
T2
xor
OFFSET
(
6
)
(
DATA
),
T1
xor
OFFSET
(
11
)
(
DATA
),
T1
rol
$
1
,
T1
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
14
)
(
DATA
)
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
add
T2
,
SC
mov
OFFSET
(
15
)
(
DATA
),
T1
mov
SA
,
T2
rol
$
30
,
SE
xor
OFFSET
(
1
)
(
DATA
),
T1
xor
OFFSET
(
7
)
(
DATA
),
T1
xor
SE
,
T2
xor
SD
,
T2
xor
OFFSET
(
12
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
15
)
(
DATA
)
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
mov
OFFSET
(
0
)
(
DATA
),
T1
add
T2
,
SB
xor
OFFSET
(
2
)
(
DATA
),
T1
mov
SE
,
T2
rol
$
30
,
SD
xor
OFFSET
(
8
)
(
DATA
),
T1
xor
SD
,
T2
xor
OFFSET
(
13
)
(
DATA
),
T1
xor
SC
,
T2
rol
$
1
,
T1
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
0
)
(
DATA
)
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
1
)
(
DATA
),
T1
rol
$
30
,
SC
xor
OFFSET
(
3
)
(
DATA
),
T1
xor
OFFSET
(
9
)
(
DATA
),
T1
xor
OFFSET
(
14
)
(
DATA
),
T1
add
T2
,
SA
mov
SD
,
T2
xor
SC
,
T2
rol
$
1
,
T1
xor
SB
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
1
)
(
DATA
)
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
2
)
(
DATA
),
T1
rol
$
30
,
SB
xor
OFFSET
(
4
)
(
DATA
),
T1
add
T2
,
SE
mov
SC
,
T2
xor
SB
,
T2
xor
OFFSET
(
10
)
(
DATA
),
T1
xor
OFFSET
(
15
)
(
DATA
),
T1
xor
SA
,
T2
rol
$
1
,
T1
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
2
)
(
DATA
)
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
mov
OFFSET
(
3
)
(
DATA
),
T1
xor
OFFSET
(
5
)
(
DATA
),
T1
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
0
)
(
DATA
),
T1
rol
$
30
,
SA
add
T2
,
SD
mov
SB
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
3
)
(
DATA
)
xor
SA
,
T2
xor
SE
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
mov
OFFSET
(
4
)
(
DATA
),
T1
add
T2
,
SC
rol
$
30
,
SE
xor
OFFSET
(
6
)
(
DATA
),
T1
mov
SA
,
T2
xor
OFFSET
(
12
)
(
DATA
),
T1
xor
SE
,
T2
xor
OFFSET
(
1
)
(
DATA
),
T1
rol
$
1
,
T1
xor
SD
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
4
)
(
DATA
)
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
rol
$
30
,
SD
mov
OFFSET
(
5
)
(
DATA
),
T1
add
T2
,
SB
xor
OFFSET
(
7
)
(
DATA
),
T1
xor
OFFSET
(
13
)
(
DATA
),
T1
mov
SE
,
T2
xor
SD
,
T2
xor
OFFSET
(
2
)
(
DATA
),
T1
xor
SC
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
5
)
(
DATA
)
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
6
)
(
DATA
),
T1
xor
OFFSET
(
8
)
(
DATA
),
T1
xor
OFFSET
(
14
)
(
DATA
),
T1
add
T2
,
SA
xor
OFFSET
(
3
)
(
DATA
),
T1
mov
SD
,
T2
rol
$
30
,
SC
rol
$
1
,
T1
xor
SC
,
T2
mov
T1
,
OFFSET
(
6
)
(
DATA
)
xor
SB
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
add
T2
,
SE
mov
OFFSET
(
7
)
(
DATA
),
T1
xor
OFFSET
(
9
)
(
DATA
),
T1
xor
OFFSET
(
15
)
(
DATA
),
T1
rol
$
30
,
SB
xor
OFFSET
(
4
)
(
DATA
),
T1
mov
SC
,
T2
rol
$
1
,
T1
mov
T1
,
OFFSET
(
7
)
(
DATA
)
xor
SB
,
T2
xor
SA
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
rol
$
30
,
SA
mov
OFFSET
(
8
)
(
DATA
),
T1
xor
OFFSET
(
10
)
(
DATA
),
T1
add
T2
,
SD
xor
OFFSET
(
0
)
(
DATA
),
T1
xor
OFFSET
(
5
)
(
DATA
),
T1
rol
$
1
,
T1
mov
SB
,
T2
mov
T1
,
OFFSET
(
8
)
(
DATA
)
xor
SA
,
T2
xor
SE
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
add
T2
,
SC
mov
SA
,
T2
mov
OFFSET
(
9
)
(
DATA
),
T1
rol
$
30
,
SE
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
1
)
(
DATA
),
T1
xor
OFFSET
(
6
)
(
DATA
),
T1
xor
SE
,
T2
xor
SD
,
T2
rol
$
1
,
T1
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
9
)
(
DATA
)
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
rol
$
30
,
SD
mov
OFFSET
(
10
)
(
DATA
),
T1
xor
OFFSET
(
12
)
(
DATA
),
T1
xor
OFFSET
(
2
)
(
DATA
),
T1
add
T2
,
SB
mov
SE
,
T2
xor
SD
,
T2
xor
SC
,
T2
xor
OFFSET
(
7
)
(
DATA
),
T1
rol
$
1
,
T1
mov
T1
,
OFFSET
(
10
)
(
DATA
)
lea
K4VALUE
(
T1
,
T2
),
T2
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
mov
OFFSET
(
11
)
(
DATA
),
T1
xor
OFFSET
(
13
)
(
DATA
),
T1
xor
OFFSET
(
3
)
(
DATA
),
T1
add
T2
,
SA
mov
SD
,
T2
rol
$
30
,
SC
xor
SC
,
T2
xor
OFFSET
(
8
)
(
DATA
),
T1
rol
$
1
,
T1
xor
SB
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
11
)
(
DATA
)
mov
SA
,
T1
rol
$
5
,
T1
add
T1
,
SE
mov
OFFSET
(
12
)
(
DATA
),
T1
add
T2
,
SE
xor
OFFSET
(
14
)
(
DATA
),
T1
rol
$
30
,
SB
mov
SC
,
T2
xor
OFFSET
(
4
)
(
DATA
),
T1
xor
SB
,
T2
xor
SA
,
T2
xor
OFFSET
(
9
)
(
DATA
),
T1
rol
$
1
,
T1
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
12
)
(
DATA
)
mov
SE
,
T1
rol
$
5
,
T1
add
T1
,
SD
add
T2
,
SD
rol
$
30
,
SA
mov
OFFSET
(
13
)
(
DATA
),
T1
xor
OFFSET
(
15
)
(
DATA
),
T1
mov
SB
,
T2
xor
OFFSET
(
5
)
(
DATA
),
T1
xor
SA
,
T2
xor
OFFSET
(
10
)
(
DATA
),
T1
xor
SE
,
T2
rol
$
1
,
T1
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
13
)
(
DATA
)
mov
SD
,
T1
rol
$
5
,
T1
add
T1
,
SC
mov
OFFSET
(
14
)
(
DATA
),
T1
xor
OFFSET
(
0
)
(
DATA
),
T1
xor
OFFSET
(
6
)
(
DATA
),
T1
add
T2
,
SC
rol
$
30
,
SE
mov
SA
,
T2
xor
SE
,
T2
xor
OFFSET
(
11
)
(
DATA
),
T1
xor
SD
,
T2
rol
$
1
,
T1
lea
K4VALUE
(
T1
,
T2
),
T2
mov
T1
,
OFFSET
(
14
)
(
DATA
)
mov
SC
,
T1
rol
$
5
,
T1
add
T1
,
SB
mov
OFFSET
(
15
)
(
DATA
),
T1
xor
OFFSET
(
1
)
(
DATA
),
T1
xor
OFFSET
(
7
)
(
DATA
),
T1
rol
$
30
,
SD
add
T2
,
SB
xor
OFFSET
(
12
)
(
DATA
),
T1
mov
SE
,
T2
xor
SD
,
T2
rol
$
1
,
T1
xor
SC
,
T2
lea
K4VALUE
(
T1
,
T2
),
T2
rol
$
30
,
SC
mov
T1
,
OFFSET
(
15
)
(
DATA
)
mov
SB
,
T1
rol
$
5
,
T1
add
T1
,
SA
add
T2
,
SA
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
75
,
K4VALUE
)
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
76
,
K4VALUE
)
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
77
,
K4VALUE
)
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
78
,
K4VALUE
)
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
79
,
K4VALUE
)
C
C
Load
and
byte
swap
data
C
movl
88
(
%
esp
),
T2
C
C
SWAP
(
0
,
%
eax
)
SWAP
(
1
,
%
ebx
)
SWAP
(
2
,
%
ecx
)
SWAP
(
3
,
%
edx
)
C
SWAP
(
4
,
%
eax
)
SWAP
(
5
,
%
ebx
)
SWAP
(
6
,
%
ecx
)
SWAP
(
7
,
%
edx
)
C
SWAP
(
8
,
%
eax
)
SWAP
(
9
,
%
ebx
)
SWAP
(
10
,
%
ecx
)
SWAP
(
11
,
%
edx
)
C
SWAP
(
12
,
%
eax
)
SWAP
(
13
,
%
ebx
)
SWAP
(
14
,
%
ecx
)
SWAP
(
15
,
%
edx
)
C
C
C
load
the
state
vector
C
movl
84
(
%
esp
),
T1
C
movl
(
T1
),
SA
C
movl
4
(
T1
),
SB
C
movl
8
(
T1
),
SC
C
movl
12
(
T1
),
SD
C
movl
16
(
T1
),
SE
C
C
ROUND_F1_NOEXP
(
SA
,
SB
,
SC
,
SD
,
SE
,
0
)
C
ROUND_F1_NOEXP
(
SE
,
SA
,
SB
,
SC
,
SD
,
1
)
C
ROUND_F1_NOEXP
(
SD
,
SE
,
SA
,
SB
,
SC
,
2
)
C
ROUND_F1_NOEXP
(
SC
,
SD
,
SE
,
SA
,
SB
,
3
)
C
ROUND_F1_NOEXP
(
SB
,
SC
,
SD
,
SE
,
SA
,
4
)
C
C
ROUND_F1_NOEXP
(
SA
,
SB
,
SC
,
SD
,
SE
,
5
)
C
ROUND_F1_NOEXP
(
SE
,
SA
,
SB
,
SC
,
SD
,
6
)
C
ROUND_F1_NOEXP
(
SD
,
SE
,
SA
,
SB
,
SC
,
7
)
C
ROUND_F1_NOEXP
(
SC
,
SD
,
SE
,
SA
,
SB
,
8
)
C
ROUND_F1_NOEXP
(
SB
,
SC
,
SD
,
SE
,
SA
,
9
)
C
C
ROUND_F1_NOEXP
(
SA
,
SB
,
SC
,
SD
,
SE
,
10
)
C
ROUND_F1_NOEXP
(
SE
,
SA
,
SB
,
SC
,
SD
,
11
)
C
ROUND_F1_NOEXP
(
SD
,
SE
,
SA
,
SB
,
SC
,
12
)
C
ROUND_F1_NOEXP
(
SC
,
SD
,
SE
,
SA
,
SB
,
13
)
C
ROUND_F1_NOEXP
(
SB
,
SC
,
SD
,
SE
,
SA
,
14
)
C
C
ROUND_F1_NOEXP
(
SA
,
SB
,
SC
,
SD
,
SE
,
15
)
C
ROUND_F1
(
SE
,
SA
,
SB
,
SC
,
SD
,
16
)
C
ROUND_F1
(
SD
,
SE
,
SA
,
SB
,
SC
,
17
)
C
ROUND_F1
(
SC
,
SD
,
SE
,
SA
,
SB
,
18
)
C
ROUND_F1
(
SB
,
SC
,
SD
,
SE
,
SA
,
19
)
C
C
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
20
,
K2VALUE
)
C
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
21
,
K2VALUE
)
C
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
22
,
K2VALUE
)
C
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
23
,
K2VALUE
)
C
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
24
,
K2VALUE
)
C
C
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
25
,
K2VALUE
)
C
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
26
,
K2VALUE
)
C
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
27
,
K2VALUE
)
C
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
28
,
K2VALUE
)
C
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
29
,
K2VALUE
)
C
C
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
30
,
K2VALUE
)
C
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
31
,
K2VALUE
)
C
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
32
,
K2VALUE
)
C
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
33
,
K2VALUE
)
C
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
34
,
K2VALUE
)
C
C
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
35
,
K2VALUE
)
C
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
36
,
K2VALUE
)
C
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
37
,
K2VALUE
)
C
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
38
,
K2VALUE
)
C
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
39
,
K2VALUE
)
C
C
ROUND_F3
(
SA
,
SB
,
SC
,
SD
,
SE
,
40
)
C
ROUND_F3
(
SE
,
SA
,
SB
,
SC
,
SD
,
41
)
C
ROUND_F3
(
SD
,
SE
,
SA
,
SB
,
SC
,
42
)
C
ROUND_F3
(
SC
,
SD
,
SE
,
SA
,
SB
,
43
)
C
ROUND_F3
(
SB
,
SC
,
SD
,
SE
,
SA
,
44
)
C
C
ROUND_F3
(
SA
,
SB
,
SC
,
SD
,
SE
,
45
)
C
ROUND_F3
(
SE
,
SA
,
SB
,
SC
,
SD
,
46
)
C
ROUND_F3
(
SD
,
SE
,
SA
,
SB
,
SC
,
47
)
C
ROUND_F3
(
SC
,
SD
,
SE
,
SA
,
SB
,
48
)
C
ROUND_F3
(
SB
,
SC
,
SD
,
SE
,
SA
,
49
)
C
C
ROUND_F3
(
SA
,
SB
,
SC
,
SD
,
SE
,
50
)
C
ROUND_F3
(
SE
,
SA
,
SB
,
SC
,
SD
,
51
)
C
ROUND_F3
(
SD
,
SE
,
SA
,
SB
,
SC
,
52
)
C
ROUND_F3
(
SC
,
SD
,
SE
,
SA
,
SB
,
53
)
C
ROUND_F3
(
SB
,
SC
,
SD
,
SE
,
SA
,
54
)
C
C
ROUND_F3
(
SA
,
SB
,
SC
,
SD
,
SE
,
55
)
C
ROUND_F3
(
SE
,
SA
,
SB
,
SC
,
SD
,
56
)
C
ROUND_F3
(
SD
,
SE
,
SA
,
SB
,
SC
,
57
)
C
ROUND_F3
(
SC
,
SD
,
SE
,
SA
,
SB
,
58
)
C
ROUND_F3
(
SB
,
SC
,
SD
,
SE
,
SA
,
59
)
C
C
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
60
,
K4VALUE
)
C
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
61
,
K4VALUE
)
C
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
62
,
K4VALUE
)
C
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
63
,
K4VALUE
)
C
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
64
,
K4VALUE
)
C
C
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
65
,
K4VALUE
)
C
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
66
,
K4VALUE
)
C
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
67
,
K4VALUE
)
C
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
68
,
K4VALUE
)
C
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
69
,
K4VALUE
)
C
C
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
70
,
K4VALUE
)
C
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
71
,
K4VALUE
)
C
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
72
,
K4VALUE
)
C
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
73
,
K4VALUE
)
C
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
74
,
K4VALUE
)
C
C
ROUND_F2
(
SA
,
SB
,
SC
,
SD
,
SE
,
75
,
K4VALUE
)
C
ROUND_F2
(
SE
,
SA
,
SB
,
SC
,
SD
,
76
,
K4VALUE
)
C
ROUND_F2
(
SD
,
SE
,
SA
,
SB
,
SC
,
77
,
K4VALUE
)
C
ROUND_F2
(
SC
,
SD
,
SE
,
SA
,
SB
,
78
,
K4VALUE
)
C
ROUND_F2
(
SB
,
SC
,
SD
,
SE
,
SA
,
79
,
K4VALUE
)
C
Update
the
state
vector
movl
84
(
%
esp
),
T1
...
...
@@ -285,3 +1528,14 @@ PROLOGUE(_nettle_sha1_compress)
popl
%
ebx
ret
EPILOGUE
(
_nettle_sha1_compress
)
C
TODO
:
C
*
Extend
loopmixer
so
that
it
can
exploit
associativity
,
and
for
C
example
reorder
C
C
add
%
eax
,
%
ebx
C
add
%
ecx
,
%
ebx
C
*
Use
mmx
instructions
for
the
data
expansion
,
doing
two
word
s
at
a
C
time.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment