Generated by JEB v3.0-beta.6 on 2018/11/02
contract
geneScience
{
function
start
() view
{
*0x40
= 0x60
;
var1
= msg.data
.length;
if
(var1
>= 0x4
) {
uint256
var0
= (uint256
)$msg.sig
;
if
(var0
== 0xd9f5aed
) {
mixGenes
();
}
if
(var0
== 0x1597ee44
) {
sub_9F
();
}
if
(var0
== 0x54c15b82
) {
isGeneScience
();
}
if
(var0
== 0x61a76900
) {
sub_115
();
}
if
(var0
== 0x77a74a20
) {
sub_17E
();
}
}
revert
(0x0
, 0x0
);
}
function
mixGenes
() public
view
{
uint256
var11
;
uint256
var10
;
var1
= calldataload
(0x4
);
var2
= calldataload
(0x24
);
var3
= calldataload
(0x44
);
sub_709
();
sub_709
();
sub_709
();
var16
= number
();
if
(var3
>= var16
) {
revert
(0x0
, 0x0
);
}
var16
= blockhash
(var3
);
uint256
var5
= var16
;
if
(var16
== 0x0
) {
var18
= number
();
var3
= (var3
& 0xff
) + (var18
& 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
);
var16
= number
();
if
(var3
>= var16
) {
var3
-= 0x100
;
}
var16
= blockhash
(var3
);
var5
= var16
;
}
uint256
var21
= *0x40
;
*var21
= var5
;
var21
+= 0x20
;
*var21
= var1
;
var21
+= 0x20
;
*var21
= var2
;
var21
+= 0x20
;
*var21
= var3
;
var16
= *0x40
;
var16
= keccak256
(var16
, var21
+ 0x20
- var16
);
var5
= var16
;
uint256
var6
= 0x0
;
var16
= sub_5A6
(var1
);
uint256
var7
= var16
;
var16
= sub_5A6
(var2
);
uint256
var8
= var16
;
uint256
var17
= *0x40
;
var19
= msize
();
if
(var17
<= var19
) {
var17
= msize
();
}
*var17
= 0x30
;
*0x40
= var17
+ 0x620
;
uint256
var9
= var17
;
uint256
var12
;
for
(var12
= 0x0
; var12
< 0xc
; ++var12
) {
uint256
var13
;
for
(var13
= 0x3
; var13
>= 0x1
; --var13
) {
var10
= ((int256
)var12
) * 0x4
+ var13
;
var16
= sub_668
(var6
, 0x2
, var5
);
var6
+= 0x2
;
if
(var16
== 0x0
) {
var16
= var7
;
var17
= var10
;
if
(*var7
<= var10
) {
invalid
();
}
else
{
var11
= *(var10
* 0x20
+ var7
+ 0x20
);
var17
= var10
- 0x1
;
if
(*var7
<= var17
) {
invalid
();
}
else
{
var16
= *(var17
* 0x20
+ var16
+ 0x20
);
var17
= var7
;
var18
= var10
;
if
(*var7
<= var10
) {
invalid
();
}
else
{
*(var10
* 0x20
+ var7
+ 0x20
) = var16
& 0xff
;
var16
= var11
;
var18
= var10
+ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
;
if
(*var7
<= var18
) {
invalid
();
}
else
{
*(var18
* 0x20
+ var7
+ 0x20
) = var11
& 0xff
;
}
}
}
}
}
var16
= sub_668
(var6
, 0x2
, var5
);
var6
+= 0x2
;
if
(var16
== 0x0
) {
var16
= var8
;
var17
= var10
;
if
(*var8
<= var10
) {
invalid
();
}
else
{
var11
= *(var10
* 0x20
+ var8
+ 0x20
);
var17
= var10
- 0x1
;
if
(*var8
<= var17
) {
invalid
();
}
else
{
var16
= *(var17
* 0x20
+ var16
+ 0x20
);
var17
= var8
;
var18
= var10
;
if
(*var8
<= var10
) {
invalid
();
}
else
{
*(var10
* 0x20
+ var8
+ 0x20
) = var16
& 0xff
;
var16
= var11
;
var18
= var10
+ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
;
if
(*var8
<= var18
) {
invalid
();
}
else
{
*(var18
* 0x20
+ var8
+ 0x20
) = var11
& 0xff
;
}
}
}
}
}
}
}
for
(var10
= 0x0
; var10
< 0x30
; ++var10
) {
uint256
var15
= 0x0
;
var16
= (uint256
)(var10
% 0x4
== 0x0
);
if
(var16
!= 0x0
) {
var16
= var8
;
var17
= var10
;
if
(*var8
<= var10
) {
invalid
();
}
else
{
var16
= *(var10
* 0x20
+ var16
+ 0x20
) & 0x1
;
var17
= var7
;
var18
= var10
;
if
(*var7
<= var10
) {
invalid
();
}
else
{
var16
= (uint256
)((*(var10
* 0x20
+ var7
+ 0x20
) & 0x1
) != var16
);
}
}
}
if
(var16
!= 0x0
) {
var16
= sub_668
(var6
, 0x3
, var5
);
uint256
var14
= var16
;
var6
+= 0x3
;
var17
= var7
;
var18
= var10
;
if
(*var7
<= var10
) {
invalid
();
}
else
{
var17
= *(var10
* 0x20
+ var17
+ 0x20
);
var18
= var8
;
var19
= var10
;
if
(*var8
<= var10
) {
invalid
();
}
else
{
var16
= sub_67E
(var14
, *(var10
* 0x20
+ var8
+ 0x20
), var17
);
var15
= var16
;
}
}
}
if
((var15
& 0xff
) > 0x0
) {
var16
= var15
;
var17
= var9
;
var18
= var10
;
if
(*var9
<= var10
) {
invalid
();
}
else
{
goto
loc_4BB
;
}
}
else
{
var16
= sub_668
(var6
, 0x1
, var5
);
++var6
;
if
(var16
== 0x0
) {
var16
= var7
;
var17
= var10
;
if
(*var7
<= var10
) {
invalid
();
}
else
{
var16
= *(var10
* 0x20
+ var16
+ 0x20
);
var17
= var9
;
var18
= var10
;
if
(*var9
<= var10
) {
invalid
();
}
else
{
loc_4BB:
*(var18
* 0x20
+ var17
+ 0x20
) = var16
& 0xff
;
}
}
}
else
{
var16
= var8
;
var17
= var10
;
if
(*var8
<= var10
) {
invalid
();
}
else
{
var16
= *(var10
* 0x20
+ var16
+ 0x20
);
var17
= var9
;
var18
= var10
;
if
(*var9
<= var10
) {
invalid
();
}
else
{
*(var10
* 0x20
+ var9
+ 0x20
) = var16
& 0xff
;
}
}
}
}
}
var17
= var9
;
var18
= 0x0
;
for
(var19
= 0x0
; var19
< 0x30
; ++var19
) {
var18
*= 0x20
;
uint256
var20
= var17
;
var21
= 0x2f
- var19
;
if
(*var17
<= var21
) {
invalid
();
}
uint256
$tmp
= var21
;
var21
= var20
;
var20
= var18
;
var18
= *($tmp
* 0x20
+ var21
+ 0x20
) & 0xff
;
$tmp
= var19
;
var19
= var20
;
var20
= var18
;
var18
= $tmp
;
$tmp
= var19
| var20
;
var19
= var18
;
var18
= $tmp
;
}
var16
= var18
;
var17
= var18
;
var16
= *0x40
;
*var16
= var18
;
return
(*0x40
, var16
+ 0x20
- *0x40
);
}
function
sub_9F
() public
view
{
var3
= calldataload
(0x4
);
var4
= calldataload
(((uint256
)(((char*
)var3
) + 0x4
)));
int256*
var6
= *0x40
;
*0x40
= ((uint256
)(((uint256
)(((int
)var4
) * 0x20
)) + ((int
)var6
))) + 0x20
;
*var6
= var4
;
calldatacopy
(var6
+ 1
, ((uint256
)(((char*
)var3
) + 0x24
)), ((uint256
)(((int
)var4
) * 0x20
)));
int256*
var1
= var6
;
int256*
var2
= 0x0
;
for
(var3
= 0x0
; !((unsigned char
)(((int
)var3
) >= 0x30
)); var3
= (uint256*
)(((char*
)var3
) + 0x1
)) {
var2
= (int256*
)(((int
)var2
) * 0x20
);
var4
= var1
;
uint256*
var5
= (uint256*
)(0x2f
- ((int
)var3
));
if
(!((unsigned char
)(*var1
> ((int
)var5
)))) {
invalid
();
}
uint256*
$tmp
= var5
;
var5
= var4
;
var4
= var2
;
var2
= *(((uint256
)(((uint256
)(((int
)(((int256*
)$tmp
))) * 0x20
)) + ((int
)var5
))) + 0x20
) & 0xff
;
$tmp
= var3
;
var3
= var4
;
var4
= var2
;
var2
= $tmp
;
$tmp
= (uint256*
)(((int
)var3
) | ((int
)var4
));
var3
= var2
;
var2
= $tmp
;
}
int256*
var0
= var2
;
var1
= var2
;
var0
= *0x40
;
*var0
= var2
;
return
(*0x40
, var0
+ 1
- *0x40
);
}
function
isGeneScience
() public
view
{
(uint256
var0
, uint256*
var1
) = __impl_isGeneScience
();
uint256*
var2
= var1
;
var1
= *0x40
;
*var1
= (uint256
)(((unsigned char
)(((int
)var2
) != 0x0
)));
return
(*0x40
, var1
+ 1
- *0x40
);
}
function
sub_115
() public
view
{
var1
= calldataload
(0x4
);
uint256
var0
= sub_5A6
(var1
);
var1
= *0x40
;
*var1
= 0x20
;
uint256*
var5
= var1
+ 0x20
;
*var5
= *var0
;
uint256
var3
= var5
+ 1
;
var5
= *var0
* 0x20
;
uint256
var6
= *var0
* 0x20
;
uint256
var7
= var3
;
uint256
var8
= var0
+ 0x20
;
uint256
var9
;
for
(var9
= 0x0
; var9
< var6
; var9
+= 0x20
) {
*(var7
+ var9
) = *(var8
+ var9
);
}
return
(*0x40
, ((uint256
)(var3
+ ((int
)var5
))) - *0x40
);
}
function
sub_17E
() public
view
{
var1
= calldataload
(0x4
);
sub_71B
();
uint256
var3
= sub_71B
();
for
(uint256
var4
= 0x0
; var4
< 0xc
; ++var4
) {
uint256
var5
= sub_6F1
(((int256
)var4
) * 0x4
, var1
);
uint256
var6
= var3
;
uint256
var7
= var4
;
if
(var4
>= 0xc
) {
invalid
();
}
*(((int256
)var7
) * 0x20
+ var6
) = var5
& 0xff
;
}
}
function
__impl_isGeneScience
() private
view
returns
(uint256
) {
var0
= storage[0x0
];
return
var0
& 0xff
;
}
function
sub_5A6
(uint256
par1
) private
pure
returns
(uint256
) {
sub_709
();
sub_709
();
uint256
var4
= *0x40
;
var6
= msize
();
if
(var4
<= var6
) {
var4
= msize
();
}
*var4
= 0x30
;
*0x40
= var4
+ 0x620
;
uint256
var1
= var4
;
for
(uint256
var2
= 0x0
; var2
< 0x30
; ++var2
) {
uint256
var3
= sub_6F1
(var2
, par1
);
var4
= var1
;
uint256
var5
= var2
;
if
(*var1
<= var2
) {
invalid
();
}
*(var5
* 0x20
+ var4
+ 0x20
) = var3
& 0xff
;
}
return
var1
;
}
function
sub_668
(uint256
par1
, int256
par2
, uint256
par3
) private
pure
returns
(uint256
) {
int256
var0
= par2
;
par2
= 0x2
** par3
;
return
(((0x2
** var0
+ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
) * par2
) & par1
) / ((uint256
)par2
);
}
function
sub_67E
(uint256
par1
, uint256
par2
, uint256
par3
) private
pure
returns
(uint256
) {
uint256
var0
= 0x0
;
uint256
var1
= par1
;
uint256
var2
= par2
;
if
((par1
& 0xff
) > (par2
& 0xff
)) {
var2
= par1
;
var1
= par2
;
}
uint256
var4
= (uint256
)(((var2
- var1
) & 0xff
) == 0x1
);
if
(var4
!= 0x0
) {
var4
= (uint256
)((((var1
& 0xff
) % 0x2
) & 0xff
) == 0x0
);
}
if
(var4
!= 0x0
) {
uint256
var3
= (var1
& 0xff
) < 0x17
? 0x1
: 0x0
;
if
(par3
<= var3
) {
var0
= (var1
& 0xff
) / 0x2
+ 0x10
;
}
}
return
var0
;
}
function
sub_6F1
(uint256
par1
, int256
par2
) private
pure
returns
(uint256
) {
return
sub_668
(par2
* 0x5
, 0x5
, par1
);
}
function
sub_709
() private
pure
returns
(uint256
) {
uint256*
var0
= *0x40
;
*0x40
= var0
+ 1
;
*var0
= 0x0
;
return
var0
;
}
function
sub_71B
() private
pure
returns
(uint256
) {
uint256*
var0
= *0x40
;
*0x40
= var0
+ &loc_C
;
uint256
var1
= 0xc
;
uint256*
var2
= var0
;
do
{
*var2
= 0x0
;
--var1
;
++var2
;
}
while
(var1
);
return
var0
;
}
}