flat assembler
Message board for the users of flat assembler.

Index > Main > Primes Generator (CODE)

Author
Thread Post new topic Reply to topic
r22



Joined: 27 Dec 2004
Posts: 805
r22 30 May 2005, 04:20
Sorry for the repeat thread name BUT the 'primes generator' thread is the theory (aka All Talk) thread and this one is (Hopefully) the practical Code and Optimizations thread.

Below is sourcecode that generates psuedo-Random 32bit and 16bit Prime numbers.
The IsPrimeNum function should be optimized further (If there were only an SSE2 opcode that performed integer modulus).
I BIT-Mapped all the primes from 0-65535(0xFFFF) so the Prime16 function is very fast because the IsPrimeNum function can check a 16bit number for primality in just a few instructions.

The random integer generator is just some old code I updated. The psuedo-random bit streams it creates should be extremely good.

Code:
format PE GUI 4.0
entry start
include '%fasminc%\win32a.inc'

section '.code' code readable executable
start:
     call MakeSeed
  .lp:
     call Prime16
     push eax
     call Prime32
     push eax
     push fmt
     push buffer
     call [wsprintf]
     add esp,12
     push 4  ;yes/no yes continue / no end program
     push buffer
     push buffer
     push 0
     call [MessageBox]
     sub eax,6
     jnz .ending
     jmp .lp
  .ending:
     push 0
     call [ExitProcess]

Prime32:
     push ebp
  .again:
     call Random32
     mov ebp,eax
     push eax
     call IsPrimeNum
     test eax,eax
     jz .again
     mov eax,ebp
     pop ebp
     ret 0

Prime16:
     push ebp
  .again:
     call Random32
     movzx ebp,ax
     push ebp
     call IsPrimeNum
     test eax,eax
     jz .again
     mov eax,ebp
     pop ebp
     ret 0

Random32:
     push ebp
     push ebx
     mov ebp,RandomSeed
     mov eax,[ebp]
     mov ebx,[ebp+4]
     mov ecx,[ebp+8]
     mov edx,[ebp+12]
     shld ebx,eax,1
     adc eax,0
     ror eax,7
     bswap eax
     shld edx,ecx,1
     adc ecx,0
     rol ecx,5
     mov [ebp],eax
     mov [ebp+4],ebx
     mov [ebp+8],ecx
     mov [ebp+12],edx
     xor eax,ecx
     pop ebx
     pop ebp
     ret 0

SetSeed:
.seed equ esp+4 ;,+8,+12,+16
     movdqu xmm0,[.seed]
     movntdq dqword[RandomSeed],xmm0
     ret 16

MakeSeed:
     rdtsc
     mov edx,eax
     call [GetTickCount]
     mov ecx,eax
     mul edx
     mov [RandomSeed],eax
     xor edx,ecx
     mov [RandomSeed+4],edx
     bswap ecx
     xor eax,ecx
     mov [RandomSeed+8],eax
     not edx
     bswap edx
     mul edx
     mov [RandomSeed+12],eax
     ret 0

IsPrimeNum: ;eax = 0 false, 1 true
     .num equ esp+12
     push ebp
     push ebx
     mov ebp,[.num]
     mov edx,ebp
     sub edx,2 ;if it's 2 its prime
     jz .true
     and edx,1 ;divisible by 2
     jz .false
   test ebp,0FFFF0000h
     jnz .skip
     mov ecx,ebp
     mov edx,ecx
     and ecx,111b   ;bit offset
     shr edx,3   ;byte offset
     add ecx,1
     movzx edx,byte[Primes9kb+edx]
     xor eax,eax
     shr edx,cl
     adc eax,0
     pop ebx
     pop ebp
     ret 4
  .skip:
     xor ebx,ebx
     mov ecx,[PrimeList+ebx]
  .testing:
     xor edx,edx
     mov eax,ebp
      div ecx
     test edx,edx
     jz .false
     add ebx,4
     mov ecx,[PrimeList+ebx]
     cmp ebx,4*192+4
     jne .testing ;if no more primes to test then PROBABLY true
  .true:
     mov eax,1
     pop ebx
     pop ebp
     ret 4
  .false:
     xor eax,eax
     pop ebx
     pop ebp
     ret 4



section '.data' data readable writeable
fmt db '32Bit Prime: %lu  16Bit Prime: %lu',0
buffer rb 0ffh


align 16
RandomSeed dd 1318699, 1015727, 1235239, 412943
;first 192 primes
align 16 ;
PrimeList:
dd       3,    5,     7,    11,    13,    17,    19,    23,     29,   31,    37,    41,     43,     47,     53,     59
dd      61,   67,    71,    73,    79,    83,    89,    97,    101,  103,   107,   109,    113,    127,    131,    137
dd      39,  149,   151,   157,   163,   167,   173,   179,    181,  191,   193,   197,    199,    211,    223,    227
dd     229,  233,   239,   241,   251,   257,   263,   269,    271,  277,   281,   283,    293,    307,    311,    313
dd     317,  331,   337,   347,   349,   353,   359,   367,    373,  379,   383,   389,    397,    401,    409,    419
dd     421,  431,   433,   439,   443,   449,   457,   461,    463,  467,   479,   487,    491,    499,    503,    509
dd     521,  523,   541,   547,   557,   563,   569,   571,    577,  587,   593,   599,    601,    607,    613,    617
dd     619,  631,   641,   643,   647,   653,   659,   661,    673,  677,   683,   691,    701,    709,    719,    727
dd     733,  739,   743,   751,   757,   761,   769,   773,    787,  797,   809,   811,    821,    823,    827,    829
dd     839,  853,   857,   859,   863,   877,   881,   883,    887,  907,   911,   919,    929,    937,    941,    947
dd     953,  967,   971,   977,   983,   991,   997,  1009,   1013, 1019,  1021,  1031,   1033,   1039,   1049,   1051
dd    1061, 1063,  1069,  1087,  1091,  1093,  1097,  1103,   1109, 1117,  1123,  1129,   1151,   1153,   1163,   1171
;etras needed to make sure numbers like 0xFFFFFFFD don't pass
dd    9241

