// File: /workspace/github_cpp_makefile_star2_O1/Eba-M[P]E3DC-Control/RscpExampleMain.cpp
// Function: iModbusTCP()
int iModbusTCP()
{
// jede Minute wird die Temperatur abgefragt, innerhalb 10sec muss die Antwort da sein, ansonsten wird die Verbindug geschlossen.
    static time_t tlast = 0;
    time_t now;
    time(&now);
    static time_t t_OeK;

    Modbus_send Msend;
    printf("ÖK%i",now-t_OeK);
    if ((now-t_OeK)>40)
    {
        if (t_OeK>0&&(now-t_OeK)>300)
            e3dc_config.stop = 100;
        t_OeK = now;
        if (isocket>0)
        {
            SocketClose(isocket);
            isocket = -1;
        }
    }
    if (e3dc_config.debug) printf("ÖKa%i",now-tlast);
    if (brequest||(not brequest&&(now-tlast)>10)) // 10 Sekunden auf die Antwoert warten
    {
        if (isocket <= 0)
        {
            if (e3dc_config.debug) printf("ÖKb%i",now-t_OeK);
            sprintf(server_ip,e3dc_config.heizung_ip);
            if (e3dc_config.debug)
                printf("BSC");
            
            isocket = SocketConnect(server_ip, 502);
            if (e3dc_config.debug)
                printf("ASC");
            iLength = 0;

        }
        if (e3dc_config.debug) printf("ÖKc%i",now-t_OeK);
        if (isocket > 0&&not brequest&&(now-tlast)>10) // Nur alle 10sec Anfrage starten
        {
            tlast = now;
            if (e3dc_config.debug) printf("ÖKd%i",now-t_OeK);
            send.resize(12);
            if (e3dc_config.debug)
                printf("RV");
            receive.resize(1024);
            if (e3dc_config.debug)
                printf("ARV");

// Heizkreise schalten in Abhängigkeit vom EVU und Status des jeweiligen heizkreis
// Wenn WP und oekofen aus sind, dann heizkreise ausschalten
// Wenn WP oder oekofen laufen Heizkreise einschalten
            
            if (temp[13] > 0 && not brequest && (now-t_OeK<20))
// Temperatur Puffer gesetzt?
            {
//  Kessel in Abhängigleit zu Aussentemperatur zu- und abschalten
//  Regelgröße ist die Zulufttemperatur der LWWP
//  daneben die aktuelle Temperatur vom Wetterportal
// und anstatt die Mitteltemperatur die aktuelle Temperatur zur Verifizierung
                if (wolf.size()>0)
                {
                    if (
                        (
                         (now - wolf[wpzl].t < 300)&&wolf[wpzl].wert>-90)
                        &&
                        //                        ((now - wolf[wpal].t < 300)&&wolf[wpal].wert<wolf[wpzl].wert)
                        //                        &&
                        ((now - wolf[wphl].t < 300)&&wolf[wphl].wert>0)
                        
                        )
                        isttemp = wolf[wpzl].wert;
                    if (wetter.size() > 0)
                    {
                        isttemp  = (isttemp  + wetter[0].temp)/2;
                        if (
                            (now - wolf[wpzl].t > 300)||wolf[wpzl].wert<-90
                            )
                            isttemp = wetter[0].temp;
                    }
                    // Wenn die Wolf läuft, dann die Berechnung isttemp mit zulufttemperatur bei Abtaubetrieb aussetzen
                    if (
                        (((now - wolf[wppw].t < 300)&&wolf[wppw].wert>0)
                         ||
                         ((now - wolf[wpalv].t < 300)&&wolf[wpalv].wert>0))
                        &&
                        ((now - wolf[wphl].t < 300)&&wolf[wphl].wert>0)
                        &&
                        ((now - wolf[wpzl].t < 300)&&wolf[wpzl].wert>-90)
                        )
                        isttemp = (wolf[wpzl].wert + wetter[0].temp)/2 + 1;
                    // wenn die WP läuft wird die isttemp um 1° hochgesetzt ???? überprüfen
                    if (isttemp>-99)
                    {
                        if ((isttemp<(e3dc_config.WPZWE))&&temp[17]==0)
                            //                if (temp[0]<(e3dc_config.WPZWE)*10&&temp[17]==0)
                        {
                            iLength  = iModbusTCP_Set(101,1,101); //Heizkessel register 101
                            iLength  = iModbusTCP_Get(101,0,101); //Heizkessel
                            //                    brequest = true;
                        }
                        // Pellets wird nur ausgeschaltet, wenn die WP-Anforderung für die WP da ist
                        if (isttemp>(e3dc_config.WPZWE+2)&&temp[17]==1)
                        {
                            iLength  = iModbusTCP_Set(101,0,101); //Heizkessel
                            iLength  = iModbusTCP_Get(101,0,101); //Heizkessel
                            //                    brequest = true;
                        }
                    }
                }
// Heizkreise schalten nur beim Abtauen nicht oder wenn WP aus
                if (temp[1]==0&&
                    (
//                     ((now - wolf[wphl].t < 300)&&wolf[wphl].wert>0)||
//                     (now - wolf[wphl].t > 300)||
//                     (now - wolf[wppw].t > 300)||
                     (wolf[wpeevk].wert==0)
                     ||
                      (now - wolf[wpbhg].t < 100&&wolf[wpbhg].wert!=6&&temp[17]==0)
//                     ||
//                     ((now - wolf[wppw].t < 300)&&wolf[wppw].wert==0)
                     )
                    &&

                    (
                        ((tasmota_status[0]==0||temp[14]>300)&&bHK1off==0)
                     ||
                        temp[17]>0)
                    )
// EVU Aus und Heizkreis Aus und fbh Anforderung ein -> einschalten
                {
                    iLength  = iModbusTCP_Set(11,1,11); //FBH? register 11
                    iLength  = iModbusTCP_Get(11,1,11); //FBH?
  //                  brequest = true;
                }
                if (temp[7]==0&&
                    (
//                     ((now - wolf[wphl].t < 300)&&wolf[wphl].wert>3)||
//                     (now - wolf[wphl].t > 300)||
//                     (now - wolf[wppw].t > 300)||
                     (wolf[wpeevk].wert==0)
                     ||
                      (now - wolf[wpbhg].t < 100&&wolf[wpbhg].wert!=6&&temp[17]==0)
//                     ||
//                     ((now - wolf[wppw].t < 300)&&wolf[wppw].wert==0)
                     )
                    &&
                    (
                     (
                      (tasmota_status[0]==0||temp[14]>300)&&bHK2off==0
                      )
                     ||temp[17]>0)
                    )
//                if ((tasmota_status[0]==0||temp[17]>0)&&temp[7]==0&&bHK2off==0)
                    // EVU Aus und Heizkreis Aus und WW Anforderung aus -> einschalten
                {
                    iLength  = iModbusTCP_Set(31,1,31); //HZK? register 31
                    iLength  = iModbusTCP_Get(31,1,31); //HZK?
//                    brequest = true;
                } // HK werden nur beim Abtauen abgeschaltet, wenn der pellets nicht läuft
                if (temp[1]==1&&
                    (
                     (tasmota_status[0]==1&&temp[17]==0&&temp[14]<300)
// wenn der Puffer > 30° läuft die FBH nach
                    ||
                     (bHK1off>0)
                    ||
                     ((now - wolf[wphl].t < 300)&&wolf[wphl].wert<0
//                      &&(now - wolf[wppw].t < 300)&&wolf[wppw].wert>0&&temp[17]==0
                      )
                    ||
                     (now - wolf[wpeevk].t < 300&&wolf[wpeevk].wert>0&&temp[17]==0)
                    ||
                     (now - wolf[wpbhg].t < 100&&wolf[wpbhg].wert==6&&temp[17]==0)

                    )
                    )
// EVU aus und Kessel aus ODER fbh Anforderung aus aber  Heizkreis aktiv -> HK ausschalten
                {
                    iLength  = iModbusTCP_Set(11,0,11); //FBH?
                    iLength  = iModbusTCP_Get(11,1,11); //FBH?
//                    brequest = true;
                }
                if (temp[7]==1&&
                    (
                     (tasmota_status[0]==1&&temp[17]==0&&temp[14]<300)
                    ||
                     (bHK2off>0)
                     ||
                      (
                       (now - wolf[wphl].t < 300)&&wolf[wphl].wert<0
//                       &&(now - wolf[wppw].t < 300)&&wolf[wppw].wert>0&&temp[17]==0
                       )
                     ||
                      (now - wolf[wpeevk].t < 300&&wolf[wpeevk].wert>0&&temp[17]==0)
                     ||
                      (now - wolf[wpbhg].t < 100&&wolf[wpbhg].wert==6&&temp[17]==0)
                     )
                    )
// wenn Puffer > 30° läuft die HKZ nach
// EVU aus und Kessel aus ODER WW Anforderung + Heizkreis aktiv -> HK ausschalten
                {
                    iLength  = iModbusTCP_Set(31,0,31); //HZK?
                    iLength  = iModbusTCP_Get(31,1,31); //HZK?
//                    brequest = true;

                }
            }
            {
                if (not brequest||t-t_OeK>30)
                {
                    brequest = false;
                    if (e3dc_config.debug)
                        printf("BGE");
                    iLength = iModbusTCP_Get(2,105,2); // Alle Register auf einmal abfragen
                    if (e3dc_config.debug)
                        printf("AGE");
                    myiLength = iLength;
                }
            }
        }
        else
            if (brequest)
            {
                if (e3dc_config.debug) printf("ÖKd%i",now-t_OeK);
                if (isocket > 0&&iLength < 0)
                    iLength = SocketRecvData(isocket,&receive[0],receive.size());
                if (e3dc_config.debug) printf("ÖKe%i",receive.size());
                if (iLength > 0)
                {
                    if (iLength > 100)
                        t_OeK = now;
                    int x2 = 9;
                    int x3 = 0;
                    x1 = receive[0]; // Startregister tan
                    iRegister = receive[0]; // Startregister tan
//                    x3 = x1;
                    for (x3=0;x3<oekofen.size()&&oekofen[x3] != x1;x3++);
                    
                    if (receive[7]==3)
                        while (x2 < iLength&&x3<oekofen.size())
                        {
//                            if (e3dc_config.debug) printf("ÖKe%i",x3);

                            if (oekofen[x3] == x1) // suchen der gewünschten register
                            {
                                temp[x3] = (receive[x2]*256+receive[x2+1]);
                                x3++;
                            }
                            WWTemp = float(receive[x2]*256+receive[x2+1])/10;
                            x1++;x2++;x2++;
                        }
                    else
                        WWTemp = float(receive[10]*256+receive[11])/10;
                    
                    //                SocketClose(isocket);
                    if (e3dc_config.debug) printf("ÖKf%i",x1);
                    SocketClose(isocket);
                    isocket = -1;
                    brequest = false;
                } else
//                    if (iLength <= 0)
                    {
                        SocketClose(isocket);
                        isocket = -1;
                        brequest = false;
                    }

            }}
    return iLength;
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x2250
movq (%rbx), %rsi
subq 0x352b0(%rip), %rsi     # 0x3ad58
leaq 0x2b08f(%rip), %rdi     # 0x30b3e
xorl %eax, %eax
callq 0x2040
movq (%rbx), %rax
movq 0x35298(%rip), %rdx     # 0x3ad58
movq %rax, %rcx
subq %rdx, %rcx
cmpq $0x29, %rcx
jl 0x5b07
testq %rdx, %rdx
setle %dl
cmpq $0x12d, %rcx            # imm = 0x12D
setl %cl
orb %dl, %cl
jne 0x5ae7
movb $0x64, 0x34353(%rip)    # 0x39e3a
movq %rax, 0x3526a(%rip)     # 0x3ad58
movl 0x35254(%rip), %edi     # 0x3ad48
testl %edi, %edi
jle 0x5b07
callq 0x20a6d
movl $0xffffffff, 0x35241(%rip) # imm = 0xFFFFFFFF
cmpb $0x1, 0x34317(%rip)     # 0x39e25
jne 0x5b2a
movq 0x8(%rsp), %rsi
subq 0x35234(%rip), %rsi     # 0x3ad50
leaq 0x2b021(%rip), %rdi     # 0x30b44
xorl %eax, %eax
callq 0x2040
cmpb $0x0, 0x3521b(%rip)     # 0x3ad4c
jne 0x5b49
movq 0x8(%rsp), %rax
subq 0x35211(%rip), %rax     # 0x3ad50
cmpq $0xb, %rax
jl 0x6396
cmpl $0x0, 0x351f8(%rip)     # 0x3ad48
jg 0x5bde
cmpb $0x1, 0x342c8(%rip)     # 0x39e25
jne 0x5b79
movq 0x8(%rsp), %rsi
subq 0x351ed(%rip), %rsi     # 0x3ad58
leaq 0x2afd9(%rip), %rdi     # 0x30b4b
xorl %eax, %eax
callq 0x2040
leaq 0x35100(%rip), %rdi     # 0x3ac80
leaq 0x33d99(%rip), %rsi     # 0x39920
xorl %eax, %eax
callq 0x2050
cmpb $0x1, 0x34290(%rip)     # 0x39e25
jne 0x5ba5
leaq 0x2af6d(%rip), %rdi     # 0x30b0b
xorl %eax, %eax
callq 0x2040
leaq 0x350d4(%rip), %rdi     # 0x3ac80
movl $0x1f6, %esi            # imm = 0x1F6
callq 0x20786
movl %eax, 0x3518c(%rip)     # 0x3ad48
cmpb $0x1, 0x34262(%rip)     # 0x39e25
jne 0x5bd3
leaq 0x2af43(%rip), %rdi     # 0x30b0f
xorl %eax, %eax
callq 0x2040
movq $0x0, 0x35042(%rip) # 0x3ac20
cmpb $0x1, 0x34240(%rip)     # 0x39e25
jne 0x5c01
movq 0x8(%rsp), %rsi
subq 0x35165(%rip), %rsi     # 0x3ad58
leaq 0x2af58(%rip), %rdi     # 0x30b52
xorl %eax, %eax
callq 0x2040
cmpl $0x0, 0x35140(%rip)     # 0x3ad48
jle 0x61dc
cmpb $0x0, 0x35137(%rip)     # 0x3ad4c
jne 0x61dc
movq 0x8(%rsp), %rsi
movq %rsi, %rax
subq 0x35126(%rip), %rax     # 0x3ad50
cmpq $0xb, %rax
jl 0x61dc
movq %rsi, 0x35115(%rip)     # 0x3ad50
cmpb $0x1, 0x341e3(%rip)     # 0x39e25
jne 0x5c59
subq 0x3510d(%rip), %rsi     # 0x3ad58
leaq 0x2af07(%rip), %rdi     # 0x30b59
xorl %eax, %eax
callq 0x2040
leaq 0x34fe0(%rip), %rdi     # 0x3ac40
movl $0xc, %esi
callq 0x152b0
cmpb $0x1, 0x341b4(%rip)     # 0x39e25
jne 0x5c81
leaq 0x2aee7(%rip), %rdi     # 0x30b61
xorl %eax, %eax
callq 0x2040
leaq 0x34fd0(%rip), %rdi     # 0x3ac58
movl $0x400, %esi            # imm = 0x400
callq 0x152b0
cmpb $0x1, 0x3418c(%rip)     # 0x39e25
jne 0x5ca9
leaq 0x2aebe(%rip), %rdi     # 0x30b60
xorl %eax, %eax
callq 0x2040
cmpw $0x0, 0x350c9(%rip)     # 0x3ad7a
jle 0x6158
cmpb $0x0, 0x3508e(%rip)     # 0x3ad4c
jne 0x6158
movq 0x8(%rsp), %rdx
movq %rdx, %rax
subq 0x35085(%rip), %rax     # 0x3ad58
cmpq $0x13, %rax
jg 0x6158
movq 0x33714(%rip), %rax     # 0x393f8
cmpq %rax, 0x33715(%rip)     # 0x39400
je 0x5efe
movslq 0x34ef0(%rip), %rcx     # 0x3abe8
imulq $0x70, %rcx, %rdi
leaq (%rax,%rdi), %rcx
movq %rdx, %rsi
subq (%rax,%rdi), %rsi
cmpq $0x12b, %rsi            # imm = 0x12B
jg 0x5d51
movss 0x68(%rcx), %xmm0
ucomiss 0x2a6d4(%rip), %xmm0    # 0x303f0
jbe 0x5d51
movslq 0x34eab(%rip), %rdi     # 0x3abd0
imulq $0x70, %rdi, %rdi
movq %rdx, %r8
subq (%rax,%rdi), %r8
cmpq $0x12b, %r8             # imm = 0x12B
jg 0x5d51
addq %rax, %rdi
movss 0x68(%rdi), %xmm1
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm1
jbe 0x5d51
movss %xmm0, 0x335b7(%rip)    # 0x39308
movq 0x33688(%rip), %rdi     # 0x393e0
cmpq %rdi, 0x33689(%rip)     # 0x393e8
je 0x5da1
movss 0x8(%rdi), %xmm0
movss 0x3359a(%rip), %xmm1    # 0x39308
addss %xmm0, %xmm1
mulss 0x2a67a(%rip), %xmm1    # 0x303f4
movss %xmm1, 0x33586(%rip)    # 0x39308
cmpq $0x12c, %rsi            # imm = 0x12C
jg 0x5d99
movss 0x2a65d(%rip), %xmm1    # 0x303f0
ucomiss 0x68(%rcx), %xmm1
jbe 0x5da1
movss %xmm0, 0x33567(%rip)    # 0x39308
movslq 0x34e2c(%rip), %r8      # 0x3abd4
imulq $0x70, %r8, %r8
movq %rdx, %r9
subq (%rax,%r8), %r9
cmpq $0x12b, %r9             # imm = 0x12B
jg 0x5dcd
addq %rax, %r8
movss 0x68(%r8), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
ja 0x5df9
movslq 0x34e18(%rip), %r8      # 0x3abec
imulq $0x70, %r8, %r8
movq %rdx, %r9
subq (%rax,%r8), %r9
cmpq $0x12b, %r9             # imm = 0x12B
jg 0x5e52
addq %rax, %r8
movss 0x68(%r8), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x5e52
movslq 0x34dd0(%rip), %r8      # 0x3abd0
imulq $0x70, %r8, %r8
subq (%rax,%r8), %rdx
cmpq $0x12b, %rdx            # imm = 0x12B
jg 0x5e52
cmpq $0x12b, %rsi            # imm = 0x12B
jg 0x5e52
addq %r8, %rax
movss 0x68(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x5e52
movss 0x68(%rcx), %xmm0
ucomiss 0x2a5bd(%rip), %xmm0    # 0x303f0
jbe 0x5e52
addss 0x8(%rdi), %xmm0
mulss 0x2a5b2(%rip), %xmm0    # 0x303f4
addss 0x2a5a2(%rip), %xmm0    # 0x303ec
movss %xmm0, 0x334b6(%rip)    # 0x39308
movss 0x334ae(%rip), %xmm0    # 0x39308
ucomiss 0x2a597(%rip), %xmm0    # 0x303f8
jbe 0x5efe
movss 0x340a9(%rip), %xmm1    # 0x39f18
ucomiss %xmm0, %xmm1
jbe 0x5eac
cmpw $0x0, 0x34f06(%rip)     # 0x3ad82
jne 0x5eac
movl $0x65, %edi
movl $0x1, %esi
callq 0x5743
movq %rax, 0x34d8c(%rip)     # 0x3ac20
movl $0x65, %edi
xorl %esi, %esi
movl $0x65, %edx
callq 0x591c
movq %rax, 0x34d74(%rip)     # 0x3ac20
movss 0x33454(%rip), %xmm0    # 0x39308
movss 0x3405c(%rip), %xmm1    # 0x39f18
addss 0x2a538(%rip), %xmm1    # 0x303fc
ucomiss %xmm1, %xmm0
jbe 0x5efe
cmpw $0x1, 0x34eb1(%rip)     # 0x3ad82
jne 0x5efe
movl $0x65, %edi
xorl %esi, %esi
callq 0x5743
movq %rax, 0x34d3a(%rip)     # 0x3ac20
movl $0x65, %edi
xorl %esi, %esi
movl $0x65, %edx
callq 0x591c
movq %rax, 0x34d22(%rip)     # 0x3ac20
cmpw $0x0, 0x34e5c(%rip)     # 0x3ad62
je 0x63a2
cmpw $0x0, 0x34e5a(%rip)     # 0x3ad6e
je 0x6438
cmpw $0x1, 0x34e40(%rip)     # 0x3ad62
jne 0x6039
cmpl $0x1, 0x333e1(%rip)     # 0x39310
sete %cl
movzwl 0x34e49(%rip), %eax     # 0x3ad82
testw %ax, %ax
sete %dl
andb %cl, %dl
movswl 0x34e34(%rip), %ecx     # 0x3ad7c
cmpl $0x12c, %ecx            # imm = 0x12C
setl %cl
testb %cl, %dl
jne 0x600b
testb $0x1, 0x34e28(%rip)     # 0x3ad88
jne 0x600b
movq 0x8(%rsp), %rdx
movslq 0x34c5e(%rip), %rsi     # 0x3abd0
movq 0x3347f(%rip), %rcx     # 0x393f8
imulq $0x70, %rsi, %rsi
movq %rdx, %rdi
subq (%rcx,%rsi), %rdi
cmpq $0x12b, %rdi            # imm = 0x12B
jg 0x5f99
addq %rcx, %rsi
xorps %xmm0, %xmm0
ucomiss 0x68(%rsi), %xmm0
ja 0x600b
movslq 0x34c54(%rip), %rsi     # 0x3abf4
imulq $0x70, %rsi, %rsi
movq %rdx, %rdi
subq (%rcx,%rsi), %rdi
cmpq $0x12b, %rdi            # imm = 0x12B
jg 0x5fd2
addq %rcx, %rsi
testw %ax, %ax
sete %dil
movss 0x68(%rsi), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
seta %sil
testb %dil, %sil
jne 0x600b
movslq 0x34c1f(%rip), %rsi     # 0x3abf8
imulq $0x70, %rsi, %rsi
subq (%rcx,%rsi), %rdx
cmpq $0x63, %rdx
jg 0x6039
addq %rsi, %rcx
testw %ax, %ax
sete %al
movss 0x68(%rcx), %xmm0
ucomiss 0x2a404(%rip), %xmm0    # 0x30400
setnp %cl
sete %dl
andb %cl, %dl
andb %al, %dl
cmpb $0x1, %dl
jne 0x6039
movl $0xb, %edi
xorl %esi, %esi
callq 0x5743
movq %rax, 0x34c02(%rip)     # 0x3ac20
movl $0xb, %edi
movl $0x1, %esi
movl $0xb, %edx
callq 0x591c
movq %rax, 0x34be7(%rip)     # 0x3ac20
cmpw $0x1, 0x34d2d(%rip)     # 0x3ad6e
jne 0x6158
cmpl $0x1, 0x332c2(%rip)     # 0x39310
sete %cl
movzwl 0x34d2a(%rip), %eax     # 0x3ad82
testw %ax, %ax
sete %dl
andb %cl, %dl
movswl 0x34d15(%rip), %ecx     # 0x3ad7c
cmpl $0x12c, %ecx            # imm = 0x12C
setl %cl
testb %cl, %dl
jne 0x612a
testb $0x1, 0x34d0d(%rip)     # 0x3ad8c
jne 0x612a
movq 0x8(%rsp), %rdx
movslq 0x34b3f(%rip), %rsi     # 0x3abd0
movq 0x33360(%rip), %rcx     # 0x393f8
imulq $0x70, %rsi, %rsi
movq %rdx, %rdi
subq (%rcx,%rsi), %rdi
cmpq $0x12b, %rdi            # imm = 0x12B
jg 0x60b8
addq %rcx, %rsi
xorps %xmm0, %xmm0
ucomiss 0x68(%rsi), %xmm0
ja 0x612a
movslq 0x34b35(%rip), %rsi     # 0x3abf4
imulq $0x70, %rsi, %rsi
movq %rdx, %rdi
subq (%rcx,%rsi), %rdi
cmpq $0x12b, %rdi            # imm = 0x12B
jg 0x60f1
addq %rcx, %rsi
testw %ax, %ax
sete %dil
movss 0x68(%rsi), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
seta %sil
testb %dil, %sil
jne 0x612a
movslq 0x34b00(%rip), %rsi     # 0x3abf8
imulq $0x70, %rsi, %rsi
subq (%rcx,%rsi), %rdx
cmpq $0x63, %rdx
jg 0x6158
addq %rsi, %rcx
testw %ax, %ax
sete %al
movss 0x68(%rcx), %xmm0
ucomiss 0x2a2e5(%rip), %xmm0    # 0x30400
setnp %cl
sete %dl
andb %cl, %dl
andb %al, %dl
cmpb $0x1, %dl
jne 0x6158
movl $0x1f, %edi
xorl %esi, %esi
callq 0x5743
movq %rax, 0x34ae3(%rip)     # 0x3ac20
movl $0x1f, %edi
movl $0x1, %esi
movl $0x1f, %edx
callq 0x591c
movq %rax, 0x34ac8(%rip)     # 0x3ac20
cmpb $0x1, 0x34bed(%rip)     # 0x3ad4c
jne 0x6179
movq 0x34a50(%rip), %rax     # 0x3abb8
subq 0x34be9(%rip), %rax     # 0x3ad58
cmpq $0x1f, %rax
jl 0x6396
movb $0x0, 0x34bcc(%rip)     # 0x3ad4c
cmpb $0x1, 0x33c9e(%rip)     # 0x39e25
jne 0x6197
leaq 0x2a9d4(%rip), %rdi     # 0x30b64
xorl %eax, %eax
callq 0x2040
movl $0x2, %edi
movl $0x69, %esi
movl $0x2, %edx
callq 0x591c
movq %rax, 0x34a6e(%rip)     # 0x3ac20
cmpb $0x1, 0x33c6c(%rip)     # 0x39e25
jne 0x61c9
leaq 0x2a9a6(%rip), %rdi     # 0x30b68
xorl %eax, %eax
callq 0x2040
movq 0x34a50(%rip), %rax     # 0x3ac20
movq %rax, 0x34a51(%rip)     # 0x3ac28
jmp 0x6396
cmpb $0x1, 0x34b69(%rip)     # 0x3ad4c
jne 0x6396
cmpb $0x1, 0x33c35(%rip)     # 0x39e25
jne 0x620c
movq 0x8(%rsp), %rsi
subq 0x34b5a(%rip), %rsi     # 0x3ad58
leaq 0x2a954(%rip), %rdi     # 0x30b59
xorl %eax, %eax
callq 0x2040
movl 0x34b36(%rip), %edi     # 0x3ad48
testl %edi, %edi
jle 0x623d
cmpq $0x0, 0x34a02(%rip)     # 0x3ac20
jns 0x623d
movq 0x34a31(%rip), %rsi     # 0x3ac58
movl 0x34a33(%rip), %edx     # 0x3ac60
subl %esi, %edx
callq 0x20adc
cltq
movq %rax, 0x349e3(%rip)     # 0x3ac20
cmpb $0x1, 0x33be1(%rip)     # 0x39e25
jne 0x6262
movq 0x34a13(%rip), %rsi     # 0x3ac60
subq 0x34a04(%rip), %rsi     # 0x3ac58
leaq 0x2a911(%rip), %rdi     # 0x30b6c
xorl %eax, %eax
callq 0x2040
movq 0x349b7(%rip), %rax     # 0x3ac20
testq %rax, %rax
jle 0x637a
cmpq $0x65, %rax
jl 0x6284
movq 0x8(%rsp), %rcx
movq %rcx, 0x34ad4(%rip)     # 0x3ad58
movq 0x349cd(%rip), %rcx     # 0x3ac58
movzbl (%rcx), %esi
movl %esi, 0x34afc(%rip)     # 0x3ad90
movl %esi, 0x34996(%rip)     # 0x3ac30
leaq 0x33013(%rip), %rdi     # 0x392b4
xorl %edx, %edx
cmpl %esi, (%rdi)
je 0x62b9
incq %rdx
addq $0x4, %rdi
cmpq $0x14, %rdx
jne 0x62a3
movl $0x14, %edx
cmpb $0x3, 0x7(%rcx)
jne 0x633e
cmpq $0xa, %rax
jl 0x635d
movl $0x9, %esi
movl 0x34abc(%rip), %edi     # 0x3ad90
leaq 0x32fd9(%rip), %r8      # 0x392b4
leaq 0x34a7e(%rip), %r9      # 0x3ad60
movss 0x2a11a(%rip), %xmm0    # 0x30404
cmpl $0x13, %edx
ja 0x635d
movslq %edx, %r10
cmpl (%r8,%r10,4), %edi
jne 0x6309
movzwl (%rcx,%rsi), %r11d
rolw $0x8, %r11w
movw %r11w, (%r9,%r10,2)
incl %edx
movzwl (%rcx,%rsi), %r10d
rolw $0x8, %r10w
movzwl %r10w, %r10d
xorps %xmm1, %xmm1
cvtsi2ss %r10d, %xmm1
divss %xmm0, %xmm1
movss %xmm1, 0x33519(%rip)    # 0x39844
incl %edi
movl %edi, 0x34a5d(%rip)     # 0x3ad90
addq $0x2, %rsi
cmpq %rsi, %rax
jg 0x62ea
jmp 0x635d
movzwl 0xa(%rcx), %eax
rolw $0x8, %ax
movzwl %ax, %eax
cvtsi2ss %eax, %xmm0
divss 0x2a0af(%rip), %xmm0    # 0x30404
movss %xmm0, 0x334e7(%rip)    # 0x39844
cmpb $0x1, 0x33ac1(%rip)     # 0x39e25
jne 0x637a
movl 0x34a24(%rip), %esi     # 0x3ad90
leaq 0x2a800(%rip), %rdi     # 0x30b73
xorl %eax, %eax
callq 0x2040
movl 0x349c8(%rip), %edi     # 0x3ad48
callq 0x20a6d
movl $0xffffffff, 0x349b9(%rip) # imm = 0xFFFFFFFF
movb $0x0, 0x349b6(%rip)     # 0x3ad4c
movl 0x34884(%rip), %eax     # 0x3ac20
addq $0x10, %rsp
popq %rbx
retq
movslq 0x3484b(%rip), %rcx     # 0x3abf4
movq 0x33048(%rip), %rax     # 0x393f8
imulq $0x70, %rcx, %rcx
movss 0x68(%rax,%rcx), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x64ce
jp 0x64ce
cmpl $0x0, 0x32f3d(%rip)     # 0x39310
sete %al
movswl 0x3499f(%rip), %ecx     # 0x3ad7c
cmpl $0x12d, %ecx            # imm = 0x12D
setge %cl
orb %al, %cl
movb 0x3499a(%rip), %al      # 0x3ad88
xorb $0x1, %al
testb %al, %cl
jne 0x6402
cmpw $0x0, 0x34986(%rip)     # 0x3ad82
jle 0x5f0c
movl $0xb, %edi
movl $0x1, %esi
callq 0x5743
movq %rax, 0x34808(%rip)     # 0x3ac20
movl $0xb, %edi
movl $0x1, %esi
movl $0xb, %edx
callq 0x591c
movq %rax, 0x347ed(%rip)     # 0x3ac20
jmp 0x5f0c
movslq 0x347b5(%rip), %rcx     # 0x3abf4
movq 0x32fb2(%rip), %rax     # 0x393f8
imulq $0x70, %rcx, %rcx
movss 0x68(%rax,%rcx), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x6516
jp 0x6516
cmpl $0x0, 0x32ea7(%rip)     # 0x39310
sete %al
movswl 0x34909(%rip), %ecx     # 0x3ad7c
cmpl $0x12d, %ecx            # imm = 0x12D
setge %cl
orb %al, %cl
movb 0x34908(%rip), %al      # 0x3ad8c
xorb $0x1, %al
testb %al, %cl
jne 0x6498
cmpw $0x0, 0x348f0(%rip)     # 0x3ad82
jle 0x5f1a
movl $0x1f, %edi
movl $0x1, %esi
callq 0x5743
movq %rax, 0x34772(%rip)     # 0x3ac20
movl $0x1f, %edi
movl $0x1, %esi
movl $0x1f, %edx
callq 0x591c
movq %rax, 0x34757(%rip)     # 0x3ac20
jmp 0x5f1a
movq 0x8(%rsp), %rdx
movslq 0x3471e(%rip), %rcx     # 0x3abf8
imulq $0x70, %rcx, %rcx
subq (%rax,%rcx), %rdx
cmpq $0x63, %rdx
jg 0x5f0c
addq %rcx, %rax
movss 0x68(%rax), %xmm0
ucomiss 0x29f05(%rip), %xmm0    # 0x30400
jne 0x6503
jnp 0x5f0c
cmpw $0x0, 0x34877(%rip)     # 0x3ad82
je 0x63cc
jmp 0x5f0c
movq 0x8(%rsp), %rdx
movslq 0x346d6(%rip), %rcx     # 0x3abf8
imulq $0x70, %rcx, %rcx
subq (%rax,%rcx), %rdx
cmpq $0x63, %rdx
jg 0x5f1a
addq %rcx, %rax
movss 0x68(%rax), %xmm0
ucomiss 0x29ebd(%rip), %xmm0    # 0x30400
jne 0x654b
jnp 0x5f1a
cmpw $0x0, 0x3482f(%rip)     # 0x3ad82
je 0x6462
jmp 0x5f1a