int _tmain(int argc, _TCHAR* argv[])
{
00E71000 push ebp
00E71001 mov ebp,esp
00E71003 and esp,0FFFFFFC0h
00E71006 sub esp,0C0h
00E7100C mov eax,dword ptr [___security_cookie (0E73000h)]
00E71011 xor eax,esp
00E71013 mov dword ptr [esp+0BCh],eax
int count = 16;
__int64 inputs_hex[16] = {
0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1fedb1530240aa54,
00E7101A xor eax,eax
00E7101C mov dword ptr [esp+38h],eax
00E71020 mov dword ptr [esp+3Ch],eax
00E71024 mov dword ptr [esp+40h],eax
00E71028 mov dword ptr [esp+44h],eax
00E7102C mov dword ptr [esp+48h],eax
00E71030 mov dword ptr [esp+4Ch],eax
0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1ff0af0d95025bc3,
00E71034 mov dword ptr [esp+58h],eax
00E71038 mov dword ptr [esp+5Ch],eax
00E7103C mov dword ptr [esp+60h],eax
00E71040 mov dword ptr [esp+64h],eax
00E71044 mov dword ptr [esp+68h],eax
00E71048 mov dword ptr [esp+6Ch],eax
0x1fc9353df6af376b, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
00E7104C mov dword ptr [esp+80h],eax
00E71053 mov dword ptr [esp+84h],eax
00E7105A mov dword ptr [esp+88h],eax
00E71061 mov dword ptr [esp+8Ch],eax
00E71068 mov dword ptr [esp+90h],eax
00E7106F mov dword ptr [esp+94h],eax
0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000
00E71076 mov dword ptr [esp+98h],eax
00E7107D mov dword ptr [esp+9Ch],eax
00E71084 mov dword ptr [esp+0A0h],eax
00E7108B mov dword ptr [esp+0A4h],eax
00E71092 mov dword ptr [esp+0A8h],eax
00E71099 mov dword ptr [esp+0ACh],eax
};
00E710A0 mov dword ptr [esp+0B0h],eax
00E710A7 mov dword ptr [esp+0B4h],eax
double* inputs = (double*)inputs_hex;
double norm = calc_norm_and_regulate(count, inputs, false);
00E710AE lea eax,[esp+38h]
00E710B2 push eax
00E710B3 mov dword ptr [esp+54h],240AA54h
00E710BB mov dword ptr [esp+58h],1FEDB153h
00E710C3 mov dword ptr [esp+74h],95025BC3h
00E710CB mov dword ptr [esp+78h],1FF0AF0Dh
00E710D3 mov dword ptr [esp+7Ch],0F6AF376Bh
00E710DB mov dword ptr [esp+80h],1FC9353Dh
00E710E6 call calc_norm_and_regulate<double> (0E71130h)
00E710EB fst qword ptr [esp+34h]
fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm);
00E710EF mov edx,dword ptr [esp+34h]
00E710F3 push ecx
00E710F4 mov ecx,dword ptr [esp+3Ch]
00E710F8 fstp qword ptr [esp]
00E710FB push ecx
00E710FC push edx
00E710FD push offset string "[2]0x%016llX:%.19lg\n" (0E720F4h)
00E71102 call dword ptr [__imp____iob_func (0E7209Ch)]
00E71108 add eax,20h
00E7110B push eax
00E7110C call dword ptr [__imp__fprintf (0E720A4h)]
return 0;
}
00E71112 mov ecx,dword ptr [esp+0D4h]
00E71119 add esp,18h
00E7111C xor ecx,esp
00E7111E xor eax,eax
00E71120 call __security_check_cookie (0E711ABh)
00E71125 mov esp,ebp
00E71127 pop ebp
00E71128 ret
--- ソース ファイルがありません -------------------------------------------------------------
00E71129 int 3
00E7112A int 3
00E7112B int 3
00E7112C int 3
00E7112D int 3
00E7112E int 3
00E7112F int 3
--- c:\mingw\msys\1.0\home\root\double2\double2\double2.cpp --------------------
#include "stdafx.h"
#include <stdio.h>
#include <stdint.h>
#include <math.h>
template<typename T> static double calc_norm_and_regulate(int num, T* r, bool regulate){ // <float> for debug.
00E71130 push ebp
00E71131 mov ebp,esp
double norm = 0;
00E71133 fldz
00E71135 sub esp,10h
00E71138 push ebx
00E71139 push esi
00E7113A push edi
for (int i = 0; i < num; i++) {
00E7113B xor esi,esi
00E7113D lea ecx,[ecx]
norm += (double)r[i] * (double)r[i];
00E71140 mov eax,dword ptr [r]
00E71143 fld qword ptr [eax+esi*8]
fprintf(stdout, "[0]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm);
00E71146 sub esp,8
00E71149 fmul st(0),st
00E7114B faddp st(1),st
00E7114D fst qword ptr [norm]
00E71150 mov edi,dword ptr [ebp-8]
00E71153 fstp qword ptr [esp]
00E71156 mov ebx,dword ptr [norm]
00E71159 push edi
00E7115A push ebx
00E7115B push offset string "[0]0x%016llX:%.19lg\n" (0E7210Ch)
00E71160 call dword ptr [__imp____iob_func (0E7209Ch)]
00E71166 add eax,20h
00E71169 push eax
00E7116A call dword ptr [__imp__fprintf (0E720A4h)]
}
fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm);
00E71170 fld qword ptr [norm]
00E71173 inc esi
00E71174 add esp,18h
00E71177 cmp esi,10h
00E7117A jl calc_norm_and_regulate<double>+10h (0E71140h)
00E7117C sub esp,8
00E7117F fstp qword ptr [esp]
00E71182 push edi
00E71183 push ebx
00E71184 push offset string "[1]0x%016llX:%.19lg\n" (0E72124h)
00E71189 call dword ptr [__imp____iob_func (0E7209Ch)]
00E7118F add eax,20h
00E71192 push eax
00E71193 call dword ptr [__imp__fprintf (0E720A4h)]
norm = sqrt(norm);
00E71199 fld qword ptr [norm]
00E7119C add esp,18h
00E7119F call _CIsqrt (0E719A0h)
if (regulate)
for (int i=0;i<num;i++)
r[i] = (T)(r[i]/norm);
return norm;
}
00E711A4 pop edi
00E711A5 pop esi
00E711A6 pop ebx
00E711A7 mov esp,ebp
00E711A9 pop ebp
00E711AA ret
CmludCBfdG1haW4oaW50IGFyZ2MsIF9UQ0hBUiogYXJndltdKQp7CjAwRTcxMDAwICBwdXNoICAgICAgICBlYnAgIAowMEU3MTAwMSAgbW92ICAgICAgICAgZWJwLGVzcCAgCjAwRTcxMDAzICBhbmQgICAgICAgICBlc3AsMEZGRkZGRkMwaCAgCjAwRTcxMDA2ICBzdWIgICAgICAgICBlc3AsMEMwaCAgCjAwRTcxMDBDICBtb3YgICAgICAgICBlYXgsZHdvcmQgcHRyIFtfX19zZWN1cml0eV9jb29raWUgKDBFNzMwMDBoKV0gIAowMEU3MTAxMSAgeG9yICAgICAgICAgZWF4LGVzcCAgCjAwRTcxMDEzICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCswQkNoXSxlYXggIAoJaW50IGNvdW50ID0gMTY7CglfX2ludDY0IGlucHV0c19oZXhbMTZdID0gewoJCTB4MDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDAsIDB4MWZlZGIxNTMwMjQwYWE1NCwKMDBFNzEwMUEgIHhvciAgICAgICAgIGVheCxlYXggIAowMEU3MTAxQyAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArMzhoXSxlYXggIAowMEU3MTAyMCAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArM0NoXSxlYXggIAowMEU3MTAyNCAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArNDBoXSxlYXggIAowMEU3MTAyOCAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArNDRoXSxlYXggIAowMEU3MTAyQyAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArNDhoXSxlYXggIAowMEU3MTAzMCAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArNENoXSxlYXggIAoJCTB4MDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDAsIDB4MWZmMGFmMGQ5NTAyNWJjMywKMDBFNzEwMzQgIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzU4aF0sZWF4ICAKMDBFNzEwMzggIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzVDaF0sZWF4ICAKMDBFNzEwM0MgIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzYwaF0sZWF4ICAKMDBFNzEwNDAgIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzY0aF0sZWF4ICAKMDBFNzEwNDQgIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzY4aF0sZWF4ICAKMDBFNzEwNDggIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzZDaF0sZWF4ICAKCQkweDFmYzkzNTNkZjZhZjM3NmIsIDB4MDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDAsCjAwRTcxMDRDICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCs4MGhdLGVheCAgCjAwRTcxMDUzICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCs4NGhdLGVheCAgCjAwRTcxMDVBICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCs4OGhdLGVheCAgCjAwRTcxMDYxICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCs4Q2hdLGVheCAgCjAwRTcxMDY4ICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCs5MGhdLGVheCAgCjAwRTcxMDZGICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCs5NGhdLGVheCAgCgkJMHgwMDAwMDAwMDAwMDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDAsIDB4MDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwCjAwRTcxMDc2ICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCs5OGhdLGVheCAgCjAwRTcxMDdEICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCs5Q2hdLGVheCAgCjAwRTcxMDg0ICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCswQTBoXSxlYXggIAowMEU3MTA4QiAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArMEE0aF0sZWF4ICAKMDBFNzEwOTIgIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzBBOGhdLGVheCAgCjAwRTcxMDk5ICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCswQUNoXSxlYXggIAoJfTsKMDBFNzEwQTAgIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzBCMGhdLGVheCAgCjAwRTcxMEE3ICBtb3YgICAgICAgICBkd29yZCBwdHIgW2VzcCswQjRoXSxlYXggIAoJZG91YmxlKiBpbnB1dHMgPSAoZG91YmxlKilpbnB1dHNfaGV4OwoJZG91YmxlIG5vcm0gPSBjYWxjX25vcm1fYW5kX3JlZ3VsYXRlKGNvdW50LCBpbnB1dHMsIGZhbHNlKTsKMDBFNzEwQUUgIGxlYSAgICAgICAgIGVheCxbZXNwKzM4aF0gIAowMEU3MTBCMiAgcHVzaCAgICAgICAgZWF4ICAKMDBFNzEwQjMgIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzU0aF0sMjQwQUE1NGggIAowMEU3MTBCQiAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArNThoXSwxRkVEQjE1M2ggIAowMEU3MTBDMyAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArNzRoXSw5NTAyNUJDM2ggIAowMEU3MTBDQiAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArNzhoXSwxRkYwQUYwRGggIAowMEU3MTBEMyAgbW92ICAgICAgICAgZHdvcmQgcHRyIFtlc3ArN0NoXSwwRjZBRjM3NkJoICAKMDBFNzEwREIgIG1vdiAgICAgICAgIGR3b3JkIHB0ciBbZXNwKzgwaF0sMUZDOTM1M0RoICAKMDBFNzEwRTYgIGNhbGwgICAgICAgIGNhbGNfbm9ybV9hbmRfcmVndWxhdGU8ZG91YmxlPiAoMEU3MTEzMGgpICAKMDBFNzEwRUIgIGZzdCAgICAgICAgIHF3b3JkIHB0ciBbZXNwKzM0aF0gIAoJZnByaW50ZihzdGRvdXQsICJbMl0weCUwMTZsbFg6JS4xOWxnXG4iLCAqKHVpbnQ2NF90Kikmbm9ybSwgbm9ybSk7CjAwRTcxMEVGICBtb3YgICAgICAgICBlZHgsZHdvcmQgcHRyIFtlc3ArMzRoXSAgCjAwRTcxMEYzICBwdXNoICAgICAgICBlY3ggIAowMEU3MTBGNCAgbW92ICAgICAgICAgZWN4LGR3b3JkIHB0ciBbZXNwKzNDaF0gIAowMEU3MTBGOCAgZnN0cCAgICAgICAgcXdvcmQgcHRyIFtlc3BdICAKMDBFNzEwRkIgIHB1c2ggICAgICAgIGVjeCAgCjAwRTcxMEZDICBwdXNoICAgICAgICBlZHggIAowMEU3MTBGRCAgcHVzaCAgICAgICAgb2Zmc2V0IHN0cmluZyAiWzJdMHglMDE2bGxYOiUuMTlsZ1xuIiAoMEU3MjBGNGgpICAKMDBFNzExMDIgIGNhbGwgICAgICAgIGR3b3JkIHB0ciBbX19pbXBfX19faW9iX2Z1bmMgKDBFNzIwOUNoKV0gIAowMEU3MTEwOCAgYWRkICAgICAgICAgZWF4LDIwaCAgCjAwRTcxMTBCICBwdXNoICAgICAgICBlYXggIAowMEU3MTEwQyAgY2FsbCAgICAgICAgZHdvcmQgcHRyIFtfX2ltcF9fZnByaW50ZiAoMEU3MjBBNGgpXSAgCglyZXR1cm4gMDsKfQowMEU3MTExMiAgbW92ICAgICAgICAgZWN4LGR3b3JkIHB0ciBbZXNwKzBENGhdICAKMDBFNzExMTkgIGFkZCAgICAgICAgIGVzcCwxOGggIAowMEU3MTExQyAgeG9yICAgICAgICAgZWN4LGVzcCAgCjAwRTcxMTFFICB4b3IgICAgICAgICBlYXgsZWF4ICAKMDBFNzExMjAgIGNhbGwgICAgICAgIF9fc2VjdXJpdHlfY2hlY2tfY29va2llICgwRTcxMUFCaCkgIAowMEU3MTEyNSAgbW92ICAgICAgICAgZXNwLGVicCAgCjAwRTcxMTI3ICBwb3AgICAgICAgICBlYnAgIAowMEU3MTEyOCAgcmV0ICAKLS0tIOOCveODvOOCuSDjg5XjgqHjgqTjg6vjgYzjgYLjgorjgb7jgZvjgpMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQowMEU3MTEyOSAgaW50ICAgICAgICAgMyAgCjAwRTcxMTJBICBpbnQgICAgICAgICAzICAKMDBFNzExMkIgIGludCAgICAgICAgIDMgIAowMEU3MTEyQyAgaW50ICAgICAgICAgMyAgCjAwRTcxMTJEICBpbnQgICAgICAgICAzICAKMDBFNzExMkUgIGludCAgICAgICAgIDMgIAowMEU3MTEyRiAgaW50ICAgICAgICAgMyAgCi0tLSBjOlxtaW5nd1xtc3lzXDEuMFxob21lXHJvb3RcZG91YmxlMlxkb3VibGUyXGRvdWJsZTIuY3BwIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiNpbmNsdWRlICJzdGRhZnguaCIKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPG1hdGguaD4KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBkb3VibGUgY2FsY19ub3JtX2FuZF9yZWd1bGF0ZShpbnQgbnVtLCBUKiByLCBib29sIHJlZ3VsYXRlKXsgLy8gPGZsb2F0PiBmb3IgZGVidWcuCjAwRTcxMTMwICBwdXNoICAgICAgICBlYnAgIAowMEU3MTEzMSAgbW92ICAgICAgICAgZWJwLGVzcCAgCglkb3VibGUgbm9ybSA9IDA7CjAwRTcxMTMzICBmbGR6ICAKMDBFNzExMzUgIHN1YiAgICAgICAgIGVzcCwxMGggIAowMEU3MTEzOCAgcHVzaCAgICAgICAgZWJ4ICAKMDBFNzExMzkgIHB1c2ggICAgICAgIGVzaSAgCjAwRTcxMTNBICBwdXNoICAgICAgICBlZGkgIAoJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewowMEU3MTEzQiAgeG9yICAgICAgICAgZXNpLGVzaSAgCjAwRTcxMTNEICBsZWEgICAgICAgICBlY3gsW2VjeF0gIAoJCW5vcm0gKz0gKGRvdWJsZSlyW2ldICogKGRvdWJsZSlyW2ldOwowMEU3MTE0MCAgbW92ICAgICAgICAgZWF4LGR3b3JkIHB0ciBbcl0gIAowMEU3MTE0MyAgZmxkICAgICAgICAgcXdvcmQgcHRyIFtlYXgrZXNpKjhdICAKCQlmcHJpbnRmKHN0ZG91dCwgIlswXTB4JTAxNmxsWDolLjE5bGdcbiIsICoodWludDY0X3QqKSZub3JtLCBub3JtKTsKMDBFNzExNDYgIHN1YiAgICAgICAgIGVzcCw4ICAKMDBFNzExNDkgIGZtdWwgICAgICAgIHN0KDApLHN0ICAKMDBFNzExNEIgIGZhZGRwICAgICAgIHN0KDEpLHN0ICAKMDBFNzExNEQgIGZzdCAgICAgICAgIHF3b3JkIHB0ciBbbm9ybV0gIAowMEU3MTE1MCAgbW92ICAgICAgICAgZWRpLGR3b3JkIHB0ciBbZWJwLThdICAKMDBFNzExNTMgIGZzdHAgICAgICAgIHF3b3JkIHB0ciBbZXNwXSAgCjAwRTcxMTU2ICBtb3YgICAgICAgICBlYngsZHdvcmQgcHRyIFtub3JtXSAgCjAwRTcxMTU5ICBwdXNoICAgICAgICBlZGkgIAowMEU3MTE1QSAgcHVzaCAgICAgICAgZWJ4ICAKMDBFNzExNUIgIHB1c2ggICAgICAgIG9mZnNldCBzdHJpbmcgIlswXTB4JTAxNmxsWDolLjE5bGdcbiIgKDBFNzIxMENoKSAgCjAwRTcxMTYwICBjYWxsICAgICAgICBkd29yZCBwdHIgW19faW1wX19fX2lvYl9mdW5jICgwRTcyMDlDaCldICAKMDBFNzExNjYgIGFkZCAgICAgICAgIGVheCwyMGggIAowMEU3MTE2OSAgcHVzaCAgICAgICAgZWF4ICAKMDBFNzExNkEgIGNhbGwgICAgICAgIGR3b3JkIHB0ciBbX19pbXBfX2ZwcmludGYgKDBFNzIwQTRoKV0gIAoJfQoJZnByaW50ZihzdGRvdXQsICJbMV0weCUwMTZsbFg6JS4xOWxnXG4iLCAqKHVpbnQ2NF90Kikmbm9ybSwgbm9ybSk7CjAwRTcxMTcwICBmbGQgICAgICAgICBxd29yZCBwdHIgW25vcm1dICAKMDBFNzExNzMgIGluYyAgICAgICAgIGVzaSAgCjAwRTcxMTc0ICBhZGQgICAgICAgICBlc3AsMThoICAKMDBFNzExNzcgIGNtcCAgICAgICAgIGVzaSwxMGggIAowMEU3MTE3QSAgamwgICAgICAgICAgY2FsY19ub3JtX2FuZF9yZWd1bGF0ZTxkb3VibGU+KzEwaCAoMEU3MTE0MGgpICAKMDBFNzExN0MgIHN1YiAgICAgICAgIGVzcCw4ICAKMDBFNzExN0YgIGZzdHAgICAgICAgIHF3b3JkIHB0ciBbZXNwXSAgCjAwRTcxMTgyICBwdXNoICAgICAgICBlZGkgIAowMEU3MTE4MyAgcHVzaCAgICAgICAgZWJ4ICAKMDBFNzExODQgIHB1c2ggICAgICAgIG9mZnNldCBzdHJpbmcgIlsxXTB4JTAxNmxsWDolLjE5bGdcbiIgKDBFNzIxMjRoKSAgCjAwRTcxMTg5ICBjYWxsICAgICAgICBkd29yZCBwdHIgW19faW1wX19fX2lvYl9mdW5jICgwRTcyMDlDaCldICAKMDBFNzExOEYgIGFkZCAgICAgICAgIGVheCwyMGggIAowMEU3MTE5MiAgcHVzaCAgICAgICAgZWF4ICAKMDBFNzExOTMgIGNhbGwgICAgICAgIGR3b3JkIHB0ciBbX19pbXBfX2ZwcmludGYgKDBFNzIwQTRoKV0gIAoJbm9ybSA9IHNxcnQobm9ybSk7CjAwRTcxMTk5ICBmbGQgICAgICAgICBxd29yZCBwdHIgW25vcm1dICAKMDBFNzExOUMgIGFkZCAgICAgICAgIGVzcCwxOGggIAowMEU3MTE5RiAgY2FsbCAgICAgICAgX0NJc3FydCAoMEU3MTlBMGgpICAKCWlmIChyZWd1bGF0ZSkKCQlmb3IgKGludCBpPTA7aTxudW07aSsrKQoJCQlyW2ldID0gKFQpKHJbaV0vbm9ybSk7CglyZXR1cm4gbm9ybTsKfQowMEU3MTFBNCAgcG9wICAgICAgICAgZWRpICAKMDBFNzExQTUgIHBvcCAgICAgICAgIGVzaSAgCjAwRTcxMUE2ICBwb3AgICAgICAgICBlYnggIAowMEU3MTFBNyAgbW92ICAgICAgICAgZXNwLGVicCAgCjAwRTcxMUE5ICBwb3AgICAgICAgICBlYnAgIAowMEU3MTFBQSAgcmV0ICAK