align 16  ;true/false 1/0 primes from 0-65535 BIT masked (ie 2,3,5,7 = 172 = 10101100b)
Primes9kb:  ; actually 8192 bytes
db 172, 40, 138, 160, 32, 138, 32, 40, 136, 130, 8, 2, 162, 40, 2, 128, 8
db 10, 160, 32, 136, 32, 40, 128, 162, 0, 8, 128, 40, 130, 2, 8, 130
db 160, 32, 10, 32, 0, 136, 34, 0, 8, 2, 40, 130, 128, 32, 136, 32
db 32, 2, 2, 40, 128, 130, 8, 2, 162, 8, 128, 128, 8, 136, 32, 0
db 10, 0, 32, 8, 32, 8, 10, 2, 8, 130, 130, 32, 10, 128, 0, 138
db 32, 40, 0, 34, 8, 8, 32, 32, 128, 128, 32, 136, 128, 32, 2, 34
db 0, 8, 32, 0, 10, 160, 40, 128, 0, 32, 138, 0, 32, 138, 0, 0
db 136, 128, 0, 2, 34, 8, 2, 128, 8, 130, 128, 32, 0, 34, 40, 128
db 130, 0, 10, 160, 32, 0, 128, 40, 130, 32, 32, 8, 2, 0, 128, 2
db 8, 8, 32, 8, 2, 2, 32, 130, 160, 32, 0, 2, 8, 0, 160, 8
db 10, 162, 8, 128, 130, 0, 0, 0, 0, 130, 32, 32, 0, 128, 0, 2
db 128, 40, 130, 128, 40, 8, 128, 0, 138, 34, 8, 128, 0, 8, 8, 128
db 32, 130, 128, 8, 136, 0, 32, 130, 34, 40, 8, 32, 0, 0, 130, 40
db 0, 0, 32, 10, 32, 0, 10, 32, 32, 8, 130, 0, 0, 130, 40, 0
db 2, 8, 128, 128, 0, 128, 0, 32, 136, 162, 0, 2, 32, 8, 2, 0
db 40, 0, 160, 0, 0, 32, 8, 8, 162, 8, 8, 2, 40, 128, 0, 32
db 128, 32, 0, 138, 2, 8, 128, 2, 0, 10, 162, 0, 2, 2, 0, 8
db 0, 0, 136, 32, 32, 0, 160, 8, 8, 0, 40, 2, 130, 32, 2, 160
db 0, 0, 32, 40, 136, 32, 0, 8, 162, 32, 130, 0, 8, 130, 0, 32
db 130, 0, 8, 8, 34, 0, 0, 128, 0, 0, 2, 8, 136, 160, 32, 0
db 0, 8, 128, 2, 0, 2, 34, 0, 2, 128, 0, 138, 128, 32, 136, 34
db 8, 136, 130, 0, 10, 32, 32, 2, 128, 0, 2, 160, 32, 10, 0, 8
db 0, 34, 8, 8, 34, 0, 128, 128, 0, 130, 32, 32, 128, 0, 8, 0
db 34, 8, 10, 0, 0, 128, 2, 8, 136, 0, 32, 2, 2, 32, 8, 128
db 8, 2, 0, 32, 128, 2, 0, 2, 0, 0, 136, 2, 32, 136, 0, 8
db 2, 34, 32, 0, 0, 40, 10, 128, 0, 0, 0, 40, 8, 130, 8, 10
db 128, 8, 128, 2, 40, 0, 160, 0, 128, 32, 0, 0, 2, 0, 2, 162
db 40, 0, 0, 8, 8, 128, 32, 128, 34, 40, 8, 160, 0, 8, 160, 0
db 2, 128, 32, 130, 128, 32, 8, 0, 8, 128, 34, 0, 8, 34, 32, 128
db 128, 32, 8, 0, 0, 130, 2, 8, 0, 34, 8, 0, 160, 0, 2, 128
db 40, 128, 0, 32, 2, 2, 0, 136, 160, 8, 10, 128, 8, 0, 128, 0
db 0, 32, 0, 138, 32, 40, 8, 0, 0, 10, 2, 0, 130, 0, 40, 8
db 128, 0, 128, 34, 8, 0, 162, 0, 0, 2, 0, 0, 2, 8, 10, 160
db 0, 10, 32, 40, 128, 2, 8, 2, 2, 0, 0, 128, 0, 10, 32, 32
db 8, 32, 0, 128, 32, 0, 2, 160, 0, 0, 130, 8, 130, 0, 0, 10
db 32, 0, 8, 162, 8, 0, 0, 40, 0, 130, 0, 128, 128, 32, 8, 0
db 32, 0, 160, 8, 10, 130, 0, 130, 0, 8, 128, 0, 0, 10, 34, 0
db 128, 128, 0, 0, 128, 40, 130, 2, 32, 2, 128, 0, 0, 0, 32, 128
db 32, 0, 2, 128, 32, 128, 0, 40, 130, 128, 32, 128, 34, 0, 8, 130
db 8, 10, 160, 0, 128, 0, 8, 8, 0, 32, 130, 0, 40, 8, 130, 0
db 0, 0, 8, 2, 128, 8, 8, 32, 32, 0, 2, 0, 136, 34, 0, 0
db 32, 0, 130, 2, 0, 130, 32, 0, 8, 32, 0, 136, 0, 0, 0, 32
db 8, 130, 128, 32, 10, 128, 32, 10, 2, 0, 128, 160, 8, 0, 160, 8
db 128, 130, 8, 0, 0, 32, 8, 34, 32, 128, 0, 0, 0, 128, 0, 128
db 130, 40, 10, 32, 0, 8, 34, 32, 128, 32, 0, 0, 162, 32, 0, 0
db 0, 136, 128, 0, 130, 32, 32, 8, 128, 8, 10, 34, 40, 128, 2, 0
db 130, 0, 0, 136, 0, 8, 0, 2, 0, 0, 32, 8, 0, 128, 8, 0
db 32, 32, 136, 32, 0, 8, 130, 0, 10, 32, 0, 2, 2, 40, 128, 128
db 0, 8, 32, 0, 0, 160, 8, 8, 34, 32, 0, 128, 0, 130, 160, 32
db 128, 0, 40, 128, 32, 8, 2, 130, 0, 130, 130, 32, 8, 32, 32, 0
db 0, 32, 8, 0, 0, 10, 0, 32, 2, 2, 8, 0, 0, 0, 2, 2
db 0, 136, 2, 8, 10, 34, 0, 128, 128, 0, 8, 0, 32, 0, 32, 40
db 0, 130, 0, 10, 160, 32, 128, 0, 32, 2, 0, 0, 10, 0, 40, 128
db 2, 8, 0, 128, 40, 2, 2, 0, 130, 160, 0, 8, 0, 8, 136, 32
db 0, 0, 0, 40, 128, 130, 8, 130, 128, 32, 2, 32, 8, 8, 128, 8
db 0, 2, 32, 128, 0, 0, 128, 32, 0, 130, 2, 0, 128, 128, 0, 0
db 2, 8, 2, 128, 40, 8, 32, 32, 136, 32, 0, 0, 0, 8, 0, 2
db 40, 0, 2, 40, 0, 160, 0, 0, 2, 0, 0, 2, 0, 8, 2, 0
db 2, 0, 8, 10, 0, 32, 130, 2, 8, 8, 32, 8, 2, 34, 40, 128
db 2, 32, 130, 160, 0, 136, 0, 32, 0, 128, 8, 2, 0, 32, 2, 130
db 8, 136, 0, 32, 136, 0, 32, 0, 162, 0, 0, 0, 32, 2, 0, 0
db 130, 32, 0, 2, 32, 0, 8, 162, 8, 0, 32, 8, 128, 128, 32, 2
db 160, 0, 8, 0, 0, 0, 2, 0, 10, 2, 0, 128, 0, 32, 8, 32
db 0, 130, 34, 32, 128, 32, 8, 0, 0, 8, 0, 130, 8, 8, 128, 0
db 0, 2, 40, 128, 34, 8, 0, 128, 32, 2, 128, 40, 2, 128, 32, 0
db 2, 0, 0, 2, 8, 2, 2, 40, 0, 0, 0, 136, 160, 0, 136, 0
db 32, 8, 0, 0, 0, 32, 0, 2, 130, 0, 138, 0, 0, 8, 32, 32
db 0, 160, 0, 2, 128, 40, 0, 130, 0, 128, 32, 32, 2, 34, 8, 8
db 130, 0, 8, 34, 8, 2, 2, 0, 136, 0, 0, 136, 0, 40, 128, 160
db 0, 2, 160, 8, 0, 128, 32, 0, 0, 0, 8, 34, 32, 128, 0, 8
db 10, 0, 0, 128, 130, 40, 0, 32, 0, 10, 2, 8, 8, 0, 0, 8
db 128, 32, 0, 128, 32, 2, 128, 32, 2, 32, 32, 8, 128, 8, 2, 32
db 8, 128, 2, 0, 2, 0, 32, 10, 32, 0, 128, 128, 8, 0, 162, 32
db 0, 0, 8, 2, 128, 32, 8, 32, 40, 128, 162, 0, 0, 160, 8, 130
db 0, 8, 2, 128, 0, 2, 32, 8, 136, 0, 0, 0, 0, 8, 0, 2
db 32, 136, 160, 0, 8, 2, 32, 0, 160, 0, 2, 2, 0, 128, 2, 32
db 136, 32, 0, 128, 2, 32, 136, 0, 8, 8, 2, 32, 130, 0, 8, 10
db 128, 0, 136, 0, 32, 8, 0, 8, 10, 32, 32, 0, 128, 32, 0, 0
db 0, 128, 2, 0, 0, 160, 0, 0, 32, 40, 128, 0, 40, 136, 128, 0
db 0, 32, 40, 128, 128, 8, 2, 34, 0, 2, 0, 8, 128, 0, 0, 136
db 32, 8, 136, 2, 0, 2, 160, 0, 2, 2, 40, 130, 0, 32, 0, 2
db 0, 128, 128, 0, 0, 0, 40, 2, 0, 32, 138, 0, 32, 128, 0, 40
db 0, 2, 0, 10, 0, 0, 128, 128, 0, 0, 32, 32, 130, 32, 0, 136
db 128, 0, 8, 130, 8, 0, 128, 8, 0, 160, 0, 8, 34, 8, 0, 2
db 0, 8, 32, 32, 128, 0, 0, 0, 128, 32, 128, 32, 40, 8, 0, 8
db 10, 128, 32, 0, 0, 0, 10, 32, 32, 0, 32, 8, 8, 2, 8, 0
db 0, 8, 0, 128, 0, 10, 160, 0, 136, 32, 0, 0, 162, 0, 8, 0
db 32, 128, 2, 40, 2, 0, 32, 0, 32, 0, 0, 128, 8, 8, 34, 0
db 130, 128, 0, 8, 128, 32, 2, 2, 0, 128, 2, 0, 2, 128, 0, 130
db 0, 8, 128, 0, 32, 136, 0, 0, 136, 0, 8, 10, 130, 0, 128, 128
db 0, 0, 160, 0, 0, 0, 8, 8, 34, 0, 0, 34, 0, 2, 0, 0
db 2, 0, 32, 2, 2, 40, 0, 160, 0, 8, 128, 0, 0, 0, 0, 138
db 32, 0, 130, 32, 32, 136, 130, 0, 0, 128, 8, 0, 128, 0, 130, 32
db 0, 136, 32, 40, 0, 130, 0, 10, 32, 8, 0, 128, 8, 0, 0, 32
db 10, 2, 0, 128, 2, 0, 0, 34, 40, 130, 0, 0, 128, 32, 32, 10
db 0, 0, 0, 32, 8, 8, 0, 8, 128, 2, 40, 128, 32, 32, 2, 2
db 32, 0, 0, 8, 2, 128, 8, 0, 0, 32, 10, 128, 0, 2, 34, 32
db 0, 34, 0, 8, 2, 0, 130, 128, 8, 130, 128, 32, 128, 0, 40, 8
db 2, 0, 2, 130, 32, 0, 2, 40, 8, 0, 32, 130, 32, 8, 128, 0
db 0, 2, 130, 0, 2, 2, 0, 136, 0, 32, 8, 0, 32, 128, 128, 0
db 2, 160, 32, 0, 2, 32, 0, 0, 0, 0, 34, 8, 136, 160, 8, 0
db 32, 0, 130, 128, 32, 136, 0, 0, 138, 2, 0, 0, 34, 8, 2, 128
db 0, 0, 0, 32, 136, 32, 0, 130, 0, 0, 136, 128, 8, 8, 130, 8
db 0, 0, 0, 10, 32, 0, 2, 2, 8, 8, 0, 0, 8, 2, 32, 2
db 128, 8, 10, 0, 0, 128, 0, 32, 0, 160, 0, 8, 34, 0, 0, 2
db 8, 130, 32, 32, 128, 0, 8, 0, 2, 8, 0, 2, 0, 2, 128, 0
db 2, 128, 32, 0, 32, 8, 8, 2, 0, 2, 0, 32, 128, 130, 40, 2
db 160, 0, 10, 2, 0, 128, 160, 8, 0, 32, 32, 128, 128, 0, 0, 160
db 0, 2, 0, 8, 0, 162, 8, 0, 160, 8, 2, 2, 40, 0, 0, 0
db 136, 0, 0, 0, 160, 0, 10, 0, 32, 2, 0, 8, 2, 128, 0, 138
db 0, 0, 8, 0, 0, 0, 128, 32, 130, 0, 32, 2, 0, 32, 128, 0
db 32, 0, 0, 8, 10, 0, 0, 0, 2, 32, 128, 0, 0, 138, 0, 32
db 8, 0, 0, 2, 0, 40, 0, 130, 8, 136, 128, 32, 128, 2, 32, 0
db 128, 0, 2, 128, 0, 128, 0, 32, 130, 160, 32, 10, 0, 0, 128, 2
db 0, 0, 32, 40, 130, 0, 32, 2, 32, 0, 8, 0, 8, 0, 34, 8
db 8, 34, 8, 130, 128, 8, 136, 0, 32, 0, 32, 32, 136, 0, 8, 8
db 0, 40, 128, 128, 8, 2, 0, 0, 8, 2, 8, 136, 32, 0, 2, 128
db 0, 0, 0, 32, 2, 128, 0, 0, 32, 32, 0, 34, 8, 8, 32, 8
db 0, 2, 8, 10, 32, 0, 2, 32, 0, 8, 130, 0, 0, 2, 8, 2
db 2, 0, 136, 160, 32, 128, 2, 8, 8, 130, 0, 10, 0, 32, 128, 2
db 32, 130, 128, 0, 2, 32, 0, 8, 128, 8, 8, 32, 8, 2, 0, 32
db 2, 128, 0, 128, 0, 32, 128, 128, 0, 2, 160, 0, 0, 130, 0, 8
db 32, 0, 138, 2, 32, 136, 128, 8, 0, 0, 0, 0, 128, 40, 10, 32
db 0, 130, 32, 0, 136, 32, 8, 2, 130, 0, 0, 0, 0, 8, 0, 32
db 130, 2, 32, 8, 130, 8, 0, 2, 0, 128, 0, 40, 0, 128, 0, 130
db 0, 0, 0, 2, 0, 0, 162, 40, 2, 128, 8, 130, 128, 0, 128, 0
db 40, 0, 0, 0, 0, 128, 40, 2, 0, 0, 130, 160, 0, 0, 34, 0
db 8, 2, 0, 0, 32, 0, 128, 0, 32, 8, 32, 0, 10, 2, 32, 0
db 0, 0, 8, 34, 8, 2, 128, 40, 0, 0, 32, 130, 32, 0, 0, 128
db 0, 2, 0, 8, 2, 130, 32, 0, 0, 0, 136, 0, 8, 128, 2, 0
db 10, 34, 0, 2, 0, 40, 136, 0, 0, 0, 2, 32, 8, 128, 8, 0
db 0, 8, 0, 0, 8, 128, 160, 0, 8, 0, 0, 128, 128, 8, 2, 160
db 0, 0, 130, 8, 130, 0, 0, 8, 0, 40, 8, 2, 0, 8, 32, 40
db 2, 130, 32, 0, 0, 32, 0, 32, 8, 8, 32, 8, 0, 2, 0, 128
db 128, 0, 128, 160, 0, 136, 2, 0, 128, 128, 0, 0, 2, 0, 0, 0
db 40, 8, 0, 32, 130, 32, 32, 128, 128, 0, 0, 130, 40, 2, 2, 0
db 10, 128, 0, 8, 2, 0, 136, 32, 8, 10, 2, 32, 128, 0, 0, 8
db 128, 0, 0, 34, 40, 0, 160, 0, 2, 128, 8, 0, 0, 0, 10, 32
db 0, 10, 0, 0, 8, 2, 0, 2, 2, 40, 0, 2, 0, 128, 160, 0
db 128, 0, 0, 8, 160, 0, 8, 128, 0, 0, 2, 8, 128, 160, 0, 10
db 2, 8, 0, 160, 0, 8, 34, 40, 0, 0, 32, 0, 0, 0, 138, 2
db 40, 0, 32, 0, 2, 2, 0, 128, 130, 40, 128, 32, 0, 0, 2, 32
db 128, 128, 0, 8, 130, 32, 2, 0, 40, 2, 32, 0, 128, 2, 32, 136
db 2, 0, 2, 32, 0, 2, 128, 8, 8, 0, 32, 2, 32, 0, 8, 130
db 8, 8, 34, 0, 0, 2, 32, 128, 0, 32, 10, 0, 40, 0, 2, 0
db 0, 128, 8, 2, 0, 0, 2, 0, 32, 0, 0, 32, 128, 128, 0, 8
db 32, 0, 130, 0, 8, 128, 32, 32, 0, 32, 0, 8, 34, 8, 0, 0
db 0, 128, 0, 0, 8, 32, 0, 0, 0, 8, 128, 162, 0, 0, 0, 8
db 128, 0, 32, 8, 0, 0, 2, 34, 0, 128, 32, 0, 8, 0, 32, 130
db 130, 0, 0, 0, 0, 2, 0, 40, 0, 32, 8, 0, 160, 0, 0, 128
db 40, 8, 128, 32, 0, 2, 8, 8, 2, 0, 2, 32, 32, 128, 0, 32
db 0, 0, 0, 0, 32, 40, 136, 0, 8, 0, 162, 40, 2, 130, 0, 130
db 160, 32, 8, 2, 32, 8, 0, 0, 8, 160, 0, 130, 0, 8, 130, 0
db 32, 8, 2, 0, 0, 0, 0, 0, 32, 0, 0, 130, 0, 10, 32, 32
db 128, 0, 8, 128, 130, 8, 0, 2, 0, 2, 2, 32, 8, 0, 0, 10
db 32, 32, 8, 0, 0, 10, 0, 0, 130, 128, 0, 2, 32, 0, 10, 32
db 8, 128, 34, 0, 8, 160, 32, 0, 128, 8, 128, 128, 0, 0, 2, 32
db 8, 34, 8, 2, 128, 40, 0, 2, 32, 130, 0, 0, 2, 0, 8, 128
db 2, 0, 2, 32, 32, 0, 128, 0, 2, 0, 0, 136, 32, 32, 8, 162
db 0, 2, 0, 32, 130, 128, 8, 0, 128, 0, 10, 0, 0, 0, 160, 8
db 0, 0, 40, 0, 2, 32, 128, 160, 0, 8, 0, 0, 0, 130, 0, 8
db 0, 8, 128, 2, 0, 128, 0, 0, 2, 32, 0, 8, 160, 0, 8, 128
db 40, 130, 0, 40, 0, 32, 0, 128, 2, 0, 0, 0, 0, 2, 2, 0
db 130, 128, 0, 138, 0, 0, 2, 2, 8, 8, 128, 8, 0, 160, 0, 0
db 2, 40, 138, 128, 0, 0, 0, 40, 8, 0, 0, 2, 32, 8, 0, 2
db 0, 136, 32, 32, 8, 2, 8, 136, 2, 0, 8, 32, 8, 0, 128, 0
db 0, 32, 32, 8, 0, 0, 0, 162, 8, 0, 32, 8, 0, 0, 0, 138
db 128, 32, 130, 0, 8, 0, 2, 0, 0, 0, 8, 0, 130, 40, 136, 0
db 32, 10, 2, 0, 0, 160, 8, 2, 2, 40, 128, 2, 40, 2, 0, 0
db 128, 2, 32, 0, 2, 8, 0, 32, 0, 2, 128, 0, 10, 128, 32, 128
db 32, 0, 8, 128, 8, 0, 34, 0, 128, 2, 8, 136, 128, 0, 2, 32
db 0, 128, 0, 0, 2, 130, 0, 0, 2, 0, 2, 128, 32, 8, 32, 0
db 136, 160, 0, 8, 128, 8, 130, 0, 40, 0, 160, 0, 8, 34, 0, 8
db 162, 0, 8, 0, 32, 2, 0, 0, 0, 32, 0, 128, 0, 8, 128, 162
db 8, 8, 128, 8, 0, 0, 0, 128, 32, 0, 128, 2, 32, 128, 32, 0
db 2, 0, 0, 2, 130, 32, 0, 32, 0, 10, 0, 32, 128, 0, 0, 8
db 160, 32, 0, 128, 40, 0, 0, 0, 0, 32, 40, 0, 160, 8, 8, 0
db 32, 128, 0, 8, 10, 32, 32, 130, 0, 40, 128, 0, 0, 2, 130, 8
db 0, 128, 8, 2, 0, 0, 0, 32, 40, 128, 32, 0, 0, 32, 8, 0
db 2, 0, 130, 0, 0, 10, 32, 0, 0, 2, 8, 8, 34, 40, 128, 2
db 32, 138, 128, 0, 130, 0, 8, 0, 32, 0, 8, 128, 0, 128, 128, 32
db 0, 32, 32, 10, 2, 0, 8, 0, 0, 8, 0, 32, 128, 0, 40, 2
db 128, 0, 130, 32, 8, 0, 32, 0, 10, 0, 0, 128, 0, 0, 2, 128
db 0, 128, 0, 8, 0, 2, 0, 0, 2, 32, 0, 0, 8, 10, 32, 32
db 138, 0, 32, 0, 130, 8, 2, 128, 40, 2, 0, 0, 128, 160, 32, 128
db 2, 0, 0, 128, 0, 0, 160, 8, 2, 130, 32, 0, 32, 0, 2, 32
db 8, 136, 2, 0, 0, 2, 32, 130, 128, 32, 8, 160, 32, 0, 2, 0
db 0, 32, 0, 8, 34, 0, 2, 130, 0, 136, 32, 0, 8, 2, 32, 128
db 32, 8, 8, 130, 40, 2, 2, 32, 2, 128, 0, 0, 2, 40, 0, 32
db 8, 0, 128, 32, 128, 128, 8, 0, 0, 0, 2, 0, 0, 0, 32, 0
db 2, 2, 0, 128, 0, 40, 8, 128, 0, 128, 32, 40, 0, 128, 8, 0
db 0, 32, 2, 2, 0, 8, 32, 32, 128, 32, 0, 136, 0, 0, 8, 0
db 0, 2, 0, 8, 128, 128, 0, 0, 0, 8, 128, 32, 8, 8, 2, 32
db 0, 0, 32, 0, 32, 0, 136, 0, 32, 0, 130, 0, 2, 32, 0, 0
db 130, 8, 8, 0, 32, 0, 2, 0, 8, 160, 8, 0, 128, 0, 2, 128
db 8, 10, 32, 0, 0, 32, 0, 128, 34, 0, 0, 2, 0, 2, 128, 0
db 2, 128, 32, 130, 0, 0, 8, 2, 8, 10, 128, 32, 0, 0, 0, 8
db 32, 32, 136, 32, 32, 0, 0, 0, 0, 160, 40, 0, 2, 0, 136, 32
db 32, 128, 32, 0, 128, 0, 0, 10, 128, 0, 128, 128, 32, 130, 160, 0
db 0, 0, 0, 0, 0, 8, 0, 34, 0, 0, 2, 0, 138, 32, 0, 10
db 2, 32, 0, 130, 8, 0, 2, 8, 130, 0, 32, 128, 0, 32, 0, 32
db 32, 8, 128, 8, 8, 0, 0, 130, 2, 0, 8, 0, 0, 130, 2, 0
db 8, 2, 0, 2, 128, 0, 130, 0, 40, 136, 128, 0, 0, 2, 32, 0
db 160, 8, 0, 34, 32, 0, 2, 32, 0, 0, 0, 8, 0, 8, 136, 130
db 0, 0, 32, 0, 2, 2, 8, 130, 32, 0, 8, 2, 0, 8, 32, 0
db 10, 160, 8, 0, 0, 32, 2, 32, 32, 2, 0, 8, 8, 32, 0, 8
db 0, 8, 130, 128, 0, 130, 128, 32, 0, 2, 8, 0, 128, 0, 2, 34
db 0, 2, 0, 0, 8, 0, 32, 2, 32, 0, 128, 32, 0, 0, 0, 8
db 2, 130, 0, 0, 32, 0, 138, 32, 40, 128, 34, 8, 10, 2, 0, 128
db 0, 0, 130, 0, 0, 2, 32, 32, 0, 130, 0, 2, 160, 0, 128, 2
db 40, 128, 0, 0, 130, 0, 0, 136, 130, 0, 0, 32, 8, 2, 0, 8
db 2, 128, 0, 8, 0, 40, 8, 34, 0, 8, 128, 40, 0, 128, 0, 128
db 0, 0, 0, 0, 8, 128, 32, 0, 8, 0, 0, 128, 2, 32, 8, 128
db 32, 10, 0, 8, 0, 0, 0, 2, 2, 0, 0, 130, 0, 0, 0, 32
db 128, 2, 0, 136, 32, 0, 2, 2, 0, 128, 130, 0, 0, 32, 0, 128
db 2, 40, 128, 0, 0, 0, 160, 0, 0, 0, 8, 2, 128, 0, 128, 32
db 0, 0, 2, 0, 10, 34, 0, 0, 0, 32, 138, 160, 0, 136, 32, 8
db 128, 130, 8, 2, 130, 8, 0, 128, 8, 0, 0, 0, 8, 32, 32, 0
db 160, 0, 0, 160, 8, 2, 130, 0, 128, 0, 32, 2, 0, 8, 136, 0
db 0, 8, 2, 32, 0, 130, 0, 10, 160, 0, 8, 0, 0, 128, 0, 8
db 0, 160, 0, 0, 2, 8, 8, 32, 0, 0, 0, 0, 0, 160, 8, 2
db 2, 40, 128, 0, 0, 0, 160, 0, 0, 0, 0, 8, 2, 8, 10, 0
db 32, 130, 128, 0, 128, 0, 32, 0, 32, 8, 0, 34, 0, 0, 34, 40
db 128, 0, 40, 8, 128, 32, 136, 0, 40, 136, 0, 8, 2, 162, 32, 0
db 128, 0, 130, 128, 0, 8, 2, 0, 128, 130, 0, 8, 0, 32, 2, 128
db 32, 2, 0, 32, 8, 0, 8, 136, 128, 0, 0, 32, 32, 0, 130, 32
db 0, 32, 0, 2, 0, 8, 0, 0, 0, 2, 162, 8, 2, 0, 0, 136
db 0, 32, 0, 0, 32, 0, 0, 8, 10, 2, 8, 2, 128, 32, 8, 128
db 0, 130, 2, 32, 128, 0, 8, 8, 0, 32, 0, 128, 0, 130, 128, 0
db 128, 32, 8, 8, 0, 8, 0, 128, 40, 128, 2, 8, 128, 32, 32, 8
db 32, 0, 0, 2, 8, 0, 32, 0, 0, 128, 8, 2, 0, 0, 128, 34
db 32, 8, 128, 0, 8, 0, 32, 2, 2, 0, 128, 160, 0, 8, 0, 0
db 0, 32, 8, 0, 32, 0, 130, 2, 0, 0, 32, 0, 8, 0, 8, 0
db 34, 0, 8, 128, 8, 130, 2, 0, 0, 0, 32, 130, 0, 0, 8, 128
db 0, 0, 128, 32, 0, 0, 40, 0, 32, 0, 128, 0, 8, 128, 0, 0
db 10, 130, 32, 130, 0, 32, 10, 0, 0, 2, 2, 32, 8, 32, 8, 8
db 128, 0, 0, 2, 32, 8, 160, 0, 0, 32, 0, 8, 130, 8, 0, 32
db 8, 0, 128, 0, 0, 160, 0, 8, 0, 0, 136, 0, 0, 2, 0, 40
db 0, 0, 40, 2, 32, 32, 0, 2, 8, 0, 162, 0, 0, 2, 0, 2
db 0, 0, 0, 128, 32, 8, 2, 32, 128, 32, 0, 2, 130, 8, 2, 128
db 0, 0, 0, 32, 8, 32, 32, 0, 0, 8, 2, 2, 32, 128, 2, 40
db 8, 160, 0, 2, 32, 0, 128, 0, 0, 8, 34, 32, 0, 0, 8, 130
db 0, 0, 0, 32, 8, 0, 130, 0, 8, 128, 32, 128, 2, 8, 0, 0
db 0, 10, 0, 8, 136, 130, 0, 0, 162, 32, 2, 0, 0, 136, 128, 32
db 128, 34, 8, 136, 32, 0, 0, 0, 8, 128, 130, 32, 2, 0, 32, 0
db 0, 8, 136, 34, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 2, 2
db 0, 128, 34, 0, 8, 160, 8, 0, 128, 32, 128, 0, 0, 130, 0, 0
db 8, 0, 8, 2, 130, 8, 0, 128, 0, 8, 0, 0, 138, 2, 32, 128
db 0, 0, 10, 0, 0, 130, 0, 0, 2, 0, 0, 128, 2, 8, 0, 2
db 8, 8, 0, 8, 0, 0, 0, 0, 0, 32, 8, 32, 32, 128, 0, 8
db 2, 0, 40, 0, 0, 8, 138, 32, 32, 8, 2, 8, 0, 160, 0, 0
db 160, 0, 128, 0, 32, 128, 160, 0, 8, 32, 0, 0, 34, 0, 8, 34
db 0, 0, 0, 0, 138, 32, 0, 138, 0, 32, 0, 130, 8, 10, 34, 0
db 0, 2, 40, 128, 32, 0, 10, 0, 0, 8, 128, 0, 8, 130, 8, 0
db 0, 40, 2, 0, 0, 10, 34, 8, 8, 0, 8, 10, 32, 0, 2, 128
db 32, 0, 0, 0, 128, 32, 0, 8, 162, 0, 0, 0, 32, 0, 0, 8
db 136, 32, 32, 10, 0, 0, 128, 130, 8, 0, 0, 32, 0, 128, 0, 0
db 160, 32, 0, 32, 40, 0, 32, 0, 10, 128, 8, 130, 0, 32, 128, 32
db 32, 0, 34, 0, 128, 2, 8, 8, 0, 8, 130, 0, 0, 0, 160, 0
db 2, 0, 40, 128, 128, 8, 8, 128, 0, 0, 128, 0, 0, 0, 0, 128
db 2, 32, 128, 32, 0, 10, 128, 40, 130, 0, 0, 2, 128, 0, 8, 34
db 0, 8, 0, 0, 0, 34, 32, 128, 128, 32, 128, 0, 0, 2, 34, 0
db 8, 0, 8, 2, 34, 40, 128, 2, 32, 138, 32, 32, 130, 0, 0, 0
db 128, 0, 0, 128, 0, 2, 2, 0, 8, 160, 32, 128, 34, 0, 128, 32
db 0, 10, 0, 40, 0, 0, 8, 130, 128, 0, 0, 34, 0, 128, 0, 8
db 8, 34, 0, 0, 130, 0, 0, 0, 32, 0, 0, 8, 128, 130, 0, 0
db 34, 0, 0, 0, 0, 0, 0, 0, 136, 2, 32, 8, 160, 0, 8, 128
db 0, 0, 0, 40, 2, 128, 0, 0, 32, 40, 8, 2, 8, 0, 162, 0
db 130, 128, 0, 2, 128, 0, 130, 2, 32, 0, 0, 8, 0, 32, 32, 128
db 0, 0, 2, 160, 0, 136, 0, 40, 128, 130, 0, 0, 130, 32, 0, 0
db 0, 128, 160, 0, 136, 32, 0, 128, 0, 0, 10, 0, 8, 130, 128, 32
db 128, 0, 0, 2, 2, 8, 8, 160, 8, 0, 32, 0, 0, 128, 0, 8
db 0, 0, 138, 2, 0, 128, 32, 8, 0, 2, 0, 130, 0, 0, 8, 32
db 0, 10, 0, 32, 0, 0, 0, 0, 128, 8, 0, 0, 40, 8, 32, 0
db 10, 2, 8, 136, 32, 0, 2, 32, 32, 130, 0, 8, 0, 0, 0, 2
db 0, 32, 8, 0, 0, 8, 2, 8, 128, 2, 8, 0, 128, 32, 136, 0
db 8, 0, 2, 8, 0, 32, 0, 2, 130, 0, 136, 0, 32, 128, 2, 32
db 0, 0, 0, 8, 0, 40, 0, 130, 40, 130, 0, 0, 0, 34, 0, 128
db 34, 8, 0, 2, 0, 0, 0, 0, 0, 128, 32, 0, 0, 0, 0, 0
db 0, 10, 0, 8, 130, 0, 8, 0, 0, 32, 10, 2, 0, 128, 160, 0
db 8, 128, 32, 128, 0, 0, 10, 128, 0, 8, 32, 0, 128, 0, 8, 2
db 130, 0, 130, 128, 40, 2, 0, 32, 0, 0, 32, 8, 2, 8, 0, 2
db 40, 0, 0, 8, 2, 128, 0, 2, 0, 0, 136, 0, 0, 2, 2, 32
db 0, 2, 8, 128, 32, 32, 0, 32, 8, 8, 130, 0, 0, 160, 0, 2
db 0, 32, 128, 32, 0, 0, 0, 0, 0, 2, 0, 8, 2, 40, 130, 0
db 32, 2, 0, 0, 136, 2, 32, 128, 128, 8, 8, 128, 8, 128, 128, 0
db 0, 32, 32, 8, 32, 0, 128, 32, 8, 8, 2, 32, 2, 2, 0, 8
db 32, 0, 130, 0, 40, 136, 2, 0, 2, 32, 0, 2, 128, 0, 2, 128
db 32, 128, 0, 40, 0, 130, 8, 10, 128, 8, 0, 0, 32, 8, 0, 32
db 8, 32, 40, 0, 128, 0, 2, 34, 0, 0, 128, 0, 2, 0, 32, 8
db 0, 8, 0, 128, 0, 8, 32, 32, 128, 2, 0, 130, 0, 0, 8, 32
db 0, 0, 34, 0, 0, 0, 40, 2, 2, 0, 10, 0, 32, 10, 2, 8
db 0, 32, 0, 2, 128, 0, 0, 130, 0, 128, 0, 0, 8, 34, 32, 136
db 32, 0, 2, 2, 40, 0, 130, 40, 8, 160, 0, 128, 0, 8, 0, 2
db 8, 2, 130, 0, 0, 0, 40, 8, 0, 32, 0, 0, 0, 8, 0, 0
db 0, 160, 0, 128, 0, 40, 0, 128, 0, 128, 32, 32, 128, 128, 0, 2
db 2, 8, 0, 0, 0, 0, 128, 32, 136, 0, 0, 136, 34, 0, 8, 0
db 0, 128, 128, 32, 0, 32, 0, 8, 0, 0, 0, 130, 0, 0, 0, 32
db 2, 128, 0, 130, 32, 32, 2, 0, 8, 128, 160, 0, 0, 32, 0, 2
db 130, 0, 136, 0, 32, 130, 34, 0, 128, 0, 0, 8, 2, 0, 2, 0
db 0, 0, 128, 0, 128, 34, 40, 0, 0, 0, 0, 32, 0, 0, 0, 0
db 128, 0, 32, 130, 2, 0, 0, 2, 8, 10, 0, 32, 128, 0, 40, 0
db 160, 32, 0, 32, 8, 136, 2, 8, 2, 2, 40, 0, 128, 0, 128, 128
db 0, 8, 0, 32, 0, 130, 0, 8, 32, 8, 2, 0, 8, 128, 0, 32
db 10, 32, 0, 0, 130, 0, 8, 2, 0, 2, 0, 0, 136, 0, 0, 138
db 0, 0, 0, 128, 0, 2, 130, 8, 130, 0, 32, 8, 0, 32, 10, 0
db 32, 128, 128, 0, 2, 2, 40, 130, 2, 8, 0, 0, 0, 0, 32, 32
db 0, 34, 8, 0, 160, 0, 128, 128, 40, 128, 0, 32, 0, 2, 8, 0
db 128, 8, 8, 32, 0, 0, 0, 0, 136, 160, 0, 2, 0, 32, 128, 0
db 8, 2, 32, 0, 0, 128, 0, 136, 128, 0, 0, 0, 8, 136, 128, 0
db 0, 128, 32, 128, 128, 32, 0, 32, 0, 2, 2, 8, 128, 128, 0, 0
db 32, 40, 128, 130, 0, 130, 32, 32, 136, 0, 32, 0, 0, 0, 2, 2
db 0, 2, 0, 8, 136, 32, 0, 0, 34, 0, 128, 160, 0, 0, 128, 0
db 0, 128, 32, 8, 128, 0, 136, 2, 0, 128, 2, 8, 2, 2, 32, 2
db 0, 32, 0, 128, 32, 2, 32, 0, 0, 32, 8, 2, 0, 0, 0, 0
db 0, 128, 128, 32, 2, 0, 0, 8, 0, 0, 0, 128, 40, 2, 0, 0
db 8, 128, 0, 136, 32, 8, 8, 128, 0, 10, 128, 0, 128, 0, 0, 130
db 128, 32, 0, 2, 0, 8, 160, 0, 0, 0, 0, 0, 0, 32, 10, 32
db 0, 0, 0, 8, 128, 128, 8, 8, 0, 8, 0, 2, 32, 136, 32, 0
db 130, 34, 0, 8, 128, 8, 0, 130, 0, 0, 128, 32, 8, 32, 0, 2
db 32, 0, 0, 2, 0, 8, 130, 0, 128, 128, 8, 2, 0, 32, 2, 0
db 0, 0, 34, 0, 8, 160, 32, 0, 2, 0, 138, 32, 0, 10, 32, 32
db 136, 2, 8, 0, 130, 32, 0, 2, 0, 8, 0, 0, 0, 32, 32, 128
db 32, 0, 0, 32, 40, 128, 0, 40, 0, 0, 0, 8, 32, 0, 8, 128
db 0, 8, 0, 8, 130, 2, 0, 136, 32, 0, 0, 0, 8, 0, 34, 8
db 10, 34, 8, 0, 130, 8, 8, 32, 0, 130, 0, 0, 0, 128, 0, 2
db 2, 0, 128, 2, 8, 2, 0, 0, 2, 34, 0, 0, 0, 8, 10, 128
db 0, 128, 128, 32, 130, 128, 0, 128, 0, 32, 8, 162, 0, 2, 160, 0
db 128, 0, 32, 138, 0, 0, 8, 0, 32, 128, 2, 8, 2, 32, 0, 0
db 0, 8, 8, 0, 32, 0, 2, 40, 8, 34, 0, 2, 160, 8, 128, 0
db 0, 2, 0, 0, 10, 32, 8, 8, 0, 8, 8, 2, 32, 128, 0, 32
db 8, 128, 32, 136, 2, 0, 0, 34, 8, 8, 162, 8, 2, 128, 8, 8
db 32, 0, 0, 32, 0, 0, 32, 0, 10, 2, 32, 0, 0, 8, 0, 0
db 0, 10, 2, 0, 8, 32, 8, 2, 162, 32, 128, 128, 0, 130, 128, 0
db 128, 32, 0, 8, 34, 0, 0, 32, 32, 128, 2, 32, 136, 0, 0, 0
db 0, 40, 0, 0, 8, 2, 130, 0, 2, 130, 0, 8, 32, 0, 8, 32
db 8, 0, 32, 0, 10, 128, 8, 0, 0, 32, 128, 0, 32, 0, 32, 0
db 128, 128, 0, 0, 2, 32, 0, 130, 0, 128, 0, 32, 0, 0, 32, 128
db 0, 8, 8, 0, 0, 130, 2, 8, 0, 0, 0, 0, 0, 0, 128, 160
db 8, 8, 0, 8, 0, 2, 8, 2, 0, 0, 130, 0, 8, 0, 32, 0
db 0, 160, 0, 0, 0, 32, 10, 128, 32, 128, 34, 0, 8, 2, 0, 10
db 32, 32, 0, 0, 8, 0, 128, 32, 2, 0, 0, 0, 130, 0, 0, 162
db 40, 2, 2, 0, 0, 0, 0, 0, 32, 0, 8, 0, 0, 10, 0, 0
db 2, 0, 32, 128, 128, 0, 10, 34, 0, 136, 32, 0, 0, 34, 40, 0
db 2, 32, 8, 128, 0, 128, 2, 32, 128, 128, 8, 10, 0, 0, 128, 0
db 8, 8, 32, 0, 138, 0, 32, 0, 0, 0, 2, 130, 40, 130, 2, 32
db 0, 0, 0, 0, 0, 0, 128, 32, 0, 8, 160, 32, 0, 0, 0, 2
db 0, 0, 0, 34, 0, 0, 0, 8, 8, 34, 8, 128, 0, 40, 130, 32
db 0, 8, 0, 8, 8, 0, 0, 0, 162, 0, 2, 130, 8, 2, 0, 0
db 136, 0, 40, 128, 0, 0, 2, 32, 0, 2, 0, 40, 2, 32, 32, 0
db 2, 8, 0, 128, 8, 8, 0, 8, 128, 128, 32, 0, 32, 32, 128, 0
db 8, 0, 130, 8, 8, 128, 8, 0, 128, 32, 0, 0, 0, 0, 32, 32
db 0, 32, 8, 0, 0, 0, 128, 130, 8, 10, 0, 0, 2, 0, 40, 128
db 32, 0, 0, 0, 0, 2, 128, 0, 136, 0, 0, 2, 34, 0, 8, 160
db 0, 2, 162, 0, 0, 2, 0, 2, 32, 0, 8, 32, 0, 8, 130, 0
db 0, 0, 0, 0, 2, 8, 130, 0, 0, 8, 32, 32, 0, 34, 0, 2
db 0, 40, 128, 0, 32, 0, 128, 0, 2, 0, 8, 8, 34, 0, 8, 2
db 8, 0, 0, 0, 2, 128, 32, 136, 0, 8, 0, 0, 0, 0, 162, 8
db 2, 2, 32, 128, 32, 0, 128, 32, 0, 0, 0, 0, 0, 128, 32, 130
db 0, 8, 8, 32, 0, 0, 0, 32, 8, 0, 0, 10, 32, 0, 2, 0
db 40, 136, 0, 0, 0, 32, 32, 8, 2, 0, 8, 160, 8, 128, 0, 0
db 8, 32, 32, 0, 0, 32, 128, 130, 0, 0, 32, 40, 0, 128, 0, 2
db 160, 0, 0, 0, 32, 0, 128, 0, 8, 0, 0, 128, 130, 8, 2, 128
db 32, 0, 2, 8, 136, 0, 8, 0, 0, 32, 128, 128, 32, 0, 160, 0
db 2, 0, 8, 0, 130, 8, 2, 128, 0, 128, 130, 8, 128, 0, 0, 136
db 0, 0, 136, 32, 0, 10, 0, 0, 0, 128, 8, 10, 160, 0, 0, 32
db 32, 8, 32, 0, 2, 32, 0, 128, 0, 32, 0, 0, 32, 0, 0, 0
db 0, 34, 0, 0, 2, 0, 0, 2, 8, 10, 0, 0, 128, 32, 0, 128
db 128, 8, 2, 130, 40, 0, 2, 0, 0, 32, 0, 128, 0, 32, 0, 32
db 0, 8, 0, 32, 128, 128, 32, 130, 32, 32, 0, 0, 8, 128, 2, 8
db 0, 32, 40, 0, 128, 0, 10, 128, 0, 2, 0, 8, 0, 0, 0, 8
db 34, 8, 2, 130, 32, 128, 0, 0, 8, 2, 32, 128, 128, 0, 2, 128
db 32, 128, 0, 32, 10, 0, 0, 2, 0, 40, 128, 34, 0, 0, 162, 0
db 0, 0, 0, 10, 128, 32, 128, 2, 8, 0, 32, 8, 0, 2, 32, 0
db 2, 0, 128, 128, 32, 0, 32, 8, 136, 0, 8, 2, 34, 0, 0, 0
db 0, 130, 32, 0, 0, 2, 0, 0, 130, 0, 8, 0, 32, 128, 2, 8
db 0, 0, 32, 8, 0, 8, 8, 34, 0, 0, 32, 0, 128, 128, 0, 8
db 128, 0, 2, 0, 8, 128, 2, 0, 0, 34, 0, 2, 0, 8, 128, 0
db 32, 128, 34, 0, 0, 32, 0, 2, 128, 0, 130, 130, 8, 2, 0, 0
db 136, 32, 40, 0, 0, 8, 8, 0, 32, 2, 0, 8, 136, 0, 0, 128
db 2, 32, 0, 162, 0, 0, 0, 0, 0, 0, 40, 0, 128, 32, 130, 0
db 40, 8, 128, 0, 2, 162, 0, 0, 128, 0, 10, 160, 0, 8, 2, 0
db 8, 0, 0, 0, 0, 8, 2, 0, 32, 0, 160, 0, 8, 2, 8, 128
db 34, 8, 0, 2, 32, 0, 2, 0, 128, 32, 32, 10, 0, 8, 0, 32
db 0, 10, 2, 0, 130, 130, 8, 128, 0, 0, 0, 32, 32, 0, 160, 0
db 0, 2, 8, 0, 0, 40, 8, 0, 0, 136, 2, 0, 128, 2, 0, 10
db 2, 32, 2, 0, 8, 136, 0, 32, 2, 0, 8, 0, 0, 8, 10, 2
db 40, 128, 0, 0, 0, 0, 32, 8, 32, 0, 8, 130, 0, 0, 128, 40
db 0, 2, 0, 2, 128, 0, 128, 0, 40, 8, 32, 0, 0, 128, 40, 0
db 130, 8, 128, 128, 0, 8, 32, 0, 128, 32, 0, 8, 0, 0, 128, 130
db 0, 138, 0, 32, 0, 0, 0, 128, 130, 0, 0, 160, 0, 2, 128, 40
db 0, 32, 32, 128, 32, 32, 128, 128, 8, 10, 0, 8, 130, 0, 0, 2
db 0, 0, 128, 0, 32, 136, 0, 0, 0, 160, 0, 2, 128, 8, 0, 128
db 0, 2, 34, 32, 0, 128, 8, 0, 130, 8, 0, 0, 8, 130, 0, 0
db 2, 0, 40, 0, 0, 0, 0, 130, 0, 2, 128, 0, 136, 160, 0, 0
db 0, 32, 136, 130, 0, 0, 0, 8, 0, 128, 8, 0, 128, 0, 8, 0
db 0, 8, 0, 8, 0, 32, 0, 2, 128, 32, 2, 32, 0, 0, 0, 32
db 0, 130, 0, 2, 2, 8, 2, 0, 40, 0, 32, 0, 8, 2, 0, 128
db 32, 0, 10, 0, 32, 2, 2, 0, 0, 128, 0, 136, 0, 40, 128, 0
db 0, 0, 0, 32, 0, 0, 40, 2, 128, 32, 0, 2, 0, 0, 162, 8
db 0, 2, 32, 128, 2, 0, 130, 0, 0, 136, 0, 0, 8, 0, 0, 2
db 160, 40, 0, 2, 0, 128, 0, 0, 128, 32, 40, 136, 160, 0, 2, 32
db 0, 130, 130, 0, 128, 128, 32, 2, 0, 8, 128, 0, 8, 0, 34, 0
db 130, 128, 32, 0, 128, 32, 128, 0, 8, 0, 130, 8, 8, 0, 0, 130
db 2, 0, 0, 32, 0, 128, 2, 0, 8, 32, 8, 0, 2, 40, 128, 0
db 32, 8, 160, 0, 0, 32, 8, 8, 2, 0, 2, 32, 32, 0, 0, 40
db 2, 128, 0, 0, 2, 32, 8, 0, 0, 8, 2, 40, 0, 2, 0, 128
db 0, 0, 130, 0, 0, 8, 2, 8, 0, 162, 32, 0, 2, 0, 128, 0
db 32, 0, 34, 8, 8, 0, 0, 10, 32, 0, 2, 2, 0, 0, 0, 0
db 10, 2, 8, 136, 0, 0, 0, 0, 0, 2, 0, 32, 2, 0, 0, 0
db 2, 32, 128, 32, 0, 2, 160, 0, 2, 130, 8, 136, 0, 0, 0, 2
db 0, 136, 128, 0, 0, 0, 8, 2, 0, 8, 2, 160, 0, 130, 32, 0
db 8, 32, 0, 2, 128, 0, 0, 128, 32, 2, 0, 32, 0, 0, 40, 0
db 128, 8, 2, 160, 0, 128, 0, 0, 2, 128, 32, 136, 32, 32, 0, 128
db 8, 0, 2, 0, 0, 128, 8, 0, 32, 32, 128, 34, 32, 0, 34, 0
db 2, 0, 40, 0, 2, 40, 0, 32, 32, 2, 0, 0, 128, 130, 0, 0
db 0, 40, 128, 2, 0, 8, 32, 0, 136, 0, 0, 0, 130, 0, 0, 34
db 0, 0, 130, 8, 8, 0, 32, 2, 32, 0, 0, 128, 0, 0, 128, 8
db 0, 128, 0, 0, 160, 0, 0, 2, 0, 128, 34, 0, 10, 130, 32, 130
db 0, 32, 2, 0, 0, 2, 32, 8, 0, 160, 0, 8, 0, 0, 128, 0
db 32, 130, 128, 0, 0, 32, 8, 128, 0, 0, 2, 34, 0, 0, 130, 8
db 10, 0, 32, 136, 0, 8, 128, 128, 0, 0, 0, 8, 2, 2, 40, 0
db 0, 32, 0, 2, 8, 0, 0, 8, 8, 32, 0, 0, 2, 32, 8, 128
db 0, 136, 0, 32, 0, 2, 0, 0, 2, 0, 0, 0, 8, 0, 32, 32
db 128, 32, 0, 128, 128, 8, 8, 0, 8, 0, 130, 8, 2, 0, 0, 10
db 34, 40, 0, 32, 8, 2, 0, 32, 0, 0, 32, 138, 0, 32, 2, 0
db 40, 8, 128, 8, 0, 162, 0, 0, 2, 0, 130, 160, 0, 128, 0, 0
db 8, 130, 0, 0, 0, 32, 2, 130, 0, 0, 128, 0, 128, 32, 8, 8
db 128, 0, 0, 0, 32, 2, 0, 8, 0, 32, 32, 2, 0, 0, 8, 160
db 0, 0, 32, 32, 128, 0, 32, 136, 0, 0, 2, 2, 32, 0, 0, 0
db 10, 34, 0, 130, 0, 0, 128, 32, 32, 128, 0, 0, 8, 0, 8, 8
db 0, 0, 0, 130, 32, 10, 32, 0, 8, 2, 8, 0, 0, 0, 8, 0
db 0, 2, 0, 40, 138, 128, 0, 0, 32, 32, 0, 128, 0, 8, 0, 0
db 128, 2, 0, 2, 32, 0, 128, 0, 32, 128, 0, 0, 2, 32, 8, 0
db 0, 0, 8, 32, 0, 8, 2, 40, 128, 130, 0, 0, 160, 8, 2, 2
db 8, 2, 128, 32, 2, 32, 0, 0, 0, 8, 0, 0, 8, 130, 128, 32
db 138, 32, 32, 8, 2, 0, 128, 0, 0, 2, 162, 0, 0, 130, 40, 0
db 32, 0, 128, 0, 0, 8, 32, 8, 2, 0, 0, 128, 2, 32, 0, 0
db 0, 130, 32, 40, 0, 2, 8, 8, 0, 32, 0, 128, 8, 8, 0, 32
db 128, 2, 0, 0, 160, 0, 2, 128, 40, 0, 0, 0, 8, 128, 0, 0
db 32, 0, 0, 128, 0, 2, 130, 0, 2, 2, 0, 2, 128, 32, 8, 32
db 0, 8, 162, 0, 2, 160, 32, 128, 128, 40, 128, 0, 0, 0, 2, 0
db 128, 160, 0, 8, 0, 32, 2, 0, 0, 136, 128, 0, 130, 0, 32, 128
db 2, 0, 8, 2, 8, 0, 128, 32, 136, 0, 0, 128, 34, 32, 8, 0
db 8, 0, 2, 0, 2, 0, 40, 2, 160, 0, 10, 2, 32, 128, 32, 8
db 0, 128, 32, 130, 0, 0, 0, 0, 32, 130, 0, 8, 0, 34, 0, 2
db 2, 8, 128, 0, 8, 136, 32, 0, 8, 32, 8, 128, 2, 8, 0, 160
db 0, 0, 2, 8, 8, 160, 0, 136, 0, 32, 0, 0, 0, 10, 0, 40
db 0, 128, 32, 128, 32, 32, 0, 32, 0, 8, 0, 0, 0, 2, 8, 0
db 128, 32, 128, 0, 0, 128, 2, 0, 0, 160, 0, 8, 0, 8, 2, 2
db 0, 0, 0, 32, 2, 34, 0, 8, 128, 0, 2, 2, 32, 130, 128, 8
db 2, 128, 0, 0, 32, 32, 136, 2, 8, 2, 0, 32, 128, 128, 32, 8
db 0, 0, 2, 0, 40, 0, 32, 8, 0, 128, 8, 0, 0, 32, 2, 128
db 0, 0, 32, 0, 136, 0, 8, 2, 34, 8, 2, 0, 0, 8, 160, 0
db 0, 2, 0, 136, 2, 0, 10, 0, 32, 130, 128, 8, 2, 160, 32, 8
db 0, 0, 128, 0, 0, 0, 0, 32, 2, 2, 0, 2, 0, 0, 136, 2
db 8, 128, 2, 8, 8, 2, 8, 128, 2, 40, 0, 0, 32, 2, 0, 0
db 128, 0, 0, 0, 130, 32, 0, 128, 32, 8, 0, 0, 10, 32, 0, 128
db 0, 0, 0, 34, 0, 128, 128, 32, 8, 128, 0, 128, 32, 32, 0, 32
db 8, 8, 0, 40, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0
db 2, 34, 40, 2, 2, 0, 130, 0, 0, 136, 0, 8, 128, 32, 0, 10
db 160, 32, 0, 0, 40, 128, 32, 32, 8, 32, 0, 8, 130, 8, 0, 32
db 32, 128, 128, 0, 128, 0, 32, 128, 2, 40, 0, 130, 8, 0, 128, 0
db 2, 2, 0, 0, 0, 0, 0, 32, 32, 128, 160, 0, 2, 2, 8, 130
db 128, 0, 10, 0, 0, 138, 32, 0, 136, 2, 0, 0, 2, 32, 2, 0
db 0, 8, 0, 32, 130, 0, 32, 0, 0, 0, 8, 34, 40, 0, 0, 8
db 136, 160, 0, 0, 32, 8, 8, 0, 8, 2, 128, 8, 2, 0, 8, 8
db 128, 32, 0, 2, 0, 0, 2, 0, 0, 128, 0, 128, 128, 0, 0, 0
db 0, 2, 2, 0, 128, 32, 0, 8, 32, 0, 128, 0, 32, 2, 32, 32
db 2, 0, 0, 0, 32, 8, 10, 160, 8, 0, 128, 32, 8, 32, 0, 130
db 2, 0, 0, 0, 0, 2, 130, 0, 0, 0, 8, 10, 128, 0, 0, 34
db 0, 0, 32, 0, 8, 130, 0, 2, 0, 32, 128, 0, 32, 0, 32, 0
db 8, 0, 8, 2, 2, 0, 0, 0, 32, 2, 32, 0, 130, 0, 8, 0
db 0, 0, 0, 0, 32, 0, 130, 8, 130, 128, 32, 128, 2, 40, 0, 128
db 0, 2, 128, 0, 128, 128, 32, 2, 0, 32, 10, 32, 8, 0, 2, 0
db 8, 32, 0, 0, 0, 0, 8, 32, 0, 128, 2, 40, 0, 162, 8, 0
db 130, 0, 2, 2, 0, 0, 0, 0, 130, 0, 0, 136, 0, 8, 8, 2
db 0, 0, 0, 8, 8, 0, 0, 2, 2, 32, 128, 2, 0, 2, 0, 0
db 0, 0, 8, 128, 128, 0, 0, 32, 32, 0, 0, 8, 8, 2, 0, 0
db 0, 40, 136, 0, 32, 8, 0, 40, 0, 0, 8, 2, 2, 0, 0, 2
db 0, 128, 160, 0, 136, 32, 0, 136, 128, 0, 0, 128, 8, 130, 2, 0
db 128, 0, 0, 8, 34, 0, 136, 32, 8, 8, 2, 8, 2, 130, 0, 128
db 0, 32, 8, 2, 0, 128, 32, 0, 0, 32, 0, 0, 0, 32, 8, 0
db 32, 8, 0, 32, 128, 128, 0, 0, 0, 32, 0, 128, 32, 0, 32, 0
db 130, 0, 40, 136, 0, 8, 8, 2, 0, 128, 128, 32, 2, 128, 0, 2
db 0, 8, 0, 128, 0, 10, 162, 0, 0, 0, 8, 0, 160, 0, 130, 32
db 8, 0, 2, 0, 0, 0, 0, 2, 0, 0, 138, 128, 0, 136, 0, 0
db 136, 0, 0, 0, 128, 0, 0, 2, 0, 130, 0, 0, 0, 0, 8, 8
db 34, 8, 0, 34, 8, 0, 0, 32, 8, 32, 0, 8, 0, 32, 128, 32
db 8, 0, 2, 8, 130, 0, 32, 8, 0, 0, 136, 0, 32, 0, 0, 8
db 8, 128, 0, 2, 2, 32, 0, 128, 0, 2, 0, 8, 8, 0, 0, 8
db 32, 32, 2, 0, 0, 130, 0, 0, 130, 2, 8, 0, 0, 0, 10, 160
db 40, 0, 0, 0, 0, 160, 0, 0, 0, 8, 8, 130, 0, 0, 130, 0
db 2, 128, 8, 0, 32, 0, 0, 0, 8, 0, 160, 0, 8, 0, 0, 0
db 130, 0, 0, 0, 32, 2, 0, 8, 128, 34, 0, 8, 2, 8, 2, 130
db 0, 2, 160, 32, 0, 2, 40, 0, 128, 8, 0, 128, 8, 2, 128, 32
db 8, 0, 0, 130, 32, 32, 0, 128, 0, 0, 2, 40, 128, 130, 8, 2
db 32, 0, 128, 2, 8, 136, 0, 0, 10, 130, 32, 128, 128, 0, 130, 0
db 0, 2, 32, 32, 0, 130, 8, 2, 128, 0, 128, 2, 32, 130, 0, 0
db 0, 0, 32, 8, 2, 0, 2, 0, 32, 0, 0, 0, 2, 0, 32, 128
db 32, 8, 0, 34, 0, 0, 128, 8, 0, 2, 8, 0, 32, 0, 8, 0
db 0, 128, 34, 0, 8, 0, 40, 0, 0, 0, 130, 128, 32, 0, 0, 0
db 128, 128, 8, 0, 160, 0, 128, 128, 32, 0, 0, 0, 0, 32, 32, 0
db 128, 8, 0, 0, 0, 130, 0, 40, 0, 0, 0, 8, 2, 8, 0, 2
db 0, 0, 0, 0, 2, 128, 0, 10, 128, 0, 2, 34, 32, 8, 2, 0
db 0, 160, 8, 128, 0, 32, 0, 32, 32, 0, 0, 0, 8, 0, 8, 0
db 160, 0, 2, 0, 8, 2, 0, 0, 0, 34, 0, 128, 160, 0, 8, 32
db 0, 128, 130, 0, 2, 128, 0, 0, 2, 0, 0, 32, 8, 8, 0, 40
db 2, 0, 32, 128, 128, 0, 0, 2, 40, 128, 128, 8, 2, 32, 8, 0
db 128, 40, 136, 0, 0, 8, 32, 0, 0, 128, 0, 0, 2, 40, 0, 128
db 32, 0, 32, 0, 136, 0, 0, 0, 34, 0, 8, 32, 0, 2, 128, 32
db 136, 0, 32, 128, 2, 0, 0, 128, 0, 0, 2, 0, 128, 2, 0

