
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

void roundFunc(sqlite3_context *context,int argc,sqlite3_value **argv)

{
  double dVar1;
  Mem *pMVar2;
  char *__s;
  size_t sVar3;
  char cVar4;
  int iVar5;
  int in_GS_OFFSET;
  i64 iVar6;
  double r;
  int local_20;
  undefined4 uStack_14;
  
  uStack_14 = 0xa55d9;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (argc == 2) {
    if (aType_23891[argv[1]->flags & 0x1f] == '\x05') goto LAB_000a5628;
    iVar6 = sqlite3VdbeIntValue(argv[1]);
    iVar5 = (int)iVar6;
    pMVar2 = *argv;
    if (iVar5 < 0x1f) {
      cVar4 = aType_23891[pMVar2->flags & 0x1f];
      if (iVar5 < 0) goto LAB_000a5612;
      if (cVar4 == '\x05') goto LAB_000a5628;
      r = sqlite3VdbeRealValue(pMVar2);
      if (iVar5 != 0) goto LAB_000a569c;
      goto LAB_000a5651;
    }
    if (aType_23891[pMVar2->flags & 0x1f] == '\x05') goto LAB_000a5628;
    r = sqlite3VdbeRealValue(pMVar2);
    iVar5 = 0x1e;
LAB_000a569c:
    __s = sqlite3_mprintf("%.*f",iVar5,r);
    if (__s == (char *)0x0) {
      sqlite3_result_error_nomem(context);
      goto LAB_000a5628;
    }
    sVar3 = strlen(__s);
    sqlite3AtoF(__s,&r,sVar3 & 0x3fffffff,'\x01');
    sqlite3_free(__s);
  }
  else {
    pMVar2 = *argv;
    cVar4 = aType_23891[pMVar2->flags & 0x1f];
LAB_000a5612:
    if (cVar4 == '\x05') goto LAB_000a5628;
    r = sqlite3VdbeRealValue(pMVar2);
LAB_000a5651:
    if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {
      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {
        iVar5 = 0;
        goto LAB_000a569c;
      }
      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);
    }
    else {
      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);
    }
  }
  dVar1 = r;
  pMVar2 = context->pOut;
  if ((pMVar2->flags & 0x2400) == 0) {
    pMVar2->flags = 1;
  }
  else {
    vdbeMemClearExternAndSetNull(pMVar2);
  }
  if (!NAN(dVar1)) {
    (pMVar2->u).r = dVar1;
    pMVar2->flags = 8;
  }
LAB_000a5628:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail_local();
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void FUN_000a55d0(int *param_1,int param_2,int *param_3)

{
  int iVar1;
  double *pdVar2;
  char *__s;
  char cVar3;
  int iVar4;
  int in_GS_OFFSET;
  longdouble lVar5;
  double local_2c;
  
  iVar1 = *(int *)(in_GS_OFFSET + 0x14);
  if (param_2 == 2) {
    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;
    iVar4 = FUN_00045540();
    if (iVar4 < 0x1f) {
      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];
      if (iVar4 < 0) goto LAB_000a5612;
      if (cVar3 == '\x05') goto LAB_000a5628;
      lVar5 = (longdouble)FUN_000455a0();
      local_2c = (double)lVar5;
      if (iVar4 != 0) goto LAB_000a569c;
      goto LAB_000a5651;
    }
    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;
    lVar5 = (longdouble)FUN_000455a0();
    iVar4 = 0x1e;
    local_2c = (double)lVar5;
LAB_000a569c:
    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);
    if (__s == (char *)0x0) {
      FUN_0004e320(param_1);
      goto LAB_000a5628;
    }
    strlen(__s);
    FUN_0003a6f0(1);
    FUN_00044000(__s);
  }
  else {
    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];
LAB_000a5612:
    if (cVar3 == '\x05') goto LAB_000a5628;
    lVar5 = (longdouble)FUN_000455a0();
    local_2c = (double)lVar5;
LAB_000a5651:
    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {
      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {
        iVar4 = 0;
        goto LAB_000a569c;
      }
      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);
    }
    else {
      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);
    }
  }
  pdVar2 = (double *)*param_1;
  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {
    *(undefined2 *)(pdVar2 + 1) = 1;
  }
  else {
    FUN_0004c150();
  }
  if (!NAN(local_2c)) {
    *pdVar2 = local_2c;
    *(undefined2 *)(pdVar2 + 1) = 8;
  }