section '.idata' import data readable writeable

  library kernel32,'KERNEL32.DLL',\
          user32,'USER32.DLL'
      include  "%fasminc%\apia\kernel32.inc"
      include  "%fasminc%\apia\user32.inc"


section '.reloc' fixups data discardable
    
Post 30 May 2005, 04:20
View user's profile Send private message AIM Address Yahoo Messenger Reply with quote
donkey7



Joined: 31 Jan 2005
Posts: 127
Location: Poland, Malopolska
donkey7 30 May 2005, 19:42
hmm, what about generating BIG primes, like 1024 or 2048 bit (they may be not exactly prime, but should have few divisors).
Post 30 May 2005, 19:42
View user's profile Send private message Visit poster's website Reply with quote
r22



Joined: 27 Dec 2004
Posts: 805
r22 03 Jun 2005, 01:15
Making BIG primes would take longer as you would have to use math library functions for checking the primality.

I'm not sure what the largest integer representation a DOUBLE value can hold but they might be helpful as well.
Post 03 Jun 2005, 01:15
View user's profile Send private message AIM Address Yahoo Messenger Reply with quote
Eoin



Joined: 16 Jun 2003
Posts: 68
Location: Ireland
Eoin 03 Jun 2005, 12:24
The FPU can work with 64bit integers.
Post 03 Jun 2005, 12:24
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.

Website powered by rwasa.