LAB_000a5628:
  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_00153870();
  }
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000172e0
ADD EBX,0x11584f
SUB ESP,0x3c
MOV EAX,GS:[0x14]
MOV dword ptr [ESP + 0x2c],EAX
XOR EAX,EAX
CMP dword ptr [ESP + 0x54],0x2
MOV ESI,dword ptr [ESP + 0x50]
MOV EDI,dword ptr [ESP + 0x58]
JZ 0x000a5720
MOV EAX,dword ptr [EDI]
MOVZX EDX,word ptr [EAX + 0x8]
AND EDX,0x1f
MOVZX ECX,byte ptr [EBX + EDX*0x1 + 0xfffa8eb8]
CMP CL,0x5
JNZ 0x000a5648
JMP 0x000a5628
FSTP ST0
LEA ESI,[ESI]
MOV EAX,dword ptr [ESP + 0x2c]
XOR EAX,dword ptr GS:[0x14]
JNZ 0x000a5829
ADD ESP,0x3c
POP EBX
POP ESI
POP EDI
POP EBP
RET
CALL 0x000455a0
FST qword ptr [ESP + 0x20]
FLDZ
FXCH
FCOMI ST0,ST1
FSTP ST1
JC 0x000a5690
FLD dword ptr [EBX + 0xfffb3d5c]
FCOMIP ST0,ST1
JBE 0x000a5690
FNSTCW word ptr [ESP + 0x16]
FADD dword ptr [EBX + 0xfffb3d70]
MOVZX EAX,word ptr [ESP + 0x16]
OR AH,0xc
MOV word ptr [ESP + 0x14],AX
FLDCW word ptr [ESP + 0x14]
FISTP qword ptr [ESP]
FLDCW word ptr [ESP + 0x16]
FILD qword ptr [ESP]
FST qword ptr [ESP + 0x20]
JMP 0x000a56ee
FLDZ
FCOMIP ST0,ST1
JA 0x000a5790
XOR EDX,EDX
SUB ESP,0x8
LEA EAX,[EBX + 0xfffa23cd]
FSTP qword ptr [ESP]
PUSH EDX
PUSH EAX
CALL 0x000a3060
ADD ESP,0x10
MOV EDI,EAX
TEST EAX,EAX
JZ 0x000a5818
SUB ESP,0xc
PUSH EAX
CALL 0x000153b0
ADD ESP,0x10
LEA EDX,[ESP + 0x20]
SUB ESP,0xc
AND EAX,0x3fffffff
PUSH 0x1
MOV ECX,EAX
MOV EAX,EDI
CALL 0x0003a6f0
MOV dword ptr [ESP],EDI
CALL 0x00044000
FLD qword ptr [ESP + 0x30]
ADD ESP,0x10
MOV EBX,dword ptr [ESI]
TEST word ptr [EBX + 0x8],0x2400
JNZ 0x000a5800
MOV EDX,0x1
MOV word ptr [EBX + 0x8],DX
FUCOMI ST0,ST0
JP 0x000a5620
MOV EAX,0x8
FSTP qword ptr [EBX]
MOV word ptr [EBX + 0x8],AX
JMP 0x000a5628
MOV EAX,dword ptr [EDI + 0x4]
LEA EBP,[EBX + 0xfffa8eb8]
MOVZX EDX,word ptr [EAX + 0x8]
AND EDX,0x1f
CMP byte ptr [EBX + EDX*0x1 + 0xfffa8eb8],0x5
JZ 0x000a5628
CALL 0x00045540
MOV EDX,EAX
MOV EAX,dword ptr [EDI]
CMP EDX,0x1e
JG 0x000a57d8
MOVZX ECX,word ptr [EAX + 0x8]
MOV dword ptr [ESP],EDX
AND ECX,0x1f
TEST EDX,EDX
MOVZX ECX,byte ptr [EBP + ECX*0x1]
JS 0x000a5612
CMP CL,0x5
JZ 0x000a5628
CALL 0x000455a0
MOV EDX,dword ptr [ESP]
FST qword ptr [ESP + 0x20]
TEST EDX,EDX
JNZ 0x000a569c
JMP 0x000a5651
FLD dword ptr [EBX + 0xfffb3d58]
FXCH
FCOMI ST0,ST1
FSTP ST1
JBE 0x000a569a
FNSTCW word ptr [ESP + 0x16]
FSUBR dword ptr [EBX + 0xfffb3d70]
MOVZX EAX,word ptr [ESP + 0x16]
OR AH,0xc
MOV word ptr [ESP + 0x14],AX
FLDCW word ptr [ESP + 0x14]
FISTP qword ptr [ESP]
FLDCW word ptr [ESP + 0x16]
FILD qword ptr [ESP]
FCHS
FST qword ptr [ESP + 0x20]
JMP 0x000a56ee
MOVZX EDX,word ptr [EAX + 0x8]
AND EDX,0x1f
CMP byte ptr [EBP + EDX*0x1],0x5
JZ 0x000a5628
CALL 0x000455a0
MOV EDX,0x1e
FST qword ptr [ESP + 0x20]
JMP 0x000a569c
MOV EAX,EBX
FSTP qword ptr [ESP]
CALL 0x0004c150
FLD qword ptr [ESP]
JMP 0x000a5705
SUB ESP,0xc
PUSH ESI
CALL 0x0004e320
ADD ESP,0x10
JMP 0x000a5628
CALL 0x00153870
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_000a55d0(int *param_1,int param_2,int *param_3)\n\n{\n  int iVar1;\n  double *pdVar2;\n  char *__s;\n  char cVar3;\n  int iVar4;\n  int in_GS_OFFSET;\n  longdouble lVar5;\n  double local_2c;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }\n  pdVar2 = (double *)*param_1;\n  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }\n  if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }\nLAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00153870();\n  }\n  return;\n}\n\n" comment (function_definition "void FUN_000a55d0(int *param_1,int param_2,int *param_3)\n\n{\n  int iVar1;\n  double *pdVar2;\n  char *__s;\n  char cVar3;\n  int iVar4;\n  int in_GS_OFFSET;\n  longdouble lVar5;\n  double local_2c;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }\n  pdVar2 = (double *)*param_1;\n  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }\n  if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }\nLAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00153870();\n  }\n  return;\n}" primitive_type (function_declarator "FUN_000a55d0(int *param_1,int param_2,int *param_3)" identifier (parameter_list "(int *param_1,int param_2,int *param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  double *pdVar2;\n  char *__s;\n  char cVar3;\n  int iVar4;\n  int in_GS_OFFSET;\n  longdouble lVar5;\n  double local_2c;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }\n  pdVar2 = (double *)*param_1;\n  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }\n  if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }\nLAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00153870();\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "double *pdVar2;" primitive_type (pointer_declarator "*pdVar2" * identifier) ;) (declaration "char *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "longdouble lVar5;" type_identifier identifier ;) (declaration "double local_2c;" primitive_type identifier ;) (expression_statement "iVar1 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar1 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (if_statement "if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }" { (if_statement "if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;" if (parenthesized_expression "((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05')" ( (binary_expression "(&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05'" (subscript_expression "(&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" ( (pointer_expression "&DAT_00163ce0" & identifier) )) [ (binary_expression "*(ushort *)(param_3[1] + 8) & 0x1f" (pointer_expression "*(ushort *)(param_3[1] + 8)" * (cast_expression "(ushort *)(param_3[1] + 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3[1] + 8)" ( (binary_expression "param_3[1] + 8" (subscript_expression "param_3[1]" identifier [ number_literal ]) + number_literal) )))) & number_literal) ]) == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "iVar4 = FUN_00045540();" (assignment_expression "iVar4 = FUN_00045540()" identifier = (call_expression "FUN_00045540()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }" if (parenthesized_expression "(iVar4 < 0x1f)" ( (binary_expression "iVar4 < 0x1f" identifier < number_literal) )) (compound_statement "{\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }" { (expression_statement "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];" (assignment_expression "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" identifier = (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" ( (pointer_expression "&DAT_00163ce0" & identifier) )) [ (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" * (cast_expression "(ushort *)(*param_3 + 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) )))) & number_literal) ])) ;) (if_statement "if (iVar4 < 0) goto LAB_000a5612;" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (goto_statement "goto LAB_000a5612;" goto statement_identifier ;)) (if_statement "if (cVar3 == '\x05') goto LAB_000a5628;" if (parenthesized_expression "(cVar3 == '\x05')" ( (binary_expression "cVar3 == '\x05'" identifier == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" identifier = (cast_expression "(longdouble)FUN_000455a0()" ( (type_descriptor "longdouble" type_identifier) ) (call_expression "FUN_000455a0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" identifier = (cast_expression "(double)lVar5" ( (type_descriptor "double" primitive_type) ) identifier)) ;) (if_statement "if (iVar4 != 0) goto LAB_000a569c;" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000a569c;" goto statement_identifier ;)) (goto_statement "goto LAB_000a5651;" goto statement_identifier ;) })) (if_statement "if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;" if (parenthesized_expression "((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05')" ( (binary_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05'" (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" ( (pointer_expression "&DAT_00163ce0" & identifier) )) [ (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" * (cast_expression "(ushort *)(*param_3 + 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) )))) & number_literal) ]) == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" identifier = (cast_expression "(longdouble)FUN_000455a0()" ( (type_descriptor "longdouble" type_identifier) ) (call_expression "FUN_000455a0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "iVar4 = 0x1e;" (assignment_expression "iVar4 = 0x1e" identifier = number_literal) ;) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" identifier = (cast_expression "(double)lVar5" ( (type_descriptor "double" primitive_type) ) identifier)) ;) (labeled_statement "LAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);" statement_identifier : (expression_statement "__s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);" (assignment_expression "__s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" identifier = (cast_expression "(char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" identifier (argument_list "(&DAT_0015d1f5,iVar4,(double)lVar5)" ( (pointer_expression "&DAT_0015d1f5" & identifier) , identifier , (cast_expression "(double)lVar5" ( (type_descriptor "double" primitive_type) ) identifier) ))))) ;)) (if_statement "if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }" if (parenthesized_expression "(__s == (char *)0x0)" ( (binary_expression "__s == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }" { (expression_statement "FUN_0004e320(param_1);" (call_expression "FUN_0004e320(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;) })) (expression_statement "strlen(__s);" (call_expression "strlen(__s)" identifier (argument_list "(__s)" ( identifier ))) ;) (expression_statement "FUN_0003a6f0(1);" (call_expression "FUN_0003a6f0(1)" identifier (argument_list "(1)" ( number_literal ))) ;) (expression_statement "FUN_00044000(__s);" (call_expression "FUN_00044000(__s)" identifier (argument_list "(__s)" ( identifier ))) ;) }) (else_clause "else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" else (compound_statement "{\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" { (expression_statement "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];" (assignment_expression "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" identifier = (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" ( (pointer_expression "&DAT_00163ce0" & identifier) )) [ (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" * (cast_expression "(ushort *)(*param_3 + 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) )))) & number_literal) ])) ;) (labeled_statement "LAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;" statement_identifier : (if_statement "if (cVar3 == '\x05') goto LAB_000a5628;" if (parenthesized_expression "(cVar3 == '\x05')" ( (binary_expression "cVar3 == '\x05'" identifier == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;))) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" identifier = (cast_expression "(longdouble)FUN_000455a0()" ( (type_descriptor "longdouble" type_identifier) ) (call_expression "FUN_000455a0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" identifier = (cast_expression "(double)lVar5" ( (type_descriptor "double" primitive_type) ) identifier)) ;) (labeled_statement "LAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" statement_identifier : (if_statement "if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" if (parenthesized_expression "((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5))" ( (binary_expression "(lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)" (parenthesized_expression "(lVar5 < (longdouble)0)" ( (binary_expression "lVar5 < (longdouble)0" identifier < (cast_expression "(longdouble)0" ( (type_descriptor "longdouble" type_identifier) ) number_literal)) )) || (parenthesized_expression "((longdouble)DAT_0016eb84 <= lVar5)" ( (binary_expression "(longdouble)DAT_0016eb84 <= lVar5" (cast_expression "(longdouble)DAT_0016eb84" ( (type_descriptor "longdouble" type_identifier) ) identifier) <= identifier) ))) )) (compound_statement "{\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }" { (if_statement "if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }" if (parenthesized_expression "(((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80))" ( (binary_expression "((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)" (parenthesized_expression "((longdouble)0 <= lVar5)" ( (binary_expression "(longdouble)0 <= lVar5" (cast_expression "(longdouble)0" ( (type_descriptor "longdouble" type_identifier) ) number_literal) <= identifier) )) || (parenthesized_expression "(lVar5 <= (longdouble)DAT_0016eb80)" ( (binary_expression "lVar5 <= (longdouble)DAT_0016eb80" identifier <= (cast_expression "(longdouble)DAT_0016eb80" ( (type_descriptor "longdouble" type_identifier) ) identifier)) ))) )) (compound_statement "{\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_000a569c;" goto statement_identifier ;) })) (expression_statement "local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);" (assignment_expression "local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" identifier = (unary_expression "-(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" - (cast_expression "(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" ( (type_descriptor "double" primitive_type) ) (cast_expression "(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND((longdouble)DAT_0016eb98 - lVar5)" identifier (argument_list "((longdouble)DAT_0016eb98 - lVar5)" ( (binary_expression "(longdouble)DAT_0016eb98 - lVar5" (cast_expression "(longdouble)DAT_0016eb98" ( (type_descriptor "longdouble" type_identifier) ) identifier) - identifier) ))))))) ;) }) (else_clause "else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" else (compound_statement "{\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" { (expression_statement "local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);" (assignment_expression "local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" identifier = (cast_expression "(double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" ( (type_descriptor "double" primitive_type) ) (cast_expression "(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND(lVar5 + (longdouble)DAT_0016eb98)" identifier (argument_list "(lVar5 + (longdouble)DAT_0016eb98)" ( (binary_expression "lVar5 + (longdouble)DAT_0016eb98" identifier + (cast_expression "(longdouble)DAT_0016eb98" ( (type_descriptor "longdouble" type_identifier) ) identifier)) )))))) ;) })))) }))) (expression_statement "pdVar2 = (double *)*param_1;" (assignment_expression "pdVar2 = (double *)*param_1" identifier = (cast_expression "(double *)*param_1" ( (type_descriptor "double *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }" if (parenthesized_expression "(((ulonglong)pdVar2[1] & 0x2400) == 0)" ( (binary_expression "((ulonglong)pdVar2[1] & 0x2400) == 0" (parenthesized_expression "((ulonglong)pdVar2[1] & 0x2400)" ( (binary_expression "(ulonglong)pdVar2[1] & 0x2400" (cast_expression "(ulonglong)pdVar2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "pdVar2[1]" identifier [ number_literal ])) & number_literal) )) == number_literal) )) (compound_statement "{\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }" { (expression_statement "*(undefined2 *)(pdVar2 + 1) = 1;" (assignment_expression "*(undefined2 *)(pdVar2 + 1) = 1" (pointer_expression "*(undefined2 *)(pdVar2 + 1)" * (cast_expression "(undefined2 *)(pdVar2 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pdVar2 + 1)" ( (binary_expression "pdVar2 + 1" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n    FUN_0004c150();\n  }" else (compound_statement "{\n    FUN_0004c150();\n  }" { (expression_statement "FUN_0004c150();" (call_expression "FUN_0004c150()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }" if (parenthesized_expression "(!NAN(local_2c))" ( (unary_expression "!NAN(local_2c)" ! (call_expression "NAN(local_2c)" identifier (argument_list "(local_2c)" ( identifier )))) )) (compound_statement "{\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }" { (expression_statement "*pdVar2 = local_2c;" (assignment_expression "*pdVar2 = local_2c" (pointer_expression "*pdVar2" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(pdVar2 + 1) = 8;" (assignment_expression "*(undefined2 *)(pdVar2 + 1) = 8" (pointer_expression "*(undefined2 *)(pdVar2 + 1)" * (cast_expression "(undefined2 *)(pdVar2 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pdVar2 + 1)" ( (binary_expression "pdVar2 + 1" identifier + number_literal) )))) = number_literal) ;) })) (labeled_statement "LAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00153870();\n  }" statement_identifier : (if_statement "if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00153870();\n  }" if (parenthesized_expression "(iVar1 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "iVar1 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00153870();\n  }" { comment (expression_statement "FUN_00153870();" (call_expression "FUN_00153870()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nvoid roundFunc(sqlite3_context *context,int argc,sqlite3_value **argv)\n\n{\n  double dVar1;\n  Mem *pMVar2;\n  char *__s;\n  size_t sVar3;\n  char cVar4;\n  int iVar5;\n  int in_GS_OFFSET;\n  i64 iVar6;\n  double r;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0xa55d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (argc == 2) {\n    if (aType_23891[argv[1]->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar6 = sqlite3VdbeIntValue(argv[1]);\n    iVar5 = (int)iVar6;\n    pMVar2 = *argv;\n    if (iVar5 < 0x1f) {\n      cVar4 = aType_23891[pMVar2->flags & 0x1f];\n      if (iVar5 < 0) goto LAB_000a5612;\n      if (cVar4 == '\x05') goto LAB_000a5628;\n      r = sqlite3VdbeRealValue(pMVar2);\n      if (iVar5 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if (aType_23891[pMVar2->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\n    iVar5 = 0x1e;\nLAB_000a569c:\n    __s = sqlite3_mprintf("%.*f",iVar5,r);\n    if (__s == (char *)0x0) {\n      sqlite3_result_error_nomem(context);\n      goto LAB_000a5628;\n    }\n    sVar3 = strlen(__s);\n    sqlite3AtoF(__s,&r,sVar3 & 0x3fffffff,'\x01');\n    sqlite3_free(__s);\n  }\n  else {\n    pMVar2 = *argv;\n    cVar4 = aType_23891[pMVar2->flags & 0x1f];\nLAB_000a5612:\n    if (cVar4 == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\nLAB_000a5651:\n    if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }\n    else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }\n  }\n  dVar1 = r;\n  pMVar2 = context->pOut;\n  if ((pMVar2->flags & 0x2400) == 0) {\n    pMVar2->flags = 1;\n  }\n  else {\n    vdbeMemClearExternAndSetNull(pMVar2);\n  }\n  if (!NAN(dVar1)) {\n    (pMVar2->u).r = dVar1;\n    pMVar2->flags = 8;\n  }\nLAB_000a5628:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return;\n}\n\n" comment comment (function_definition "void roundFunc(sqlite3_context *context,int argc,sqlite3_value **argv)\n\n{\n  double dVar1;\n  Mem *pMVar2;\n  char *__s;\n  size_t sVar3;\n  char cVar4;\n  int iVar5;\n  int in_GS_OFFSET;\n  i64 iVar6;\n  double r;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0xa55d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (argc == 2) {\n    if (aType_23891[argv[1]->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar6 = sqlite3VdbeIntValue(argv[1]);\n    iVar5 = (int)iVar6;\n    pMVar2 = *argv;\n    if (iVar5 < 0x1f) {\n      cVar4 = aType_23891[pMVar2->flags & 0x1f];\n      if (iVar5 < 0) goto LAB_000a5612;\n      if (cVar4 == '\x05') goto LAB_000a5628;\n      r = sqlite3VdbeRealValue(pMVar2);\n      if (iVar5 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if (aType_23891[pMVar2->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\n    iVar5 = 0x1e;\nLAB_000a569c:\n    __s = sqlite3_mprintf("%.*f",iVar5,r);\n    if (__s == (char *)0x0) {\n      sqlite3_result_error_nomem(context);\n      goto LAB_000a5628;\n    }\n    sVar3 = strlen(__s);\n    sqlite3AtoF(__s,&r,sVar3 & 0x3fffffff,'\x01');\n    sqlite3_free(__s);\n  }\n  else {\n    pMVar2 = *argv;\n    cVar4 = aType_23891[pMVar2->flags & 0x1f];\nLAB_000a5612:\n    if (cVar4 == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\nLAB_000a5651:\n    if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }\n    else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }\n  }\n  dVar1 = r;\n  pMVar2 = context->pOut;\n  if ((pMVar2->flags & 0x2400) == 0) {\n    pMVar2->flags = 1;\n  }\n  else {\n    vdbeMemClearExternAndSetNull(pMVar2);\n  }\n  if (!NAN(dVar1)) {\n    (pMVar2->u).r = dVar1;\n    pMVar2->flags = 8;\n  }\nLAB_000a5628:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return;\n}" primitive_type (function_declarator "roundFunc(sqlite3_context *context,int argc,sqlite3_value **argv)" identifier (parameter_list "(sqlite3_context *context,int argc,sqlite3_value **argv)" ( (parameter_declaration "sqlite3_context *context" type_identifier (pointer_declarator "*context" * identifier)) , (parameter_declaration "int argc" primitive_type identifier) , (parameter_declaration "sqlite3_value **argv" type_identifier (pointer_declarator "**argv" * (pointer_declarator "*argv" * identifier))) ))) (compound_statement "{\n  double dVar1;\n  Mem *pMVar2;\n  char *__s;\n  size_t sVar3;\n  char cVar4;\n  int iVar5;\n  int in_GS_OFFSET;\n  i64 iVar6;\n  double r;\n  int local_20;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0xa55d9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if (argc == 2) {\n    if (aType_23891[argv[1]->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar6 = sqlite3VdbeIntValue(argv[1]);\n    iVar5 = (int)iVar6;\n    pMVar2 = *argv;\n    if (iVar5 < 0x1f) {\n      cVar4 = aType_23891[pMVar2->flags & 0x1f];\n      if (iVar5 < 0) goto LAB_000a5612;\n      if (cVar4 == '\x05') goto LAB_000a5628;\n      r = sqlite3VdbeRealValue(pMVar2);\n      if (iVar5 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if (aType_23891[pMVar2->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\n    iVar5 = 0x1e;\nLAB_000a569c:\n    __s = sqlite3_mprintf("%.*f",iVar5,r);\n    if (__s == (char *)0x0) {\n      sqlite3_result_error_nomem(context);\n      goto LAB_000a5628;\n    }\n    sVar3 = strlen(__s);\n    sqlite3AtoF(__s,&r,sVar3 & 0x3fffffff,'\x01');\n    sqlite3_free(__s);\n  }\n  else {\n    pMVar2 = *argv;\n    cVar4 = aType_23891[pMVar2->flags & 0x1f];\nLAB_000a5612:\n    if (cVar4 == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\nLAB_000a5651:\n    if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }\n    else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }\n  }\n  dVar1 = r;\n  pMVar2 = context->pOut;\n  if ((pMVar2->flags & 0x2400) == 0) {\n    pMVar2->flags = 1;\n  }\n  else {\n    vdbeMemClearExternAndSetNull(pMVar2);\n  }\n  if (!NAN(dVar1)) {\n    (pMVar2->u).r = dVar1;\n    pMVar2->flags = 8;\n  }\nLAB_000a5628:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return;\n}" { (declaration "double dVar1;" primitive_type identifier ;) (declaration "Mem *pMVar2;" type_identifier (pointer_declarator "*pMVar2" * identifier) ;) (declaration "char *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "i64 iVar6;" type_identifier identifier ;) (declaration "double r;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0xa55d9;" (assignment_expression "uStack_14 = 0xa55d9" identifier = number_literal) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (if_statement "if (argc == 2) {\n    if (aType_23891[argv[1]->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar6 = sqlite3VdbeIntValue(argv[1]);\n    iVar5 = (int)iVar6;\n    pMVar2 = *argv;\n    if (iVar5 < 0x1f) {\n      cVar4 = aType_23891[pMVar2->flags & 0x1f];\n      if (iVar5 < 0) goto LAB_000a5612;\n      if (cVar4 == '\x05') goto LAB_000a5628;\n      r = sqlite3VdbeRealValue(pMVar2);\n      if (iVar5 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if (aType_23891[pMVar2->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\n    iVar5 = 0x1e;\nLAB_000a569c:\n    __s = sqlite3_mprintf("%.*f",iVar5,r);\n    if (__s == (char *)0x0) {\n      sqlite3_result_error_nomem(context);\n      goto LAB_000a5628;\n    }\n    sVar3 = strlen(__s);\n    sqlite3AtoF(__s,&r,sVar3 & 0x3fffffff,'\x01');\n    sqlite3_free(__s);\n  }\n  else {\n    pMVar2 = *argv;\n    cVar4 = aType_23891[pMVar2->flags & 0x1f];\nLAB_000a5612:\n    if (cVar4 == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\nLAB_000a5651:\n    if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }\n    else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }\n  }" if (parenthesized_expression "(argc == 2)" ( (binary_expression "argc == 2" identifier == number_literal) )) (compound_statement "{\n    if (aType_23891[argv[1]->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar6 = sqlite3VdbeIntValue(argv[1]);\n    iVar5 = (int)iVar6;\n    pMVar2 = *argv;\n    if (iVar5 < 0x1f) {\n      cVar4 = aType_23891[pMVar2->flags & 0x1f];\n      if (iVar5 < 0) goto LAB_000a5612;\n      if (cVar4 == '\x05') goto LAB_000a5628;\n      r = sqlite3VdbeRealValue(pMVar2);\n      if (iVar5 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if (aType_23891[pMVar2->flags & 0x1f] == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\n    iVar5 = 0x1e;\nLAB_000a569c:\n    __s = sqlite3_mprintf("%.*f",iVar5,r);\n    if (__s == (char *)0x0) {\n      sqlite3_result_error_nomem(context);\n      goto LAB_000a5628;\n    }\n    sVar3 = strlen(__s);\n    sqlite3AtoF(__s,&r,sVar3 & 0x3fffffff,'\x01');\n    sqlite3_free(__s);\n  }" { (if_statement "if (aType_23891[argv[1]->flags & 0x1f] == '\x05') goto LAB_000a5628;" if (parenthesized_expression "(aType_23891[argv[1]->flags & 0x1f] == '\x05')" ( (binary_expression "aType_23891[argv[1]->flags & 0x1f] == '\x05'" (subscript_expression "aType_23891[argv[1]->flags & 0x1f]" identifier [ (binary_expression "argv[1]->flags & 0x1f" (field_expression "argv[1]->flags" (subscript_expression "argv[1]" identifier [ number_literal ]) -> field_identifier) & number_literal) ]) == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "iVar6 = sqlite3VdbeIntValue(argv[1]);" (assignment_expression "iVar6 = sqlite3VdbeIntValue(argv[1])" identifier = (call_expression "sqlite3VdbeIntValue(argv[1])" identifier (argument_list "(argv[1])" ( (subscript_expression "argv[1]" identifier [ number_literal ]) )))) ;) (expression_statement "iVar5 = (int)iVar6;" (assignment_expression "iVar5 = (int)iVar6" identifier = (cast_expression "(int)iVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "pMVar2 = *argv;" (assignment_expression "pMVar2 = *argv" identifier = (pointer_expression "*argv" * identifier)) ;) (if_statement "if (iVar5 < 0x1f) {\n      cVar4 = aType_23891[pMVar2->flags & 0x1f];\n      if (iVar5 < 0) goto LAB_000a5612;\n      if (cVar4 == '\x05') goto LAB_000a5628;\n      r = sqlite3VdbeRealValue(pMVar2);\n      if (iVar5 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }" if (parenthesized_expression "(iVar5 < 0x1f)" ( (binary_expression "iVar5 < 0x1f" identifier < number_literal) )) (compound_statement "{\n      cVar4 = aType_23891[pMVar2->flags & 0x1f];\n      if (iVar5 < 0) goto LAB_000a5612;\n      if (cVar4 == '\x05') goto LAB_000a5628;\n      r = sqlite3VdbeRealValue(pMVar2);\n      if (iVar5 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }" { (expression_statement "cVar4 = aType_23891[pMVar2->flags & 0x1f];" (assignment_expression "cVar4 = aType_23891[pMVar2->flags & 0x1f]" identifier = (subscript_expression "aType_23891[pMVar2->flags & 0x1f]" identifier [ (binary_expression "pMVar2->flags & 0x1f" (field_expression "pMVar2->flags" identifier -> field_identifier) & number_literal) ])) ;) (if_statement "if (iVar5 < 0) goto LAB_000a5612;" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (goto_statement "goto LAB_000a5612;" goto statement_identifier ;)) (if_statement "if (cVar4 == '\x05') goto LAB_000a5628;" if (parenthesized_expression "(cVar4 == '\x05')" ( (binary_expression "cVar4 == '\x05'" identifier == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "r = sqlite3VdbeRealValue(pMVar2);" (assignment_expression "r = sqlite3VdbeRealValue(pMVar2)" identifier = (call_expression "sqlite3VdbeRealValue(pMVar2)" identifier (argument_list "(pMVar2)" ( identifier )))) ;) (if_statement "if (iVar5 != 0) goto LAB_000a569c;" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000a569c;" goto statement_identifier ;)) (goto_statement "goto LAB_000a5651;" goto statement_identifier ;) })) (if_statement "if (aType_23891[pMVar2->flags & 0x1f] == '\x05') goto LAB_000a5628;" if (parenthesized_expression "(aType_23891[pMVar2->flags & 0x1f] == '\x05')" ( (binary_expression "aType_23891[pMVar2->flags & 0x1f] == '\x05'" (subscript_expression "aType_23891[pMVar2->flags & 0x1f]" identifier [ (binary_expression "pMVar2->flags & 0x1f" (field_expression "pMVar2->flags" identifier -> field_identifier) & number_literal) ]) == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "r = sqlite3VdbeRealValue(pMVar2);" (assignment_expression "r = sqlite3VdbeRealValue(pMVar2)" identifier = (call_expression "sqlite3VdbeRealValue(pMVar2)" identifier (argument_list "(pMVar2)" ( identifier )))) ;) (expression_statement "iVar5 = 0x1e;" (assignment_expression "iVar5 = 0x1e" identifier = number_literal) ;) (labeled_statement "LAB_000a569c:\n    __s = sqlite3_mprintf("%.*f",iVar5,r);" statement_identifier : (expression_statement "__s = sqlite3_mprintf("%.*f",iVar5,r);" (assignment_expression "__s = sqlite3_mprintf("%.*f",iVar5,r)" identifier = (call_expression "sqlite3_mprintf("%.*f",iVar5,r)" identifier (argument_list "("%.*f",iVar5,r)" ( (string_literal ""%.*f"" " string_content ") , identifier , identifier )))) ;)) (if_statement "if (__s == (char *)0x0) {\n      sqlite3_result_error_nomem(context);\n      goto LAB_000a5628;\n    }" if (parenthesized_expression "(__s == (char *)0x0)" ( (binary_expression "__s == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      sqlite3_result_error_nomem(context);\n      goto LAB_000a5628;\n    }" { (expression_statement "sqlite3_result_error_nomem(context);" (call_expression "sqlite3_result_error_nomem(context)" identifier (argument_list "(context)" ( identifier ))) ;) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;) })) (expression_statement "sVar3 = strlen(__s);" (assignment_expression "sVar3 = strlen(__s)" identifier = (call_expression "strlen(__s)" identifier (argument_list "(__s)" ( identifier )))) ;) (expression_statement "sqlite3AtoF(__s,&r,sVar3 & 0x3fffffff,'\x01');" (call_expression "sqlite3AtoF(__s,&r,sVar3 & 0x3fffffff,'\x01')" identifier (argument_list "(__s,&r,sVar3 & 0x3fffffff,'\x01')" ( identifier , (pointer_expression "&r" & identifier) , (binary_expression "sVar3 & 0x3fffffff" identifier & number_literal) , (char_literal "'\x01'" ' escape_sequence ') ))) ;) (expression_statement "sqlite3_free(__s);" (call_expression "sqlite3_free(__s)" identifier (argument_list "(__s)" ( identifier ))) ;) }) (else_clause "else {\n    pMVar2 = *argv;\n    cVar4 = aType_23891[pMVar2->flags & 0x1f];\nLAB_000a5612:\n    if (cVar4 == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\nLAB_000a5651:\n    if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }\n    else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }\n  }" else (compound_statement "{\n    pMVar2 = *argv;\n    cVar4 = aType_23891[pMVar2->flags & 0x1f];\nLAB_000a5612:\n    if (cVar4 == '\x05') goto LAB_000a5628;\n    r = sqlite3VdbeRealValue(pMVar2);\nLAB_000a5651:\n    if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }\n    else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }\n  }" { (expression_statement "pMVar2 = *argv;" (assignment_expression "pMVar2 = *argv" identifier = (pointer_expression "*argv" * identifier)) ;) (expression_statement "cVar4 = aType_23891[pMVar2->flags & 0x1f];" (assignment_expression "cVar4 = aType_23891[pMVar2->flags & 0x1f]" identifier = (subscript_expression "aType_23891[pMVar2->flags & 0x1f]" identifier [ (binary_expression "pMVar2->flags & 0x1f" (field_expression "pMVar2->flags" identifier -> field_identifier) & number_literal) ])) ;) (labeled_statement "LAB_000a5612:\n    if (cVar4 == '\x05') goto LAB_000a5628;" statement_identifier : (if_statement "if (cVar4 == '\x05') goto LAB_000a5628;" if (parenthesized_expression "(cVar4 == '\x05')" ( (binary_expression "cVar4 == '\x05'" identifier == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;))) (expression_statement "r = sqlite3VdbeRealValue(pMVar2);" (assignment_expression "r = sqlite3VdbeRealValue(pMVar2)" identifier = (call_expression "sqlite3VdbeRealValue(pMVar2)" identifier (argument_list "(pMVar2)" ( identifier )))) ;) (labeled_statement "LAB_000a5651:\n    if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }\n    else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }" statement_identifier : (if_statement "if ((r < 0.0) || ((double)DAT_0016eb84 <= r)) {\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }\n    else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }" if (parenthesized_expression "((r < 0.0) || ((double)DAT_0016eb84 <= r))" ( (binary_expression "(r < 0.0) || ((double)DAT_0016eb84 <= r)" (parenthesized_expression "(r < 0.0)" ( (binary_expression "r < 0.0" identifier < number_literal) )) || (parenthesized_expression "((double)DAT_0016eb84 <= r)" ( (binary_expression "(double)DAT_0016eb84 <= r" (cast_expression "(double)DAT_0016eb84" ( (type_descriptor "double" primitive_type) ) identifier) <= identifier) ))) )) (compound_statement "{\n      if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }\n      r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);\n    }" { (if_statement "if ((0.0 <= r) || (r <= (double)DAT_0016eb80)) {\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }" if (parenthesized_expression "((0.0 <= r) || (r <= (double)DAT_0016eb80))" ( (binary_expression "(0.0 <= r) || (r <= (double)DAT_0016eb80)" (parenthesized_expression "(0.0 <= r)" ( (binary_expression "0.0 <= r" number_literal <= identifier) )) || (parenthesized_expression "(r <= (double)DAT_0016eb80)" ( (binary_expression "r <= (double)DAT_0016eb80" identifier <= (cast_expression "(double)DAT_0016eb80" ( (type_descriptor "double" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        iVar5 = 0;\n        goto LAB_000a569c;\n      }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_000a569c;" goto statement_identifier ;) })) (expression_statement "r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r);" (assignment_expression "r = -(double)(longlong)ROUND((double)DAT_0016eb98 - r)" identifier = (unary_expression "-(double)(longlong)ROUND((double)DAT_0016eb98 - r)" - (cast_expression "(double)(longlong)ROUND((double)DAT_0016eb98 - r)" ( (type_descriptor "double" primitive_type) ) (cast_expression "(longlong)ROUND((double)DAT_0016eb98 - r)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND((double)DAT_0016eb98 - r)" identifier (argument_list "((double)DAT_0016eb98 - r)" ( (binary_expression "(double)DAT_0016eb98 - r" (cast_expression "(double)DAT_0016eb98" ( (type_descriptor "double" primitive_type) ) identifier) - identifier) ))))))) ;) }) (else_clause "else {\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }" else (compound_statement "{\n      r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);\n    }" { (expression_statement "r = (double)(longlong)ROUND(r + (double)DAT_0016eb98);" (assignment_expression "r = (double)(longlong)ROUND(r + (double)DAT_0016eb98)" identifier = (cast_expression "(double)(longlong)ROUND(r + (double)DAT_0016eb98)" ( (type_descriptor "double" primitive_type) ) (cast_expression "(longlong)ROUND(r + (double)DAT_0016eb98)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND(r + (double)DAT_0016eb98)" identifier (argument_list "(r + (double)DAT_0016eb98)" ( (binary_expression "r + (double)DAT_0016eb98" identifier + (cast_expression "(double)DAT_0016eb98" ( (type_descriptor "double" primitive_type) ) identifier)) )))))) ;) })))) }))) (expression_statement "dVar1 = r;" (assignment_expression "dVar1 = r" identifier = identifier) ;) (expression_statement "pMVar2 = context->pOut;" (assignment_expression "pMVar2 = context->pOut" identifier = (field_expression "context->pOut" identifier -> field_identifier)) ;) (if_statement "if ((pMVar2->flags & 0x2400) == 0) {\n    pMVar2->flags = 1;\n  }\n  else {\n    vdbeMemClearExternAndSetNull(pMVar2);\n  }" if (parenthesized_expression "((pMVar2->flags & 0x2400) == 0)" ( (binary_expression "(pMVar2->flags & 0x2400) == 0" (parenthesized_expression "(pMVar2->flags & 0x2400)" ( (binary_expression "pMVar2->flags & 0x2400" (field_expression "pMVar2->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    pMVar2->flags = 1;\n  }" { (expression_statement "pMVar2->flags = 1;" (assignment_expression "pMVar2->flags = 1" (field_expression "pMVar2->flags" identifier -> field_identifier) = number_literal) ;) }) (else_clause "else {\n    vdbeMemClearExternAndSetNull(pMVar2);\n  }" else (compound_statement "{\n    vdbeMemClearExternAndSetNull(pMVar2);\n  }" { (expression_statement "vdbeMemClearExternAndSetNull(pMVar2);" (call_expression "vdbeMemClearExternAndSetNull(pMVar2)" identifier (argument_list "(pMVar2)" ( identifier ))) ;) }))) (if_statement "if (!NAN(dVar1)) {\n    (pMVar2->u).r = dVar1;\n    pMVar2->flags = 8;\n  }" if (parenthesized_expression "(!NAN(dVar1))" ( (unary_expression "!NAN(dVar1)" ! (call_expression "NAN(dVar1)" identifier (argument_list "(dVar1)" ( identifier )))) )) (compound_statement "{\n    (pMVar2->u).r = dVar1;\n    pMVar2->flags = 8;\n  }" { (expression_statement "(pMVar2->u).r = dVar1;" (assignment_expression "(pMVar2->u).r = dVar1" (field_expression "(pMVar2->u).r" (parenthesized_expression "(pMVar2->u)" ( (field_expression "pMVar2->u" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "pMVar2->flags = 8;" (assignment_expression "pMVar2->flags = 8" (field_expression "pMVar2->flags" identifier -> field_identifier) = number_literal) ;) })) (labeled_statement "LAB_000a5628:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" { comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void FUN_000a55d0(int *param_1,int param_2,int *param_3)\n\n{\n  int iVar1;\n  double *pdVar2;\n  char *__s;\n  char cVar3;\n  int iVar4;\n  int in_GS_OFFSET;\n  longdouble lVar5;\n  double local_2c;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }\n  pdVar2 = (double *)*param_1;\n  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }\n  if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }\nLAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }\n  return;\n}\n\n" (function_definition "void FUN_000a55d0(int *param_1,int param_2,int *param_3)\n\n{\n  int iVar1;\n  double *pdVar2;\n  char *__s;\n  char cVar3;\n  int iVar4;\n  int in_GS_OFFSET;\n  longdouble lVar5;\n  double local_2c;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }\n  pdVar2 = (double *)*param_1;\n  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }\n  if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }\nLAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }\n  return;\n}" primitive_type (function_declarator "FUN_000a55d0(int *param_1,int param_2,int *param_3)" identifier (parameter_list "(int *param_1,int param_2,int *param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  double *pdVar2;\n  char *__s;\n  char cVar3;\n  int iVar4;\n  int in_GS_OFFSET;\n  longdouble lVar5;\n  double local_2c;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }\n  pdVar2 = (double *)*param_1;\n  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }\n  if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }\nLAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "double *pdVar2;" primitive_type (pointer_declarator "*pdVar2" * identifier) ;) (declaration "char *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "longdouble lVar5;" type_identifier identifier ;) (declaration "double local_2c;" primitive_type identifier ;) (expression_statement "iVar1 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar1 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (if_statement "if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }" { (if_statement "if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;" if (parenthesized_expression "((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05')" ( (binary_expression "(&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05'" (subscript_expression "(&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" ( (pointer_expression "&DAT_00163ce0" & identifier) )) [ (binary_expression "*(ushort *)(param_3[1] + 8) & 0x1f" (pointer_expression "*(ushort *)(param_3[1] + 8)" * (cast_expression "(ushort *)(param_3[1] + 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3[1] + 8)" ( (binary_expression "param_3[1] + 8" (subscript_expression "param_3[1]" identifier [ number_literal ]) + number_literal) )))) & number_literal) ]) == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "iVar4 = FUN_00045540();" (assignment_expression "iVar4 = FUN_00045540()" identifier = (call_expression "FUN_00045540()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }" if (parenthesized_expression "(iVar4 < 0x1f)" ( (binary_expression "iVar4 < 0x1f" identifier < number_literal) )) (compound_statement "{\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }" { (expression_statement "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];" (assignment_expression "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" identifier = (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" ( (pointer_expression "&DAT_00163ce0" & identifier) )) [ (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" * (cast_expression "(ushort *)(*param_3 + 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) )))) & number_literal) ])) ;) (if_statement "if (iVar4 < 0) goto LAB_000a5612;" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (goto_statement "goto LAB_000a5612;" goto statement_identifier ;)) (if_statement "if (cVar3 == '\x05') goto LAB_000a5628;" if (parenthesized_expression "(cVar3 == '\x05')" ( (binary_expression "cVar3 == '\x05'" identifier == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" identifier = (cast_expression "(longdouble)FUN_000455a0()" ( (type_descriptor "longdouble" type_identifier) ) (call_expression "FUN_000455a0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" identifier = (cast_expression "(double)lVar5" ( (type_descriptor "double" primitive_type) ) identifier)) ;) (if_statement "if (iVar4 != 0) goto LAB_000a569c;" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000a569c;" goto statement_identifier ;)) (goto_statement "goto LAB_000a5651;" goto statement_identifier ;) })) (if_statement "if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;" if (parenthesized_expression "((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05')" ( (binary_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05'" (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" ( (pointer_expression "&DAT_00163ce0" & identifier) )) [ (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" * (cast_expression "(ushort *)(*param_3 + 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) )))) & number_literal) ]) == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;)) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" identifier = (cast_expression "(longdouble)FUN_000455a0()" ( (type_descriptor "longdouble" type_identifier) ) (call_expression "FUN_000455a0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "iVar4 = 0x1e;" (assignment_expression "iVar4 = 0x1e" identifier = number_literal) ;) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" identifier = (cast_expression "(double)lVar5" ( (type_descriptor "double" primitive_type) ) identifier)) ;) (labeled_statement "LAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);" statement_identifier : (expression_statement "__s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);" (assignment_expression "__s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" identifier = (cast_expression "(char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" identifier (argument_list "(&DAT_0015d1f5,iVar4,(double)lVar5)" ( (pointer_expression "&DAT_0015d1f5" & identifier) , identifier , (cast_expression "(double)lVar5" ( (type_descriptor "double" primitive_type) ) identifier) ))))) ;)) (if_statement "if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }" if (parenthesized_expression "(__s == (char *)0x0)" ( (binary_expression "__s == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }" { (expression_statement "FUN_0004e320(param_1);" (call_expression "FUN_0004e320(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;) })) (expression_statement "strlen(__s);" (call_expression "strlen(__s)" identifier (argument_list "(__s)" ( identifier ))) ;) (expression_statement "FUN_0003a6f0(1);" (call_expression "FUN_0003a6f0(1)" identifier (argument_list "(1)" ( number_literal ))) ;) (expression_statement "FUN_00044000(__s);" (call_expression "FUN_00044000(__s)" identifier (argument_list "(__s)" ( identifier ))) ;) }) (else_clause "else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" else (compound_statement "{\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" { (expression_statement "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];" (assignment_expression "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" identifier = (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" ( (pointer_expression "&DAT_00163ce0" & identifier) )) [ (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" * (cast_expression "(ushort *)(*param_3 + 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) )))) & number_literal) ])) ;) (labeled_statement "LAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;" statement_identifier : (if_statement "if (cVar3 == '\x05') goto LAB_000a5628;" if (parenthesized_expression "(cVar3 == '\x05')" ( (binary_expression "cVar3 == '\x05'" identifier == (char_literal "'\x05'" ' escape_sequence ')) )) (goto_statement "goto LAB_000a5628;" goto statement_identifier ;))) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" identifier = (cast_expression "(longdouble)FUN_000455a0()" ( (type_descriptor "longdouble" type_identifier) ) (call_expression "FUN_000455a0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" identifier = (cast_expression "(double)lVar5" ( (type_descriptor "double" primitive_type) ) identifier)) ;) (labeled_statement "LAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" statement_identifier : (if_statement "if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" if (parenthesized_expression "((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5))" ( (binary_expression "(lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)" (parenthesized_expression "(lVar5 < (longdouble)0)" ( (binary_expression "lVar5 < (longdouble)0" identifier < (cast_expression "(longdouble)0" ( (type_descriptor "longdouble" type_identifier) ) number_literal)) )) || (parenthesized_expression "((longdouble)DAT_0016eb84 <= lVar5)" ( (binary_expression "(longdouble)DAT_0016eb84 <= lVar5" (cast_expression "(longdouble)DAT_0016eb84" ( (type_descriptor "longdouble" type_identifier) ) identifier) <= identifier) ))) )) (compound_statement "{\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }" { (if_statement "if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }" if (parenthesized_expression "(((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80))" ( (binary_expression "((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)" (parenthesized_expression "((longdouble)0 <= lVar5)" ( (binary_expression "(longdouble)0 <= lVar5" (cast_expression "(longdouble)0" ( (type_descriptor "longdouble" type_identifier) ) number_literal) <= identifier) )) || (parenthesized_expression "(lVar5 <= (longdouble)DAT_0016eb80)" ( (binary_expression "lVar5 <= (longdouble)DAT_0016eb80" identifier <= (cast_expression "(longdouble)DAT_0016eb80" ( (type_descriptor "longdouble" type_identifier) ) identifier)) ))) )) (compound_statement "{\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_000a569c;" goto statement_identifier ;) })) (expression_statement "local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);" (assignment_expression "local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" identifier = (unary_expression "-(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" - (cast_expression "(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" ( (type_descriptor "double" primitive_type) ) (cast_expression "(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND((longdouble)DAT_0016eb98 - lVar5)" identifier (argument_list "((longdouble)DAT_0016eb98 - lVar5)" ( (binary_expression "(longdouble)DAT_0016eb98 - lVar5" (cast_expression "(longdouble)DAT_0016eb98" ( (type_descriptor "longdouble" type_identifier) ) identifier) - identifier) ))))))) ;) }) (else_clause "else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" else (compound_statement "{\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" { (expression_statement "local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);" (assignment_expression "local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" identifier = (cast_expression "(double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" ( (type_descriptor "double" primitive_type) ) (cast_expression "(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" ( (type_descriptor "longlong" type_identifier) ) (call_expression "ROUND(lVar5 + (longdouble)DAT_0016eb98)" identifier (argument_list "(lVar5 + (longdouble)DAT_0016eb98)" ( (binary_expression "lVar5 + (longdouble)DAT_0016eb98" identifier + (cast_expression "(longdouble)DAT_0016eb98" ( (type_descriptor "longdouble" type_identifier) ) identifier)) )))))) ;) })))) }))) (expression_statement "pdVar2 = (double *)*param_1;" (assignment_expression "pdVar2 = (double *)*param_1" identifier = (cast_expression "(double *)*param_1" ( (type_descriptor "double *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }" if (parenthesized_expression "(((ulonglong)pdVar2[1] & 0x2400) == 0)" ( (binary_expression "((ulonglong)pdVar2[1] & 0x2400) == 0" (parenthesized_expression "((ulonglong)pdVar2[1] & 0x2400)" ( (binary_expression "(ulonglong)pdVar2[1] & 0x2400" (cast_expression "(ulonglong)pdVar2[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "pdVar2[1]" identifier [ number_literal ])) & number_literal) )) == number_literal) )) (compound_statement "{\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }" { (expression_statement "*(undefined2 *)(pdVar2 + 1) = 1;" (assignment_expression "*(undefined2 *)(pdVar2 + 1) = 1" (pointer_expression "*(undefined2 *)(pdVar2 + 1)" * (cast_expression "(undefined2 *)(pdVar2 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pdVar2 + 1)" ( (binary_expression "pdVar2 + 1" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n    FUN_0004c150();\n  }" else (compound_statement "{\n    FUN_0004c150();\n  }" { (expression_statement "FUN_0004c150();" (call_expression "FUN_0004c150()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }" if (parenthesized_expression "(!NAN(local_2c))" ( (unary_expression "!NAN(local_2c)" ! (call_expression "NAN(local_2c)" identifier (argument_list "(local_2c)" ( identifier )))) )) (compound_statement "{\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }" { (expression_statement "*pdVar2 = local_2c;" (assignment_expression "*pdVar2 = local_2c" (pointer_expression "*pdVar2" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(pdVar2 + 1) = 8;" (assignment_expression "*(undefined2 *)(pdVar2 + 1) = 8" (pointer_expression "*(undefined2 *)(pdVar2 + 1)" * (cast_expression "(undefined2 *)(pdVar2 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pdVar2 + 1)" ( (binary_expression "pdVar2 + 1" identifier + number_literal) )))) = number_literal) ;) })) (labeled_statement "LAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }" statement_identifier : (if_statement "if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }" if (parenthesized_expression "(iVar1 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "iVar1 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    FUN_00153870();\n  }" { (expression_statement "FUN_00153870();" (call_expression "FUN_00153870()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) & LIT) ]) == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) & LIT) ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) & LIT) ]) == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (cast_expression ( (type_descriptor TYPE) ) IDENT) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) & LIT) ])) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) LIT)) )) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= IDENT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) LIT) <= IDENT) )) || (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (unary_expression - (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - IDENT) ))))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))))) ;) })))) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (unary_expression ! (call_expression IDENT (argument_list ( IDENT )))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return ;) })))
(function_definition "void FUN_000a55d0(int *param_1,int param_2,int *param_3)\n\n{\n  int iVar1;\n  double *pdVar2;\n  char *__s;\n  char cVar3;\n  int iVar4;\n  int in_GS_OFFSET;\n  longdouble lVar5;\n  double local_2c;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }\n  pdVar2 = (double *)*param_1;\n  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }\n  if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }\nLAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_000a55d0(int *param_1,int param_2,int *param_3)" (identifier "FUN_000a55d0") (parameter_list "(int *param_1,int param_2,int *param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  int iVar1;\n  double *pdVar2;\n  char *__s;\n  char cVar3;\n  int iVar4;\n  int in_GS_OFFSET;\n  longdouble lVar5;\n  double local_2c;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }\n  pdVar2 = (double *)*param_1;\n  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }\n  if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }\nLAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "double *pdVar2;" (primitive_type "double") (pointer_declarator "*pdVar2" (* "*") (identifier "pdVar2")) (; ";")) (declaration "char *__s;" (primitive_type "char") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "char cVar3;" (primitive_type "char") (identifier "cVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "longdouble lVar5;" (type_identifier "longdouble") (identifier "lVar5") (; ";")) (declaration "double local_2c;" (primitive_type "double") (identifier "local_2c") (; ";")) (expression_statement "iVar1 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar1 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (if_statement "if (param_2 == 2) {\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }\n  else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" (if "if") (parenthesized_expression "(param_2 == 2)" (( "(") (binary_expression "param_2 == 2" (identifier "param_2") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    iVar4 = FUN_00045540();\n    if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }\n    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    iVar4 = 0x1e;\n    local_2c = (double)lVar5;\nLAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);\n    if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }\n    strlen(__s);\n    FUN_0003a6f0(1);\n    FUN_00044000(__s);\n  }" ({ "{") (if_statement "if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;" (if "if") (parenthesized_expression "((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05')" (( "(") (binary_expression "(&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05'" (subscript_expression "(&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" (( "(") (pointer_expression "&DAT_00163ce0" (& "&") (identifier "DAT_00163ce0")) () ")")) ([ "[") (binary_expression "*(ushort *)(param_3[1] + 8) & 0x1f" (pointer_expression "*(ushort *)(param_3[1] + 8)" (* "*") (cast_expression "(ushort *)(param_3[1] + 8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3[1] + 8)" (( "(") (binary_expression "param_3[1] + 8" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (+ "+") (number_literal "8")) () ")")))) (& "&") (number_literal "0x1f")) (] "]")) (== "==") (char_literal "'\x05'" (' "'") (escape_sequence "\x05") (' "'"))) () ")")) (goto_statement "goto LAB_000a5628;" (goto "goto") (statement_identifier "LAB_000a5628") (; ";"))) (expression_statement "iVar4 = FUN_00045540();" (assignment_expression "iVar4 = FUN_00045540()" (identifier "iVar4") (= "=") (call_expression "FUN_00045540()" (identifier "FUN_00045540") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar4 < 0x1f) {\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }" (if "if") (parenthesized_expression "(iVar4 < 0x1f)" (( "(") (binary_expression "iVar4 < 0x1f" (identifier "iVar4") (< "<") (number_literal "0x1f")) () ")")) (compound_statement "{\n      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\n      if (iVar4 < 0) goto LAB_000a5612;\n      if (cVar3 == '\x05') goto LAB_000a5628;\n      lVar5 = (longdouble)FUN_000455a0();\n      local_2c = (double)lVar5;\n      if (iVar4 != 0) goto LAB_000a569c;\n      goto LAB_000a5651;\n    }" ({ "{") (expression_statement "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];" (assignment_expression "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (identifier "cVar3") (= "=") (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" (( "(") (pointer_expression "&DAT_00163ce0" (& "&") (identifier "DAT_00163ce0")) () ")")) ([ "[") (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" (* "*") (cast_expression "(ushort *)(*param_3 + 8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + 8)" (( "(") (binary_expression "*param_3 + 8" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "8")) () ")")))) (& "&") (number_literal "0x1f")) (] "]"))) (; ";")) (if_statement "if (iVar4 < 0) goto LAB_000a5612;" (if "if") (parenthesized_expression "(iVar4 < 0)" (( "(") (binary_expression "iVar4 < 0" (identifier "iVar4") (< "<") (number_literal "0")) () ")")) (goto_statement "goto LAB_000a5612;" (goto "goto") (statement_identifier "LAB_000a5612") (; ";"))) (if_statement "if (cVar3 == '\x05') goto LAB_000a5628;" (if "if") (parenthesized_expression "(cVar3 == '\x05')" (( "(") (binary_expression "cVar3 == '\x05'" (identifier "cVar3") (== "==") (char_literal "'\x05'" (' "'") (escape_sequence "\x05") (' "'"))) () ")")) (goto_statement "goto LAB_000a5628;" (goto "goto") (statement_identifier "LAB_000a5628") (; ";"))) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" (identifier "lVar5") (= "=") (cast_expression "(longdouble)FUN_000455a0()" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (call_expression "FUN_000455a0()" (identifier "FUN_000455a0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" (identifier "local_2c") (= "=") (cast_expression "(double)lVar5" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "lVar5"))) (; ";")) (if_statement "if (iVar4 != 0) goto LAB_000a569c;" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000a569c;" (goto "goto") (statement_identifier "LAB_000a569c") (; ";"))) (goto_statement "goto LAB_000a5651;" (goto "goto") (statement_identifier "LAB_000a5651") (; ";")) (} "}"))) (if_statement "if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;" (if "if") (parenthesized_expression "((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05')" (( "(") (binary_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05'" (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" (( "(") (pointer_expression "&DAT_00163ce0" (& "&") (identifier "DAT_00163ce0")) () ")")) ([ "[") (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" (* "*") (cast_expression "(ushort *)(*param_3 + 8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + 8)" (( "(") (binary_expression "*param_3 + 8" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "8")) () ")")))) (& "&") (number_literal "0x1f")) (] "]")) (== "==") (char_literal "'\x05'" (' "'") (escape_sequence "\x05") (' "'"))) () ")")) (goto_statement "goto LAB_000a5628;" (goto "goto") (statement_identifier "LAB_000a5628") (; ";"))) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" (identifier "lVar5") (= "=") (cast_expression "(longdouble)FUN_000455a0()" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (call_expression "FUN_000455a0()" (identifier "FUN_000455a0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "iVar4 = 0x1e;" (assignment_expression "iVar4 = 0x1e" (identifier "iVar4") (= "=") (number_literal "0x1e")) (; ";")) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" (identifier "local_2c") (= "=") (cast_expression "(double)lVar5" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "lVar5"))) (; ";")) (labeled_statement "LAB_000a569c:\n    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);" (statement_identifier "LAB_000a569c") (: ":") (expression_statement "__s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);" (assignment_expression "__s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" (identifier "__s") (= "=") (cast_expression "(char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5)" (identifier "FUN_000a3060") (argument_list "(&DAT_0015d1f5,iVar4,(double)lVar5)" (( "(") (pointer_expression "&DAT_0015d1f5" (& "&") (identifier "DAT_0015d1f5")) (, ",") (identifier "iVar4") (, ",") (cast_expression "(double)lVar5" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "lVar5")) () ")"))))) (; ";"))) (if_statement "if (__s == (char *)0x0) {\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }" (if "if") (parenthesized_expression "(__s == (char *)0x0)" (( "(") (binary_expression "__s == (char *)0x0" (identifier "__s") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      FUN_0004e320(param_1);\n      goto LAB_000a5628;\n    }" ({ "{") (expression_statement "FUN_0004e320(param_1);" (call_expression "FUN_0004e320(param_1)" (identifier "FUN_0004e320") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (goto_statement "goto LAB_000a5628;" (goto "goto") (statement_identifier "LAB_000a5628") (; ";")) (} "}"))) (expression_statement "strlen(__s);" (call_expression "strlen(__s)" (identifier "strlen") (argument_list "(__s)" (( "(") (identifier "__s") () ")"))) (; ";")) (expression_statement "FUN_0003a6f0(1);" (call_expression "FUN_0003a6f0(1)" (identifier "FUN_0003a6f0") (argument_list "(1)" (( "(") (number_literal "1") () ")"))) (; ";")) (expression_statement "FUN_00044000(__s);" (call_expression "FUN_00044000(__s)" (identifier "FUN_00044000") (argument_list "(__s)" (( "(") (identifier "__s") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" (else "else") (compound_statement "{\n    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];\nLAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;\n    lVar5 = (longdouble)FUN_000455a0();\n    local_2c = (double)lVar5;\nLAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }\n  }" ({ "{") (expression_statement "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];" (assignment_expression "cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (identifier "cVar3") (= "=") (subscript_expression "(&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f]" (parenthesized_expression "(&DAT_00163ce0)" (( "(") (pointer_expression "&DAT_00163ce0" (& "&") (identifier "DAT_00163ce0")) () ")")) ([ "[") (binary_expression "*(ushort *)(*param_3 + 8) & 0x1f" (pointer_expression "*(ushort *)(*param_3 + 8)" (* "*") (cast_expression "(ushort *)(*param_3 + 8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + 8)" (( "(") (binary_expression "*param_3 + 8" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "8")) () ")")))) (& "&") (number_literal "0x1f")) (] "]"))) (; ";")) (labeled_statement "LAB_000a5612:\n    if (cVar3 == '\x05') goto LAB_000a5628;" (statement_identifier "LAB_000a5612") (: ":") (if_statement "if (cVar3 == '\x05') goto LAB_000a5628;" (if "if") (parenthesized_expression "(cVar3 == '\x05')" (( "(") (binary_expression "cVar3 == '\x05'" (identifier "cVar3") (== "==") (char_literal "'\x05'" (' "'") (escape_sequence "\x05") (' "'"))) () ")")) (goto_statement "goto LAB_000a5628;" (goto "goto") (statement_identifier "LAB_000a5628") (; ";")))) (expression_statement "lVar5 = (longdouble)FUN_000455a0();" (assignment_expression "lVar5 = (longdouble)FUN_000455a0()" (identifier "lVar5") (= "=") (cast_expression "(longdouble)FUN_000455a0()" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (call_expression "FUN_000455a0()" (identifier "FUN_000455a0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "local_2c = (double)lVar5;" (assignment_expression "local_2c = (double)lVar5" (identifier "local_2c") (= "=") (cast_expression "(double)lVar5" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "lVar5"))) (; ";")) (labeled_statement "LAB_000a5651:\n    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" (statement_identifier "LAB_000a5651") (: ":") (if_statement "if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }\n    else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" (if "if") (parenthesized_expression "((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5))" (( "(") (binary_expression "(lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)" (parenthesized_expression "(lVar5 < (longdouble)0)" (( "(") (binary_expression "lVar5 < (longdouble)0" (identifier "lVar5") (< "<") (cast_expression "(longdouble)0" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (number_literal "0"))) () ")")) (|| "||") (parenthesized_expression "((longdouble)DAT_0016eb84 <= lVar5)" (( "(") (binary_expression "(longdouble)DAT_0016eb84 <= lVar5" (cast_expression "(longdouble)DAT_0016eb84" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (identifier "DAT_0016eb84")) (<= "<=") (identifier "lVar5")) () ")"))) () ")")) (compound_statement "{\n      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }\n      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);\n    }" ({ "{") (if_statement "if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }" (if "if") (parenthesized_expression "(((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80))" (( "(") (binary_expression "((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)" (parenthesized_expression "((longdouble)0 <= lVar5)" (( "(") (binary_expression "(longdouble)0 <= lVar5" (cast_expression "(longdouble)0" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (number_literal "0")) (<= "<=") (identifier "lVar5")) () ")")) (|| "||") (parenthesized_expression "(lVar5 <= (longdouble)DAT_0016eb80)" (( "(") (binary_expression "lVar5 <= (longdouble)DAT_0016eb80" (identifier "lVar5") (<= "<=") (cast_expression "(longdouble)DAT_0016eb80" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (identifier "DAT_0016eb80"))) () ")"))) () ")")) (compound_statement "{\n        iVar4 = 0;\n        goto LAB_000a569c;\n      }" ({ "{") (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_000a569c;" (goto "goto") (statement_identifier "LAB_000a569c") (; ";")) (} "}"))) (expression_statement "local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);" (assignment_expression "local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" (identifier "local_2c") (= "=") (unary_expression "-(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" (- "-") (cast_expression "(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (cast_expression "(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5)" (( "(") (type_descriptor "longlong" (type_identifier "longlong")) () ")") (call_expression "ROUND((longdouble)DAT_0016eb98 - lVar5)" (identifier "ROUND") (argument_list "((longdouble)DAT_0016eb98 - lVar5)" (( "(") (binary_expression "(longdouble)DAT_0016eb98 - lVar5" (cast_expression "(longdouble)DAT_0016eb98" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (identifier "DAT_0016eb98")) (- "-") (identifier "lVar5")) () ")"))))))) (; ";")) (} "}")) (else_clause "else {\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" (else "else") (compound_statement "{\n      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);\n    }" ({ "{") (expression_statement "local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);" (assignment_expression "local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" (identifier "local_2c") (= "=") (cast_expression "(double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (cast_expression "(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98)" (( "(") (type_descriptor "longlong" (type_identifier "longlong")) () ")") (call_expression "ROUND(lVar5 + (longdouble)DAT_0016eb98)" (identifier "ROUND") (argument_list "(lVar5 + (longdouble)DAT_0016eb98)" (( "(") (binary_expression "lVar5 + (longdouble)DAT_0016eb98" (identifier "lVar5") (+ "+") (cast_expression "(longdouble)DAT_0016eb98" (( "(") (type_descriptor "longdouble" (type_identifier "longdouble")) () ")") (identifier "DAT_0016eb98"))) () ")")))))) (; ";")) (} "}"))))) (} "}")))) (expression_statement "pdVar2 = (double *)*param_1;" (assignment_expression "pdVar2 = (double *)*param_1" (identifier "pdVar2") (= "=") (cast_expression "(double *)*param_1" (( "(") (type_descriptor "double *" (primitive_type "double") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (((ulonglong)pdVar2[1] & 0x2400) == 0) {\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }\n  else {\n    FUN_0004c150();\n  }" (if "if") (parenthesized_expression "(((ulonglong)pdVar2[1] & 0x2400) == 0)" (( "(") (binary_expression "((ulonglong)pdVar2[1] & 0x2400) == 0" (parenthesized_expression "((ulonglong)pdVar2[1] & 0x2400)" (( "(") (binary_expression "(ulonglong)pdVar2[1] & 0x2400" (cast_expression "(ulonglong)pdVar2[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "pdVar2[1]" (identifier "pdVar2") ([ "[") (number_literal "1") (] "]"))) (& "&") (number_literal "0x2400")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    *(undefined2 *)(pdVar2 + 1) = 1;\n  }" ({ "{") (expression_statement "*(undefined2 *)(pdVar2 + 1) = 1;" (assignment_expression "*(undefined2 *)(pdVar2 + 1) = 1" (pointer_expression "*(undefined2 *)(pdVar2 + 1)" (* "*") (cast_expression "(undefined2 *)(pdVar2 + 1)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pdVar2 + 1)" (( "(") (binary_expression "pdVar2 + 1" (identifier "pdVar2") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n    FUN_0004c150();\n  }" (else "else") (compound_statement "{\n    FUN_0004c150();\n  }" ({ "{") (expression_statement "FUN_0004c150();" (call_expression "FUN_0004c150()" (identifier "FUN_0004c150") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (!NAN(local_2c)) {\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }" (if "if") (parenthesized_expression "(!NAN(local_2c))" (( "(") (unary_expression "!NAN(local_2c)" (! "!") (call_expression "NAN(local_2c)" (identifier "NAN") (argument_list "(local_2c)" (( "(") (identifier "local_2c") () ")")))) () ")")) (compound_statement "{\n    *pdVar2 = local_2c;\n    *(undefined2 *)(pdVar2 + 1) = 8;\n  }" ({ "{") (expression_statement "*pdVar2 = local_2c;" (assignment_expression "*pdVar2 = local_2c" (pointer_expression "*pdVar2" (* "*") (identifier "pdVar2")) (= "=") (identifier "local_2c")) (; ";")) (expression_statement "*(undefined2 *)(pdVar2 + 1) = 8;" (assignment_expression "*(undefined2 *)(pdVar2 + 1) = 8" (pointer_expression "*(undefined2 *)(pdVar2 + 1)" (* "*") (cast_expression "(undefined2 *)(pdVar2 + 1)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pdVar2 + 1)" (( "(") (binary_expression "pdVar2 + 1" (identifier "pdVar2") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "8")) (; ";")) (} "}"))) (labeled_statement "LAB_000a5628:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }" (statement_identifier "LAB_000a5628") (: ":") (if_statement "if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_00153870();\n  }" (if "if") (parenthesized_expression "(iVar1 != *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "iVar1 != *(int *)(in_GS_OFFSET + 0x14)" (identifier "iVar1") (!= "!=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n                    \n    FUN_00153870();\n  }" ({ "{") (expression_statement "FUN_00153870();" (call_expression "FUN_00153870()" (identifier "FUN_00153870") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

void function_1(type_1 *context,int var_2,type_2 **argv)

{
  double dVar1;
  type_3 *pMVar2;
  char *var_8;
  size_t var_12;
  char var_5;
  int var_4;
  int var_1;
  type_4 iVar6;
  double var_14;
  int var_18;
  type_5 uStack_14;
  
  uStack_14 = 0xa55d9;
  var_18 = *(int *)(var_1 + 0x14);
  if (var_2 == 2) {
    if (aType_23891[argv[1]->flags & 0x1f] == '\x05') goto LAB_000a5628;
    iVar6 = var_3(argv[1]);
    var_4 = (int)iVar6;
    pMVar2 = *argv;
    if (var_4 < 0x1f) {
      var_5 = aType_23891[pMVar2->flags & 0x1f];
      if (var_4 < 0) goto LAB_000a5612;
      if (var_5 == '\x05') goto LAB_000a5628;
      var_14 = var_6(pMVar2);
      if (var_4 != 0) goto LAB_000a569c;
      goto LAB_000a5651;
    }
    if (aType_23891[pMVar2->flags & 0x1f] == '\x05') goto LAB_000a5628;
    var_14 = var_6(pMVar2);
    var_4 = 0x1e;
LAB_000a569c:
    var_8 = var_7("%.*f",var_4,var_14);
    if (var_8 == (char *)0x0) {
      var_9(context);
      goto LAB_000a5628;
    }
    var_12 = var_10(var_8);
    var_11(var_8,&var_14,var_12 & 0x3fffffff,'\x01');
    var_13(var_8);
  }
  else {
    pMVar2 = *argv;
    var_5 = aType_23891[pMVar2->flags & 0x1f];
LAB_000a5612:
    if (var_5 == '\x05') goto LAB_000a5628;
    var_14 = var_6(pMVar2);
LAB_000a5651:
    if ((var_14 < 0.0) || ((double)DAT_0016eb84 <= var_14)) {
      if ((0.0 <= var_14) || (var_14 <= (double)DAT_0016eb80)) {
        var_4 = 0;
        goto LAB_000a569c;
      }
      var_14 = -(double)(type_6)var_15((double)DAT_0016eb98 - var_14);
    }
    else {
      var_14 = (double)(type_6)var_15(var_14 + (double)DAT_0016eb98);
    }
  }
  dVar1 = var_14;
  pMVar2 = context->pOut;
  if ((pMVar2->flags & 0x2400) == 0) {
    pMVar2->flags = 1;
  }
  else {
    var_16(pMVar2);
  }
  if (!var_17(dVar1)) {
    (pMVar2->u).var_14 = dVar1;
    pMVar2->flags = 8;
  }
LAB_000a5628:
  if (var_18 != *(int *)(var_1 + 0x14)) {
                    /* WARNING: Subroutine does not return */
    var_19();
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (number_literal))) right: (char_literal (escape_sequence)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal))) right: (char_literal (escape_sequence)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (identifier))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (number_literal)) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (identifier)))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))))))))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (unary_expression argument: (call_expression function: (identifier) arguments: (argument_list (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void MASKED(int *param_1,int param_2,int *param_3)

{
  int iVar1;
  double *pdVar2;
  char *__s;
  char cVar3;
  int iVar4;
  int in_GS_OFFSET;
  longdouble lVar5;
  double local_2c;
  
  iVar1 = *(int *)(in_GS_OFFSET + 0x14);
  if (param_2 == 2) {
    if ((&DAT_00163ce0)[*(ushort *)(param_3[1] + 8) & 0x1f] == '\x05') goto LAB_000a5628;
    iVar4 = FUN_00045540();
    if (iVar4 < 0x1f) {
      cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];
      if (iVar4 < 0) goto LAB_000a5612;
      if (cVar3 == '\x05') goto LAB_000a5628;
      lVar5 = (longdouble)FUN_000455a0();
      local_2c = (double)lVar5;
      if (iVar4 != 0) goto LAB_000a569c;
      goto LAB_000a5651;
    }
    if ((&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f] == '\x05') goto LAB_000a5628;
    lVar5 = (longdouble)FUN_000455a0();
    iVar4 = 0x1e;
    local_2c = (double)lVar5;
LAB_000a569c:
    __s = (char *)FUN_000a3060(&DAT_0015d1f5,iVar4,(double)lVar5);
    if (__s == (char *)0x0) {
      FUN_0004e320(param_1);
      goto LAB_000a5628;
    }
    strlen(__s);
    FUN_0003a6f0(1);
    FUN_00044000(__s);
  }
  else {
    cVar3 = (&DAT_00163ce0)[*(ushort *)(*param_3 + 8) & 0x1f];
LAB_000a5612:
    if (cVar3 == '\x05') goto LAB_000a5628;
    lVar5 = (longdouble)FUN_000455a0();
    local_2c = (double)lVar5;
LAB_000a5651:
    if ((lVar5 < (longdouble)0) || ((longdouble)DAT_0016eb84 <= lVar5)) {
      if (((longdouble)0 <= lVar5) || (lVar5 <= (longdouble)DAT_0016eb80)) {
        iVar4 = 0;
        goto LAB_000a569c;
      }
      local_2c = -(double)(longlong)ROUND((longdouble)DAT_0016eb98 - lVar5);
    }
    else {
      local_2c = (double)(longlong)ROUND(lVar5 + (longdouble)DAT_0016eb98);
    }
  }
  pdVar2 = (double *)*param_1;
  if (((ulonglong)pdVar2[1] & 0x2400) == 0) {
    *(undefined2 *)(pdVar2 + 1) = 1;
  }
  else {
    FUN_0004c150();
  }
  if (!NAN(local_2c)) {
    *pdVar2 = local_2c;
    *(undefined2 *)(pdVar2 + 1) = 8;
  }
LAB_000a5628:
  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_00153870();
  }
  return;
}

