
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention */

mp_size_t __gmpn_hgcd_step(mp_size_t n,mp_ptr ap,mp_ptr bp,mp_size_t s,hgcd_matrix *M,mp_ptr tp)

{
  int iVar1;
  byte bVar2;
  uint uVar3;
  int iVar4;
  mp_size_t mVar5;
  uint bl;
  int in_GS_OFFSET;
  mp_limb_t local_58;
  mp_limb_t local_54;
  mp_limb_t local_50;
  byte bStack_44;
  hgcd_matrix1 M1;
  
  iVar1 = *(int *)(in_GS_OFFSET + 0x14);
  local_54 = ap[n + 0x3fffffff];
  local_50 = bp[n + 0x3fffffff];
  uVar3 = local_54 | local_50;
  if (s + 1 == n) {
    if (3 < uVar3) {
      local_58 = ap[n + 0x3ffffffe];
      bl = bp[n + 0x3ffffffe];
      goto LAB_00059261;
    }
  }
  else {
    local_58 = ap[n + 0x3ffffffe];
    bl = bp[n + 0x3ffffffe];
    if (-1 < (int)uVar3) {
      iVar4 = 0x1f;
      if (uVar3 != 0) {
        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {
        }
      }
      bVar2 = (byte)iVar4 ^ 0x1f;
      bStack_44 = 0x20 - bVar2;
      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);
      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);
      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);
      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);
    }
LAB_00059261:
    iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);
    if (iVar4 != 0) {
      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);
      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);
      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);
      goto LAB_000592ae;
    }
  }
  mVar5 = __gmpn_gcd_subdiv_step(ap,bp,n,s,hgcd_hook,M,tp);
LAB_000592ae:
  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {
    return mVar5;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail_local();
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void __gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,
                     undefined4 param_6)

{
  int iVar1;
  byte bVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int in_GS_OFFSET;
  uint local_58;
  uint local_54;
  uint local_50;
  byte bStack_44;
  undefined1 auStack_30 [16];
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  iVar3 = param_1 + 0x3fffffff;
  local_54 = *(uint *)(param_2 + iVar3 * 4);
  local_50 = *(uint *)(param_3 + iVar3 * 4);
  iVar3 = iVar3 * 4;
  uVar4 = local_54 | local_50;
  if (param_4 + 1 == param_1) {
    if (3 < uVar4) {
      local_58 = *(uint *)(param_2 + -4 + iVar3);
      uVar5 = *(uint *)(param_3 + -4 + iVar3);
      goto LAB_00059261;
    }
  }
  else {
    local_58 = *(uint *)(param_2 + -4 + iVar3);
    uVar5 = *(uint *)(param_3 + -4 + iVar3);
    if (-1 < (int)uVar4) {
      iVar1 = 0x1f;
      if (uVar4 != 0) {
        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {
        }
      }
      bVar2 = (byte)iVar1 ^ 0x1f;
      bStack_44 = 0x20 - bVar2;
      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);
      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);
      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);
      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);
    }
LAB_00059261:
    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);
    if (iVar3 != 0) {
      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);
      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);
      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);
      goto LAB_000592ae;
    }
  }
  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);
LAB_000592ae:
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0007ebe0();
}


CALL 0x0001c5b1
ADD EAX,0x44e9b
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x4c
MOV ESI,dword ptr [ESP + 0x64]
MOV EBP,dword ptr [ESP + 0x68]
MOV dword ptr [ESP],EAX
MOV EAX,dword ptr [ESP + 0x70]
MOV ECX,dword ptr [ESP + 0x6c]
MOV dword ptr [ESP + 0x14],EAX
MOV EAX,dword ptr [ESP + 0x74]
MOV dword ptr [ESP + 0x10],EAX
MOV EAX,GS:[0x14]
MOV dword ptr [ESP + 0x3c],EAX
XOR EAX,EAX
MOV EAX,dword ptr [ESP + 0x60]
ADD EAX,0x3fffffff
MOV EDI,dword ptr [ESI + EAX*0x4]
MOV EDX,dword ptr [EBP + EAX*0x4]
LEA EBX,[EAX*0x4 + 0x0]
MOV EAX,EDI
MOV dword ptr [ESP + 0xc],EDX
OR EAX,EDX
MOV dword ptr [ESP + 0x8],EDI
LEA EDX,[ECX + 0x1]
CMP EDX,dword ptr [ESP + 0x60]
JZ 0x000592c8
MOV ECX,dword ptr [ESI + EBX*0x1 + -0x4]
MOV EDX,dword ptr [EBP + EBX*0x1 + -0x4]
MOV dword ptr [ESP + 0x4],ECX
TEST EAX,EAX
JS 0x00059261
BSR EAX,EAX
MOV EDI,0x20
XOR EAX,0x1f
SUB EDI,EAX
MOV ECX,EAX
MOV dword ptr [ESP + 0x18],EDI
MOV EDI,dword ptr [ESP + 0x8]
SHL EDI,CL
MOVZX ECX,byte ptr [ESP + 0x18]
MOV dword ptr [ESP + 0x8],EDI
MOV EDI,dword ptr [ESP + 0x4]
SHR EDI,CL
OR EDI,dword ptr [ESP + 0x8]
MOVZX ECX,byte ptr [ESP + 0x18]
MOV dword ptr [ESP + 0x8],EDI
MOV EDI,dword ptr [ESI + EBX*0x1 + -0x8]
MOV EBX,dword ptr [EBP + EBX*0x1 + -0x8]
SHR EDI,CL
MOV ECX,EAX
MOV dword ptr [ESP + 0x1c],EDI
MOV EDI,dword ptr [ESP + 0x4]
SHL EDI,CL
MOV ECX,dword ptr [ESP + 0x1c]
OR ECX,EDI
MOV EDI,dword ptr [ESP + 0xc]
MOV dword ptr [ESP + 0x4],ECX
MOV ECX,EAX
SHL EDI,CL
MOVZX ECX,byte ptr [ESP + 0x18]
MOV dword ptr [ESP + 0xc],EDI
MOV EDI,EDX
SHR EDI,CL
MOV ECX,dword ptr [ESP + 0xc]
OR ECX,EDI
MOV dword ptr [ESP + 0xc],ECX
MOVZX ECX,byte ptr [ESP + 0x18]
SHR EBX,CL
MOV ECX,EAX
SHL EDX,CL
OR EDX,EBX
SUB ESP,0xc
LEA EDI,[ESP + 0x38]
PUSH EDI
PUSH EDX
PUSH dword ptr [ESP + 0x20]
PUSH dword ptr [ESP + 0x1c]
PUSH dword ptr [ESP + 0x24]
MOV EBX,dword ptr [ESP + 0x20]
CALL 0x0001b640
ADD ESP,0x20
TEST EAX,EAX
JNZ 0x000592e0
SUB ESP,0x4
PUSH dword ptr [ESP + 0x14]
PUSH dword ptr [ESP + 0x1c]
MOV EBX,dword ptr [ESP + 0xc]
LEA EAX,[EBX + 0xfffbb110]
PUSH EAX
PUSH dword ptr [ESP + 0x7c]
PUSH dword ptr [ESP + 0x74]
PUSH EBP
PUSH ESI
CALL 0x0001c140
ADD ESP,0x20
MOV ESI,dword ptr [ESP + 0x3c]
XOR ESI,dword ptr GS:[0x14]
JNZ 0x00059324
ADD ESP,0x4c
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP EAX,0x3
JBE 0x00059286
MOV EAX,dword ptr [ESI + EBX*0x1 + -0x4]
MOV EDX,dword ptr [EBP + EBX*0x1 + -0x4]
MOV dword ptr [ESP + 0x4],EAX
JMP 0x00059261
SUB ESP,0x4
PUSH dword ptr [ESP + 0x14]
PUSH EDI
PUSH dword ptr [ESP + 0x20]
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x0001b7c0
ADD ESP,0xc
PUSH dword ptr [ESP + 0x64]
PUSH ESI
PUSH dword ptr [ESP + 0x1c]
MOV EBX,dword ptr [ESP + 0x10]
MOV EAX,dword ptr [EBX + 0xfffffd94]
CALL dword ptr [EAX + 0x28]
POP EAX
PUSH dword ptr [ESP + 0x6c]
PUSH EBP
PUSH dword ptr [ESP + 0x24]
PUSH ESI
PUSH EDI
CALL 0x0001b5a0
ADD ESP,0x20
JMP 0x000592ae
CALL 0x0007ebe0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nvoid __gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)\n\n{\n  int iVar1;\n  byte bVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int in_GS_OFFSET;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  byte bStack_44;\n  undefined1 auStack_30 [16];\n  int local_20;\n  \n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  iVar3 = param_1 + 0x3fffffff;\n  local_54 = *(uint *)(param_2 + iVar3 * 4);\n  local_50 = *(uint *)(param_3 + iVar3 * 4);\n  iVar3 = iVar3 * 4;\n  uVar4 = local_54 | local_50;\n  if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }\n  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);\nLAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ebe0();\n}\n\n" comment (function_definition "void __gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)\n\n{\n  int iVar1;\n  byte bVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int in_GS_OFFSET;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  byte bStack_44;\n  undefined1 auStack_30 [16];\n  int local_20;\n  \n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  iVar3 = param_1 + 0x3fffffff;\n  local_54 = *(uint *)(param_2 + iVar3 * 4);\n  local_50 = *(uint *)(param_3 + iVar3 * 4);\n  iVar3 = iVar3 * 4;\n  uVar4 = local_54 | local_50;\n  if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }\n  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);\nLAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ebe0();\n}" primitive_type (function_declarator "__gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)" identifier (parameter_list "(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int in_GS_OFFSET;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  byte bStack_44;\n  undefined1 auStack_30 [16];\n  int local_20;\n  \n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  iVar3 = param_1 + 0x3fffffff;\n  local_54 = *(uint *)(param_2 + iVar3 * 4);\n  local_50 = *(uint *)(param_3 + iVar3 * 4);\n  iVar3 = iVar3 * 4;\n  uVar4 = local_54 | local_50;\n  if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }\n  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);\nLAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ebe0();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "uint local_58;" type_identifier identifier ;) (declaration "uint local_54;" type_identifier identifier ;) (declaration "uint local_50;" type_identifier identifier ;) (declaration "byte bStack_44;" type_identifier identifier ;) (declaration "undefined1 auStack_30 [16];" type_identifier (array_declarator "auStack_30 [16]" identifier [ number_literal ]) ;) (declaration "int local_20;" primitive_type identifier ;) (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) ))))) ;) (expression_statement "iVar3 = param_1 + 0x3fffffff;" (assignment_expression "iVar3 = param_1 + 0x3fffffff" identifier = (binary_expression "param_1 + 0x3fffffff" identifier + number_literal)) ;) (expression_statement "local_54 = *(uint *)(param_2 + iVar3 * 4);" (assignment_expression "local_54 = *(uint *)(param_2 + iVar3 * 4)" identifier = (pointer_expression "*(uint *)(param_2 + iVar3 * 4)" * (cast_expression "(uint *)(param_2 + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + iVar3 * 4)" ( (binary_expression "param_2 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (expression_statement "local_50 = *(uint *)(param_3 + iVar3 * 4);" (assignment_expression "local_50 = *(uint *)(param_3 + iVar3 * 4)" identifier = (pointer_expression "*(uint *)(param_3 + iVar3 * 4)" * (cast_expression "(uint *)(param_3 + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + iVar3 * 4)" ( (binary_expression "param_3 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar3 = iVar3 * 4;" (assignment_expression "iVar3 = iVar3 * 4" identifier = (binary_expression "iVar3 * 4" identifier * number_literal)) ;) (expression_statement "uVar4 = local_54 | local_50;" (assignment_expression "uVar4 = local_54 | local_50" identifier = (binary_expression "local_54 | local_50" identifier | identifier)) ;) (if_statement "if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" if (parenthesized_expression "(param_4 + 1 == param_1)" ( (binary_expression "param_4 + 1 == param_1" (binary_expression "param_4 + 1" identifier + number_literal) == identifier) )) (compound_statement "{\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }" { (if_statement "if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }" if (parenthesized_expression "(3 < uVar4)" ( (binary_expression "3 < uVar4" number_literal < identifier) )) (compound_statement "{\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }" { (expression_statement "local_58 = *(uint *)(param_2 + -4 + iVar3);" (assignment_expression "local_58 = *(uint *)(param_2 + -4 + iVar3)" identifier = (pointer_expression "*(uint *)(param_2 + -4 + iVar3)" * (cast_expression "(uint *)(param_2 + -4 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + -4 + iVar3)" ( (binary_expression "param_2 + -4 + iVar3" (binary_expression "param_2 + -4" identifier + number_literal) + identifier) ))))) ;) (expression_statement "uVar5 = *(uint *)(param_3 + -4 + iVar3);" (assignment_expression "uVar5 = *(uint *)(param_3 + -4 + iVar3)" identifier = (pointer_expression "*(uint *)(param_3 + -4 + iVar3)" * (cast_expression "(uint *)(param_3 + -4 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + -4 + iVar3)" ( (binary_expression "param_3 + -4 + iVar3" (binary_expression "param_3 + -4" identifier + number_literal) + identifier) ))))) ;) (goto_statement "goto LAB_00059261;" goto statement_identifier ;) })) }) (else_clause "else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" else (compound_statement "{\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" { (expression_statement "local_58 = *(uint *)(param_2 + -4 + iVar3);" (assignment_expression "local_58 = *(uint *)(param_2 + -4 + iVar3)" identifier = (pointer_expression "*(uint *)(param_2 + -4 + iVar3)" * (cast_expression "(uint *)(param_2 + -4 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + -4 + iVar3)" ( (binary_expression "param_2 + -4 + iVar3" (binary_expression "param_2 + -4" identifier + number_literal) + identifier) ))))) ;) (expression_statement "uVar5 = *(uint *)(param_3 + -4 + iVar3);" (assignment_expression "uVar5 = *(uint *)(param_3 + -4 + iVar3)" identifier = (pointer_expression "*(uint *)(param_3 + -4 + iVar3)" * (cast_expression "(uint *)(param_3 + -4 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + -4 + iVar3)" ( (binary_expression "param_3 + -4 + iVar3" (binary_expression "param_3 + -4" identifier + number_literal) + identifier) ))))) ;) (if_statement "if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }" if (parenthesized_expression "(-1 < (int)uVar4)" ( (binary_expression "-1 < (int)uVar4" number_literal < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }" { (expression_statement "iVar1 = 0x1f;" (assignment_expression "iVar1 = 0x1f" identifier = number_literal) ;) (if_statement "if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }" { (for_statement "for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }" for ( ; (binary_expression "uVar4 >> iVar1 == 0" (binary_expression "uVar4 >> iVar1" identifier >> identifier) == number_literal) ; (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ) (compound_statement "{\n        }" { })) })) (expression_statement "bVar2 = (byte)iVar1 ^ 0x1f;" (assignment_expression "bVar2 = (byte)iVar1 ^ 0x1f" identifier = (binary_expression "(byte)iVar1 ^ 0x1f" (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier) ^ number_literal)) ;) (expression_statement "bStack_44 = 0x20 - bVar2;" (assignment_expression "bStack_44 = 0x20 - bVar2" identifier = (binary_expression "0x20 - bVar2" number_literal - identifier)) ;) (expression_statement "local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);" (assignment_expression "local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f)" identifier = (binary_expression "local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f)" (binary_expression "local_58 >> (bStack_44 & 0x1f)" identifier >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))) | (binary_expression "local_54 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);" (assignment_expression "local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f)" identifier = (binary_expression "*(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f)" (binary_expression "*(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f)" (pointer_expression "*(uint *)(param_2 + -8 + iVar3)" * (cast_expression "(uint *)(param_2 + -8 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + -8 + iVar3)" ( (binary_expression "param_2 + -8 + iVar3" (binary_expression "param_2 + -8" identifier + number_literal) + identifier) )))) >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))) | (binary_expression "local_58 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);" (assignment_expression "local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f)" identifier = (binary_expression "local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f)" (binary_expression "local_50 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar5 >> (bStack_44 & 0x1f)" identifier >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);" (assignment_expression "uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" identifier = (binary_expression "uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" (binary_expression "uVar5 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "*(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" (pointer_expression "*(uint *)(param_3 + -8 + iVar3)" * (cast_expression "(uint *)(param_3 + -8 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + -8 + iVar3)" ( (binary_expression "param_3 + -8 + iVar3" (binary_expression "param_3 + -8" identifier + number_literal) + identifier) )))) >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))))) ;) })) (labeled_statement "LAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);" statement_identifier : (expression_statement "iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);" (assignment_expression "iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30)" identifier = (call_expression "__gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30)" identifier (argument_list "(local_54,local_58,local_50,uVar5,auStack_30)" ( identifier , identifier , identifier , identifier , identifier )))) ;)) (if_statement "if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }" { (expression_statement "__gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);" (call_expression "__gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6)" identifier (argument_list "(param_5,auStack_30,param_6)" ( identifier , identifier , identifier ))) ;) (expression_statement "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);" (call_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0x28)" ( (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0x28" identifier + number_literal) ))))) )) (argument_list "(param_6,param_2,param_1)" ( identifier , identifier , identifier ))) ;) (expression_statement "__gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);" (call_expression "__gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1)" identifier (argument_list "(auStack_30,param_2,param_6,param_3,param_1)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_000592ae;" goto statement_identifier ;) })) }))) (expression_statement "__gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);" (call_expression "__gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6)" identifier (argument_list "(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (labeled_statement "LAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }" statement_identifier : (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\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    return;\n  }" { (return_statement "return;" return ;) }))) comment (expression_statement "FUN_0007ebe0();" (call_expression "FUN_0007ebe0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* WARNING: Unknown calling convention */\n\nmp_size_t __gmpn_hgcd_step(mp_size_t n,mp_ptr ap,mp_ptr bp,mp_size_t s,hgcd_matrix *M,mp_ptr tp)\n\n{\n  int iVar1;\n  byte bVar2;\n  uint uVar3;\n  int iVar4;\n  mp_size_t mVar5;\n  uint bl;\n  int in_GS_OFFSET;\n  mp_limb_t local_58;\n  mp_limb_t local_54;\n  mp_limb_t local_50;\n  byte bStack_44;\n  hgcd_matrix1 M1;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  local_54 = ap[n + 0x3fffffff];\n  local_50 = bp[n + 0x3fffffff];\n  uVar3 = local_54 | local_50;\n  if (s + 1 == n) {\n    if (3 < uVar3) {\n      local_58 = ap[n + 0x3ffffffe];\n      bl = bp[n + 0x3ffffffe];\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = ap[n + 0x3ffffffe];\n    bl = bp[n + 0x3ffffffe];\n    if (-1 < (int)uVar3) {\n      iVar4 = 0x1f;\n      if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar4 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);\n      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);\n    if (iVar4 != 0) {\n      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);\n      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);\n      goto LAB_000592ae;\n    }\n  }\n  mVar5 = __gmpn_gcd_subdiv_step(ap,bp,n,s,hgcd_hook,M,tp);\nLAB_000592ae:\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return mVar5;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\n}\n\n" comment comment (function_definition "mp_size_t __gmpn_hgcd_step(mp_size_t n,mp_ptr ap,mp_ptr bp,mp_size_t s,hgcd_matrix *M,mp_ptr tp)\n\n{\n  int iVar1;\n  byte bVar2;\n  uint uVar3;\n  int iVar4;\n  mp_size_t mVar5;\n  uint bl;\n  int in_GS_OFFSET;\n  mp_limb_t local_58;\n  mp_limb_t local_54;\n  mp_limb_t local_50;\n  byte bStack_44;\n  hgcd_matrix1 M1;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  local_54 = ap[n + 0x3fffffff];\n  local_50 = bp[n + 0x3fffffff];\n  uVar3 = local_54 | local_50;\n  if (s + 1 == n) {\n    if (3 < uVar3) {\n      local_58 = ap[n + 0x3ffffffe];\n      bl = bp[n + 0x3ffffffe];\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = ap[n + 0x3ffffffe];\n    bl = bp[n + 0x3ffffffe];\n    if (-1 < (int)uVar3) {\n      iVar4 = 0x1f;\n      if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar4 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);\n      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);\n    if (iVar4 != 0) {\n      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);\n      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);\n      goto LAB_000592ae;\n    }\n  }\n  mVar5 = __gmpn_gcd_subdiv_step(ap,bp,n,s,hgcd_hook,M,tp);\nLAB_000592ae:\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return mVar5;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\n}" type_identifier (function_declarator "__gmpn_hgcd_step(mp_size_t n,mp_ptr ap,mp_ptr bp,mp_size_t s,hgcd_matrix *M,mp_ptr tp)" identifier (parameter_list "(mp_size_t n,mp_ptr ap,mp_ptr bp,mp_size_t s,hgcd_matrix *M,mp_ptr tp)" ( (parameter_declaration "mp_size_t n" type_identifier identifier) , (parameter_declaration "mp_ptr ap" type_identifier identifier) , (parameter_declaration "mp_ptr bp" type_identifier identifier) , (parameter_declaration "mp_size_t s" type_identifier identifier) , (parameter_declaration "hgcd_matrix *M" type_identifier (pointer_declarator "*M" * identifier)) , (parameter_declaration "mp_ptr tp" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  uint uVar3;\n  int iVar4;\n  mp_size_t mVar5;\n  uint bl;\n  int in_GS_OFFSET;\n  mp_limb_t local_58;\n  mp_limb_t local_54;\n  mp_limb_t local_50;\n  byte bStack_44;\n  hgcd_matrix1 M1;\n  \n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  local_54 = ap[n + 0x3fffffff];\n  local_50 = bp[n + 0x3fffffff];\n  uVar3 = local_54 | local_50;\n  if (s + 1 == n) {\n    if (3 < uVar3) {\n      local_58 = ap[n + 0x3ffffffe];\n      bl = bp[n + 0x3ffffffe];\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = ap[n + 0x3ffffffe];\n    bl = bp[n + 0x3ffffffe];\n    if (-1 < (int)uVar3) {\n      iVar4 = 0x1f;\n      if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar4 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);\n      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);\n    if (iVar4 != 0) {\n      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);\n      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);\n      goto LAB_000592ae;\n    }\n  }\n  mVar5 = __gmpn_gcd_subdiv_step(ap,bp,n,s,hgcd_hook,M,tp);\nLAB_000592ae:\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return mVar5;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail_local();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "mp_size_t mVar5;" type_identifier identifier ;) (declaration "uint bl;" type_identifier identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "mp_limb_t local_58;" type_identifier identifier ;) (declaration "mp_limb_t local_54;" type_identifier identifier ;) (declaration "mp_limb_t local_50;" type_identifier identifier ;) (declaration "byte bStack_44;" type_identifier identifier ;) (declaration "hgcd_matrix1 M1;" type_identifier 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) ))))) ;) (expression_statement "local_54 = ap[n + 0x3fffffff];" (assignment_expression "local_54 = ap[n + 0x3fffffff]" identifier = (subscript_expression "ap[n + 0x3fffffff]" identifier [ (binary_expression "n + 0x3fffffff" identifier + number_literal) ])) ;) (expression_statement "local_50 = bp[n + 0x3fffffff];" (assignment_expression "local_50 = bp[n + 0x3fffffff]" identifier = (subscript_expression "bp[n + 0x3fffffff]" identifier [ (binary_expression "n + 0x3fffffff" identifier + number_literal) ])) ;) (expression_statement "uVar3 = local_54 | local_50;" (assignment_expression "uVar3 = local_54 | local_50" identifier = (binary_expression "local_54 | local_50" identifier | identifier)) ;) (if_statement "if (s + 1 == n) {\n    if (3 < uVar3) {\n      local_58 = ap[n + 0x3ffffffe];\n      bl = bp[n + 0x3ffffffe];\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = ap[n + 0x3ffffffe];\n    bl = bp[n + 0x3ffffffe];\n    if (-1 < (int)uVar3) {\n      iVar4 = 0x1f;\n      if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar4 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);\n      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);\n    if (iVar4 != 0) {\n      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);\n      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);\n      goto LAB_000592ae;\n    }\n  }" if (parenthesized_expression "(s + 1 == n)" ( (binary_expression "s + 1 == n" (binary_expression "s + 1" identifier + number_literal) == identifier) )) (compound_statement "{\n    if (3 < uVar3) {\n      local_58 = ap[n + 0x3ffffffe];\n      bl = bp[n + 0x3ffffffe];\n      goto LAB_00059261;\n    }\n  }" { (if_statement "if (3 < uVar3) {\n      local_58 = ap[n + 0x3ffffffe];\n      bl = bp[n + 0x3ffffffe];\n      goto LAB_00059261;\n    }" if (parenthesized_expression "(3 < uVar3)" ( (binary_expression "3 < uVar3" number_literal < identifier) )) (compound_statement "{\n      local_58 = ap[n + 0x3ffffffe];\n      bl = bp[n + 0x3ffffffe];\n      goto LAB_00059261;\n    }" { (expression_statement "local_58 = ap[n + 0x3ffffffe];" (assignment_expression "local_58 = ap[n + 0x3ffffffe]" identifier = (subscript_expression "ap[n + 0x3ffffffe]" identifier [ (binary_expression "n + 0x3ffffffe" identifier + number_literal) ])) ;) (expression_statement "bl = bp[n + 0x3ffffffe];" (assignment_expression "bl = bp[n + 0x3ffffffe]" identifier = (subscript_expression "bp[n + 0x3ffffffe]" identifier [ (binary_expression "n + 0x3ffffffe" identifier + number_literal) ])) ;) (goto_statement "goto LAB_00059261;" goto statement_identifier ;) })) }) (else_clause "else {\n    local_58 = ap[n + 0x3ffffffe];\n    bl = bp[n + 0x3ffffffe];\n    if (-1 < (int)uVar3) {\n      iVar4 = 0x1f;\n      if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar4 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);\n      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);\n    if (iVar4 != 0) {\n      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);\n      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);\n      goto LAB_000592ae;\n    }\n  }" else (compound_statement "{\n    local_58 = ap[n + 0x3ffffffe];\n    bl = bp[n + 0x3ffffffe];\n    if (-1 < (int)uVar3) {\n      iVar4 = 0x1f;\n      if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar4 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);\n      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);\n    if (iVar4 != 0) {\n      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);\n      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);\n      goto LAB_000592ae;\n    }\n  }" { (expression_statement "local_58 = ap[n + 0x3ffffffe];" (assignment_expression "local_58 = ap[n + 0x3ffffffe]" identifier = (subscript_expression "ap[n + 0x3ffffffe]" identifier [ (binary_expression "n + 0x3ffffffe" identifier + number_literal) ])) ;) (expression_statement "bl = bp[n + 0x3ffffffe];" (assignment_expression "bl = bp[n + 0x3ffffffe]" identifier = (subscript_expression "bp[n + 0x3ffffffe]" identifier [ (binary_expression "n + 0x3ffffffe" identifier + number_literal) ])) ;) (if_statement "if (-1 < (int)uVar3) {\n      iVar4 = 0x1f;\n      if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar4 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);\n      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);\n    }" if (parenthesized_expression "(-1 < (int)uVar3)" ( (binary_expression "-1 < (int)uVar3" number_literal < (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      iVar4 = 0x1f;\n      if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar4 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);\n      bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);\n    }" { (expression_statement "iVar4 = 0x1f;" (assignment_expression "iVar4 = 0x1f" identifier = number_literal) ;) (if_statement "if (uVar3 != 0) {\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }\n      }" { (for_statement "for (; uVar3 >> iVar4 == 0; iVar4 = iVar4 + -1) {\n        }" for ( ; (binary_expression "uVar3 >> iVar4 == 0" (binary_expression "uVar3 >> iVar4" identifier >> identifier) == number_literal) ; (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ) (compound_statement "{\n        }" { })) })) (expression_statement "bVar2 = (byte)iVar4 ^ 0x1f;" (assignment_expression "bVar2 = (byte)iVar4 ^ 0x1f" identifier = (binary_expression "(byte)iVar4 ^ 0x1f" (cast_expression "(byte)iVar4" ( (type_descriptor "byte" type_identifier) ) identifier) ^ number_literal)) ;) (expression_statement "bStack_44 = 0x20 - bVar2;" (assignment_expression "bStack_44 = 0x20 - bVar2" identifier = (binary_expression "0x20 - bVar2" number_literal - identifier)) ;) (expression_statement "local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);" (assignment_expression "local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f)" identifier = (binary_expression "local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f)" (binary_expression "local_58 >> (bStack_44 & 0x1f)" identifier >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))) | (binary_expression "local_54 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);" (assignment_expression "local_58 = ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f)" identifier = (binary_expression "ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f)" (binary_expression "ap[n + 0x3ffffffd] >> (bStack_44 & 0x1f)" (subscript_expression "ap[n + 0x3ffffffd]" identifier [ (binary_expression "n + 0x3ffffffd" identifier + number_literal) ]) >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))) | (binary_expression "local_58 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f);" (assignment_expression "local_50 = local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f)" identifier = (binary_expression "local_50 << (bVar2 & 0x1f) | bl >> (bStack_44 & 0x1f)" (binary_expression "local_50 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "bl >> (bStack_44 & 0x1f)" identifier >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f);" (assignment_expression "bl = bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f)" identifier = (binary_expression "bl << (bVar2 & 0x1f) | bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f)" (binary_expression "bl << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "bp[n + 0x3ffffffd] >> (bStack_44 & 0x1f)" (subscript_expression "bp[n + 0x3ffffffd]" identifier [ (binary_expression "n + 0x3ffffffd" identifier + number_literal) ]) >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))))) ;) })) (labeled_statement "LAB_00059261:\n    iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);" statement_identifier : (expression_statement "iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1);" (assignment_expression "iVar4 = __gmpn_hgcd2(local_54,local_58,local_50,bl,&M1)" identifier = (call_expression "__gmpn_hgcd2(local_54,local_58,local_50,bl,&M1)" identifier (argument_list "(local_54,local_58,local_50,bl,&M1)" ( identifier , identifier , identifier , identifier , (pointer_expression "&M1" & identifier) )))) ;)) (if_statement "if (iVar4 != 0) {\n      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);\n      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);\n      goto LAB_000592ae;\n    }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      __gmpn_hgcd_matrix_mul_1(M,&M1,tp);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);\n      mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);\n      goto LAB_000592ae;\n    }" { (expression_statement "__gmpn_hgcd_matrix_mul_1(M,&M1,tp);" (call_expression "__gmpn_hgcd_matrix_mul_1(M,&M1,tp)" identifier (argument_list "(M,&M1,tp)" ( identifier , (pointer_expression "&M1" & identifier) , identifier ))) ;) (expression_statement "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n);" (call_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(tp,ap,n)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0x28)" ( (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0x28" identifier + number_literal) ))))) )) (argument_list "(tp,ap,n)" ( identifier , identifier , identifier ))) ;) (expression_statement "mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n);" (assignment_expression "mVar5 = __gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n)" identifier = (call_expression "__gmpn_matrix22_mul1_inverse_vector(&M1,ap,tp,bp,n)" identifier (argument_list "(&M1,ap,tp,bp,n)" ( (pointer_expression "&M1" & identifier) , identifier , identifier , identifier , identifier )))) ;) (goto_statement "goto LAB_000592ae;" goto statement_identifier ;) })) }))) (expression_statement "mVar5 = __gmpn_gcd_subdiv_step(ap,bp,n,s,hgcd_hook,M,tp);" (assignment_expression "mVar5 = __gmpn_gcd_subdiv_step(ap,bp,n,s,hgcd_hook,M,tp)" identifier = (call_expression "__gmpn_gcd_subdiv_step(ap,bp,n,s,hgcd_hook,M,tp)" identifier (argument_list "(ap,bp,n,s,hgcd_hook,M,tp)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (labeled_statement "LAB_000592ae:\n  if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return mVar5;\n  }" statement_identifier : (if_statement "if (iVar1 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return mVar5;\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    return mVar5;\n  }" { (return_statement "return mVar5;" return identifier ;) }))) comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "void __gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)\n\n{\n  int iVar1;\n  byte bVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int in_GS_OFFSET;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  byte bStack_44;\n  undefined1 auStack_30 [16];\n  int local_20;\n  \n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  iVar3 = param_1 + 0x3fffffff;\n  local_54 = *(uint *)(param_2 + iVar3 * 4);\n  local_50 = *(uint *)(param_3 + iVar3 * 4);\n  iVar3 = iVar3 * 4;\n  uVar4 = local_54 | local_50;\n  if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }\n  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);\nLAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_0007ebe0();\n}\n\n" (function_definition "void __gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)\n\n{\n  int iVar1;\n  byte bVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int in_GS_OFFSET;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  byte bStack_44;\n  undefined1 auStack_30 [16];\n  int local_20;\n  \n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  iVar3 = param_1 + 0x3fffffff;\n  local_54 = *(uint *)(param_2 + iVar3 * 4);\n  local_50 = *(uint *)(param_3 + iVar3 * 4);\n  iVar3 = iVar3 * 4;\n  uVar4 = local_54 | local_50;\n  if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }\n  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);\nLAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_0007ebe0();\n}" primitive_type (function_declarator "__gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)" identifier (parameter_list "(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int in_GS_OFFSET;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  byte bStack_44;\n  undefined1 auStack_30 [16];\n  int local_20;\n  \n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  iVar3 = param_1 + 0x3fffffff;\n  local_54 = *(uint *)(param_2 + iVar3 * 4);\n  local_50 = *(uint *)(param_3 + iVar3 * 4);\n  iVar3 = iVar3 * 4;\n  uVar4 = local_54 | local_50;\n  if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }\n  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);\nLAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_0007ebe0();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "uint local_58;" type_identifier identifier ;) (declaration "uint local_54;" type_identifier identifier ;) (declaration "uint local_50;" type_identifier identifier ;) (declaration "byte bStack_44;" type_identifier identifier ;) (declaration "undefined1 auStack_30 [16];" type_identifier (array_declarator "auStack_30 [16]" identifier [ number_literal ]) ;) (declaration "int local_20;" primitive_type identifier ;) (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) ))))) ;) (expression_statement "iVar3 = param_1 + 0x3fffffff;" (assignment_expression "iVar3 = param_1 + 0x3fffffff" identifier = (binary_expression "param_1 + 0x3fffffff" identifier + number_literal)) ;) (expression_statement "local_54 = *(uint *)(param_2 + iVar3 * 4);" (assignment_expression "local_54 = *(uint *)(param_2 + iVar3 * 4)" identifier = (pointer_expression "*(uint *)(param_2 + iVar3 * 4)" * (cast_expression "(uint *)(param_2 + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + iVar3 * 4)" ( (binary_expression "param_2 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (expression_statement "local_50 = *(uint *)(param_3 + iVar3 * 4);" (assignment_expression "local_50 = *(uint *)(param_3 + iVar3 * 4)" identifier = (pointer_expression "*(uint *)(param_3 + iVar3 * 4)" * (cast_expression "(uint *)(param_3 + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + iVar3 * 4)" ( (binary_expression "param_3 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar3 = iVar3 * 4;" (assignment_expression "iVar3 = iVar3 * 4" identifier = (binary_expression "iVar3 * 4" identifier * number_literal)) ;) (expression_statement "uVar4 = local_54 | local_50;" (assignment_expression "uVar4 = local_54 | local_50" identifier = (binary_expression "local_54 | local_50" identifier | identifier)) ;) (if_statement "if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" if (parenthesized_expression "(param_4 + 1 == param_1)" ( (binary_expression "param_4 + 1 == param_1" (binary_expression "param_4 + 1" identifier + number_literal) == identifier) )) (compound_statement "{\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }" { (if_statement "if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }" if (parenthesized_expression "(3 < uVar4)" ( (binary_expression "3 < uVar4" number_literal < identifier) )) (compound_statement "{\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }" { (expression_statement "local_58 = *(uint *)(param_2 + -4 + iVar3);" (assignment_expression "local_58 = *(uint *)(param_2 + -4 + iVar3)" identifier = (pointer_expression "*(uint *)(param_2 + -4 + iVar3)" * (cast_expression "(uint *)(param_2 + -4 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + -4 + iVar3)" ( (binary_expression "param_2 + -4 + iVar3" (binary_expression "param_2 + -4" identifier + number_literal) + identifier) ))))) ;) (expression_statement "uVar5 = *(uint *)(param_3 + -4 + iVar3);" (assignment_expression "uVar5 = *(uint *)(param_3 + -4 + iVar3)" identifier = (pointer_expression "*(uint *)(param_3 + -4 + iVar3)" * (cast_expression "(uint *)(param_3 + -4 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + -4 + iVar3)" ( (binary_expression "param_3 + -4 + iVar3" (binary_expression "param_3 + -4" identifier + number_literal) + identifier) ))))) ;) (goto_statement "goto LAB_00059261;" goto statement_identifier ;) })) }) (else_clause "else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" else (compound_statement "{\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" { (expression_statement "local_58 = *(uint *)(param_2 + -4 + iVar3);" (assignment_expression "local_58 = *(uint *)(param_2 + -4 + iVar3)" identifier = (pointer_expression "*(uint *)(param_2 + -4 + iVar3)" * (cast_expression "(uint *)(param_2 + -4 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + -4 + iVar3)" ( (binary_expression "param_2 + -4 + iVar3" (binary_expression "param_2 + -4" identifier + number_literal) + identifier) ))))) ;) (expression_statement "uVar5 = *(uint *)(param_3 + -4 + iVar3);" (assignment_expression "uVar5 = *(uint *)(param_3 + -4 + iVar3)" identifier = (pointer_expression "*(uint *)(param_3 + -4 + iVar3)" * (cast_expression "(uint *)(param_3 + -4 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + -4 + iVar3)" ( (binary_expression "param_3 + -4 + iVar3" (binary_expression "param_3 + -4" identifier + number_literal) + identifier) ))))) ;) (if_statement "if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }" if (parenthesized_expression "(-1 < (int)uVar4)" ( (binary_expression "-1 < (int)uVar4" number_literal < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }" { (expression_statement "iVar1 = 0x1f;" (assignment_expression "iVar1 = 0x1f" identifier = number_literal) ;) (if_statement "if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }" { (for_statement "for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }" for ( ; (binary_expression "uVar4 >> iVar1 == 0" (binary_expression "uVar4 >> iVar1" identifier >> identifier) == number_literal) ; (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ) (compound_statement "{\n        }" { })) })) (expression_statement "bVar2 = (byte)iVar1 ^ 0x1f;" (assignment_expression "bVar2 = (byte)iVar1 ^ 0x1f" identifier = (binary_expression "(byte)iVar1 ^ 0x1f" (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier) ^ number_literal)) ;) (expression_statement "bStack_44 = 0x20 - bVar2;" (assignment_expression "bStack_44 = 0x20 - bVar2" identifier = (binary_expression "0x20 - bVar2" number_literal - identifier)) ;) (expression_statement "local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);" (assignment_expression "local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f)" identifier = (binary_expression "local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f)" (binary_expression "local_58 >> (bStack_44 & 0x1f)" identifier >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))) | (binary_expression "local_54 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);" (assignment_expression "local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f)" identifier = (binary_expression "*(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f)" (binary_expression "*(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f)" (pointer_expression "*(uint *)(param_2 + -8 + iVar3)" * (cast_expression "(uint *)(param_2 + -8 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + -8 + iVar3)" ( (binary_expression "param_2 + -8 + iVar3" (binary_expression "param_2 + -8" identifier + number_literal) + identifier) )))) >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))) | (binary_expression "local_58 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);" (assignment_expression "local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f)" identifier = (binary_expression "local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f)" (binary_expression "local_50 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar5 >> (bStack_44 & 0x1f)" identifier >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);" (assignment_expression "uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" identifier = (binary_expression "uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" (binary_expression "uVar5 << (bVar2 & 0x1f)" identifier << (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "*(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" (pointer_expression "*(uint *)(param_3 + -8 + iVar3)" * (cast_expression "(uint *)(param_3 + -8 + iVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + -8 + iVar3)" ( (binary_expression "param_3 + -8 + iVar3" (binary_expression "param_3 + -8" identifier + number_literal) + identifier) )))) >> (parenthesized_expression "(bStack_44 & 0x1f)" ( (binary_expression "bStack_44 & 0x1f" identifier & number_literal) ))))) ;) })) (labeled_statement "LAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);" statement_identifier : (expression_statement "iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);" (assignment_expression "iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30)" identifier = (call_expression "__gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30)" identifier (argument_list "(local_54,local_58,local_50,uVar5,auStack_30)" ( identifier , identifier , identifier , identifier , identifier )))) ;)) (if_statement "if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }" { (expression_statement "__gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);" (call_expression "__gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6)" identifier (argument_list "(param_5,auStack_30,param_6)" ( identifier , identifier , identifier ))) ;) (expression_statement "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);" (call_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0x28)" ( (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0x28" identifier + number_literal) ))))) )) (argument_list "(param_6,param_2,param_1)" ( identifier , identifier , identifier ))) ;) (expression_statement "__gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);" (call_expression "__gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1)" identifier (argument_list "(auStack_30,param_2,param_6,param_3,param_1)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_000592ae;" goto statement_identifier ;) })) }))) (expression_statement "__gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);" (call_expression "__gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6)" identifier (argument_list "(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (labeled_statement "LAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }" statement_identifier : (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\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    return;\n  }" { (return_statement "return;" return ;) }))) (expression_statement "FUN_0007ebe0();" (call_expression "FUN_0007ebe0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) == IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (for_statement for ( ; (binary_expression (binary_expression IDENT >> IDENT) == LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { })) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) ^ LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (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 { (return_statement return ;) }))) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void __gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)\n\n{\n  int iVar1;\n  byte bVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int in_GS_OFFSET;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  byte bStack_44;\n  undefined1 auStack_30 [16];\n  int local_20;\n  \n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  iVar3 = param_1 + 0x3fffffff;\n  local_54 = *(uint *)(param_2 + iVar3 * 4);\n  local_50 = *(uint *)(param_3 + iVar3 * 4);\n  iVar3 = iVar3 * 4;\n  uVar4 = local_54 | local_50;\n  if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }\n  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);\nLAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_0007ebe0();\n}" (primitive_type "void") (function_declarator "__gmpn_hgcd_step(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)" (identifier "__gmpn_hgcd_step") (parameter_list "(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,\n                     undefined4 param_6)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "undefined4 param_5" (type_identifier "undefined4") (identifier "param_5")) (, ",") (parameter_declaration "undefined4 param_6" (type_identifier "undefined4") (identifier "param_6")) () ")"))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int in_GS_OFFSET;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  byte bStack_44;\n  undefined1 auStack_30 [16];\n  int local_20;\n  \n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  iVar3 = param_1 + 0x3fffffff;\n  local_54 = *(uint *)(param_2 + iVar3 * 4);\n  local_50 = *(uint *)(param_3 + iVar3 * 4);\n  iVar3 = iVar3 * 4;\n  uVar4 = local_54 | local_50;\n  if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }\n  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);\nLAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }\n                    \n  FUN_0007ebe0();\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "uint local_58;" (type_identifier "uint") (identifier "local_58") (; ";")) (declaration "uint local_54;" (type_identifier "uint") (identifier "local_54") (; ";")) (declaration "uint local_50;" (type_identifier "uint") (identifier "local_50") (; ";")) (declaration "byte bStack_44;" (type_identifier "byte") (identifier "bStack_44") (; ";")) (declaration "undefined1 auStack_30 [16];" (type_identifier "undefined1") (array_declarator "auStack_30 [16]" (identifier "auStack_30") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (= "=") (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")) () ")"))))) (; ";")) (expression_statement "iVar3 = param_1 + 0x3fffffff;" (assignment_expression "iVar3 = param_1 + 0x3fffffff" (identifier "iVar3") (= "=") (binary_expression "param_1 + 0x3fffffff" (identifier "param_1") (+ "+") (number_literal "0x3fffffff"))) (; ";")) (expression_statement "local_54 = *(uint *)(param_2 + iVar3 * 4);" (assignment_expression "local_54 = *(uint *)(param_2 + iVar3 * 4)" (identifier "local_54") (= "=") (pointer_expression "*(uint *)(param_2 + iVar3 * 4)" (* "*") (cast_expression "(uint *)(param_2 + iVar3 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + iVar3 * 4)" (( "(") (binary_expression "param_2 + iVar3 * 4" (identifier "param_2") (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "local_50 = *(uint *)(param_3 + iVar3 * 4);" (assignment_expression "local_50 = *(uint *)(param_3 + iVar3 * 4)" (identifier "local_50") (= "=") (pointer_expression "*(uint *)(param_3 + iVar3 * 4)" (* "*") (cast_expression "(uint *)(param_3 + iVar3 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + iVar3 * 4)" (( "(") (binary_expression "param_3 + iVar3 * 4" (identifier "param_3") (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "iVar3 = iVar3 * 4;" (assignment_expression "iVar3 = iVar3 * 4" (identifier "iVar3") (= "=") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) (; ";")) (expression_statement "uVar4 = local_54 | local_50;" (assignment_expression "uVar4 = local_54 | local_50" (identifier "uVar4") (= "=") (binary_expression "local_54 | local_50" (identifier "local_54") (| "|") (identifier "local_50"))) (; ";")) (if_statement "if (param_4 + 1 == param_1) {\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }\n  else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" (if "if") (parenthesized_expression "(param_4 + 1 == param_1)" (( "(") (binary_expression "param_4 + 1 == param_1" (binary_expression "param_4 + 1" (identifier "param_4") (+ "+") (number_literal "1")) (== "==") (identifier "param_1")) () ")")) (compound_statement "{\n    if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }\n  }" ({ "{") (if_statement "if (3 < uVar4) {\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }" (if "if") (parenthesized_expression "(3 < uVar4)" (( "(") (binary_expression "3 < uVar4" (number_literal "3") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n      local_58 = *(uint *)(param_2 + -4 + iVar3);\n      uVar5 = *(uint *)(param_3 + -4 + iVar3);\n      goto LAB_00059261;\n    }" ({ "{") (expression_statement "local_58 = *(uint *)(param_2 + -4 + iVar3);" (assignment_expression "local_58 = *(uint *)(param_2 + -4 + iVar3)" (identifier "local_58") (= "=") (pointer_expression "*(uint *)(param_2 + -4 + iVar3)" (* "*") (cast_expression "(uint *)(param_2 + -4 + iVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + -4 + iVar3)" (( "(") (binary_expression "param_2 + -4 + iVar3" (binary_expression "param_2 + -4" (identifier "param_2") (+ "+") (number_literal "-4")) (+ "+") (identifier "iVar3")) () ")"))))) (; ";")) (expression_statement "uVar5 = *(uint *)(param_3 + -4 + iVar3);" (assignment_expression "uVar5 = *(uint *)(param_3 + -4 + iVar3)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(param_3 + -4 + iVar3)" (* "*") (cast_expression "(uint *)(param_3 + -4 + iVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + -4 + iVar3)" (( "(") (binary_expression "param_3 + -4 + iVar3" (binary_expression "param_3 + -4" (identifier "param_3") (+ "+") (number_literal "-4")) (+ "+") (identifier "iVar3")) () ")"))))) (; ";")) (goto_statement "goto LAB_00059261;" (goto "goto") (statement_identifier "LAB_00059261") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" (else "else") (compound_statement "{\n    local_58 = *(uint *)(param_2 + -4 + iVar3);\n    uVar5 = *(uint *)(param_3 + -4 + iVar3);\n    if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }\nLAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);\n    if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }\n  }" ({ "{") (expression_statement "local_58 = *(uint *)(param_2 + -4 + iVar3);" (assignment_expression "local_58 = *(uint *)(param_2 + -4 + iVar3)" (identifier "local_58") (= "=") (pointer_expression "*(uint *)(param_2 + -4 + iVar3)" (* "*") (cast_expression "(uint *)(param_2 + -4 + iVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + -4 + iVar3)" (( "(") (binary_expression "param_2 + -4 + iVar3" (binary_expression "param_2 + -4" (identifier "param_2") (+ "+") (number_literal "-4")) (+ "+") (identifier "iVar3")) () ")"))))) (; ";")) (expression_statement "uVar5 = *(uint *)(param_3 + -4 + iVar3);" (assignment_expression "uVar5 = *(uint *)(param_3 + -4 + iVar3)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(param_3 + -4 + iVar3)" (* "*") (cast_expression "(uint *)(param_3 + -4 + iVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + -4 + iVar3)" (( "(") (binary_expression "param_3 + -4 + iVar3" (binary_expression "param_3 + -4" (identifier "param_3") (+ "+") (number_literal "-4")) (+ "+") (identifier "iVar3")) () ")"))))) (; ";")) (if_statement "if (-1 < (int)uVar4) {\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }" (if "if") (parenthesized_expression "(-1 < (int)uVar4)" (( "(") (binary_expression "-1 < (int)uVar4" (number_literal "-1") (< "<") (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4"))) () ")")) (compound_statement "{\n      iVar1 = 0x1f;\n      if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }\n      bVar2 = (byte)iVar1 ^ 0x1f;\n      bStack_44 = 0x20 - bVar2;\n      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);\n      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);\n      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);\n      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);\n    }" ({ "{") (expression_statement "iVar1 = 0x1f;" (assignment_expression "iVar1 = 0x1f" (identifier "iVar1") (= "=") (number_literal "0x1f")) (; ";")) (if_statement "if (uVar4 != 0) {\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }\n      }" ({ "{") (for_statement "for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {\n        }" (for "for") (( "(") (; ";") (binary_expression "uVar4 >> iVar1 == 0" (binary_expression "uVar4 >> iVar1" (identifier "uVar4") (>> ">>") (identifier "iVar1")) (== "==") (number_literal "0")) (; ";") (assignment_expression "iVar1 = iVar1 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + -1" (identifier "iVar1") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n        }" ({ "{") (} "}"))) (} "}"))) (expression_statement "bVar2 = (byte)iVar1 ^ 0x1f;" (assignment_expression "bVar2 = (byte)iVar1 ^ 0x1f" (identifier "bVar2") (= "=") (binary_expression "(byte)iVar1 ^ 0x1f" (cast_expression "(byte)iVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar1")) (^ "^") (number_literal "0x1f"))) (; ";")) (expression_statement "bStack_44 = 0x20 - bVar2;" (assignment_expression "bStack_44 = 0x20 - bVar2" (identifier "bStack_44") (= "=") (binary_expression "0x20 - bVar2" (number_literal "0x20") (- "-") (identifier "bVar2"))) (; ";")) (expression_statement "local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);" (assignment_expression "local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f)" (identifier "local_54") (= "=") (binary_expression "local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f)" (binary_expression "local_58 >> (bStack_44 & 0x1f)" (identifier "local_58") (>> ">>") (parenthesized_expression "(bStack_44 & 0x1f)" (( "(") (binary_expression "bStack_44 & 0x1f" (identifier "bStack_44") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "local_54 << (bVar2 & 0x1f)" (identifier "local_54") (<< "<<") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);" (assignment_expression "local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f)" (identifier "local_58") (= "=") (binary_expression "*(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f)" (binary_expression "*(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f)" (pointer_expression "*(uint *)(param_2 + -8 + iVar3)" (* "*") (cast_expression "(uint *)(param_2 + -8 + iVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + -8 + iVar3)" (( "(") (binary_expression "param_2 + -8 + iVar3" (binary_expression "param_2 + -8" (identifier "param_2") (+ "+") (number_literal "-8")) (+ "+") (identifier "iVar3")) () ")")))) (>> ">>") (parenthesized_expression "(bStack_44 & 0x1f)" (( "(") (binary_expression "bStack_44 & 0x1f" (identifier "bStack_44") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "local_58 << (bVar2 & 0x1f)" (identifier "local_58") (<< "<<") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);" (assignment_expression "local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f)" (identifier "local_50") (= "=") (binary_expression "local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f)" (binary_expression "local_50 << (bVar2 & 0x1f)" (identifier "local_50") (<< "<<") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "uVar5 >> (bStack_44 & 0x1f)" (identifier "uVar5") (>> ">>") (parenthesized_expression "(bStack_44 & 0x1f)" (( "(") (binary_expression "bStack_44 & 0x1f" (identifier "bStack_44") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);" (assignment_expression "uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" (identifier "uVar5") (= "=") (binary_expression "uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" (binary_expression "uVar5 << (bVar2 & 0x1f)" (identifier "uVar5") (<< "<<") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "*(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f)" (pointer_expression "*(uint *)(param_3 + -8 + iVar3)" (* "*") (cast_expression "(uint *)(param_3 + -8 + iVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + -8 + iVar3)" (( "(") (binary_expression "param_3 + -8 + iVar3" (binary_expression "param_3 + -8" (identifier "param_3") (+ "+") (number_literal "-8")) (+ "+") (identifier "iVar3")) () ")")))) (>> ">>") (parenthesized_expression "(bStack_44 & 0x1f)" (( "(") (binary_expression "bStack_44 & 0x1f" (identifier "bStack_44") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (} "}"))) (labeled_statement "LAB_00059261:\n    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);" (statement_identifier "LAB_00059261") (: ":") (expression_statement "iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);" (assignment_expression "iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30)" (identifier "iVar3") (= "=") (call_expression "__gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30)" (identifier "__gmpn_hgcd2") (argument_list "(local_54,local_58,local_50,uVar5,auStack_30)" (( "(") (identifier "local_54") (, ",") (identifier "local_58") (, ",") (identifier "local_50") (, ",") (identifier "uVar5") (, ",") (identifier "auStack_30") () ")")))) (; ";"))) (if_statement "if (iVar3 != 0) {\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);\n      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);\n      goto LAB_000592ae;\n    }" ({ "{") (expression_statement "__gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);" (call_expression "__gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6)" (identifier "__gmpn_hgcd_matrix_mul_1") (argument_list "(param_5,auStack_30,param_6)" (( "(") (identifier "param_5") (, ",") (identifier "auStack_30") (, ",") (identifier "param_6") () ")"))) (; ";")) (expression_statement "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);" (call_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))" (( "(") (pointer_expression "**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" (* "*") (pointer_expression "*(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" (* "*") (cast_expression "(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0x28)" (( "(") (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0x28" (identifier "PTR___gmpn_cpuvec_0009dd94") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(param_6,param_2,param_1)" (( "(") (identifier "param_6") (, ",") (identifier "param_2") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "__gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);" (call_expression "__gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1)" (identifier "__gmpn_matrix22_mul1_inverse_vector") (argument_list "(auStack_30,param_2,param_6,param_3,param_1)" (( "(") (identifier "auStack_30") (, ",") (identifier "param_2") (, ",") (identifier "param_6") (, ",") (identifier "param_3") (, ",") (identifier "param_1") () ")"))) (; ";")) (goto_statement "goto LAB_000592ae;" (goto "goto") (statement_identifier "LAB_000592ae") (; ";")) (} "}"))) (} "}")))) (expression_statement "__gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);" (call_expression "__gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6)" (identifier "__gmpn_gcd_subdiv_step") (argument_list "(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_1") (, ",") (identifier "param_4") (, ",") (identifier "FUN_00059110") (, ",") (identifier "param_5") (, ",") (identifier "param_6") () ")"))) (; ";")) (labeled_statement "LAB_000592ae:\n  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }" (statement_identifier "LAB_000592ae") (: ":") (if_statement "if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {\n    return;\n  }" (if "if") (parenthesized_expression "(local_20 == *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "local_20 == *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (== "==") (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    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}")))) (expression_statement "FUN_0007ebe0();" (call_expression "FUN_0007ebe0()" (identifier "FUN_0007ebe0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention */

type_1 function_1(type_1 var_2,type_2 ap,type_2 bp,type_1 var_5,type_3 *M,type_2 tp)

{
  int var_17;
  type_4 var_8;
  type_5 var_6;
  int var_7;
  type_1 mVar5;
  type_5 var_11;
  int var_1;
  type_6 var_9;
  type_6 var_3;
  type_6 var_4;
  type_4 var_10;
  type_7 M1;
  
  var_17 = *(int *)(var_1 + 0x14);
  var_3 = ap[var_2 + 0x3fffffff];
  var_4 = bp[var_2 + 0x3fffffff];
  var_6 = var_3 | var_4;
  if (var_5 + 1 == var_2) {
    if (3 < var_6) {
      var_9 = ap[var_2 + 0x3ffffffe];
      var_11 = bp[var_2 + 0x3ffffffe];
      goto LAB_00059261;
    }
  }
  else {
    var_9 = ap[var_2 + 0x3ffffffe];
    var_11 = bp[var_2 + 0x3ffffffe];
    if (-1 < (int)var_6) {
      var_7 = 0x1f;
      if (var_6 != 0) {
        for (; var_6 >> var_7 == 0; var_7 = var_7 + -1) {
        }
      }
      var_8 = (type_4)var_7 ^ 0x1f;
      var_10 = 0x20 - var_8;
      var_3 = var_9 >> (var_10 & 0x1f) | var_3 << (var_8 & 0x1f);
      var_9 = ap[var_2 + 0x3ffffffd] >> (var_10 & 0x1f) | var_9 << (var_8 & 0x1f);
      var_4 = var_4 << (var_8 & 0x1f) | var_11 >> (var_10 & 0x1f);
      var_11 = var_11 << (var_8 & 0x1f) | bp[var_2 + 0x3ffffffd] >> (var_10 & 0x1f);
    }
LAB_00059261:
    var_7 = var_12(var_3,var_9,var_4,var_11,&M1);
    if (var_7 != 0) {
      var_13(M,&M1,tp);
      (**(type_8 **)(var_14 + 0x28))(tp,ap,var_2);
      mVar5 = var_15(&M1,ap,tp,bp,var_2);
      goto LAB_000592ae;
    }
  }
  mVar5 = var_16(ap,bp,var_2,var_5,hgcd_hook,M,tp);
LAB_000592ae:
  if (var_17 == *(int *)(var_1 + 0x14)) {
    return mVar5;
  }
                    /* WARNING: Subroutine does not return */
  var_18();
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (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))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))))) (goto_statement label: (statement_identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (for_statement condition: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (number_literal) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier)))) (goto_statement label: (statement_identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier) (identifier)))) (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 (return_statement)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))))

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void MASKED(int param_1,int param_2,int param_3,int param_4,undefined4 param_5,
                     undefined4 param_6)

{
  int iVar1;
  byte bVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int in_GS_OFFSET;
  uint local_58;
  uint local_54;
  uint local_50;
  byte bStack_44;
  undefined1 auStack_30 [16];
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  iVar3 = param_1 + 0x3fffffff;
  local_54 = *(uint *)(param_2 + iVar3 * 4);
  local_50 = *(uint *)(param_3 + iVar3 * 4);
  iVar3 = iVar3 * 4;
  uVar4 = local_54 | local_50;
  if (param_4 + 1 == param_1) {
    if (3 < uVar4) {
      local_58 = *(uint *)(param_2 + -4 + iVar3);
      uVar5 = *(uint *)(param_3 + -4 + iVar3);
      goto LAB_00059261;
    }
  }
  else {
    local_58 = *(uint *)(param_2 + -4 + iVar3);
    uVar5 = *(uint *)(param_3 + -4 + iVar3);
    if (-1 < (int)uVar4) {
      iVar1 = 0x1f;
      if (uVar4 != 0) {
        for (; uVar4 >> iVar1 == 0; iVar1 = iVar1 + -1) {
        }
      }
      bVar2 = (byte)iVar1 ^ 0x1f;
      bStack_44 = 0x20 - bVar2;
      local_54 = local_58 >> (bStack_44 & 0x1f) | local_54 << (bVar2 & 0x1f);
      local_58 = *(uint *)(param_2 + -8 + iVar3) >> (bStack_44 & 0x1f) | local_58 << (bVar2 & 0x1f);
      local_50 = local_50 << (bVar2 & 0x1f) | uVar5 >> (bStack_44 & 0x1f);
      uVar5 = uVar5 << (bVar2 & 0x1f) | *(uint *)(param_3 + -8 + iVar3) >> (bStack_44 & 0x1f);
    }
LAB_00059261:
    iVar3 = __gmpn_hgcd2(local_54,local_58,local_50,uVar5,auStack_30);
    if (iVar3 != 0) {
      __gmpn_hgcd_matrix_mul_1(param_5,auStack_30,param_6);
      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x28))(param_6,param_2,param_1);
      __gmpn_matrix22_mul1_inverse_vector(auStack_30,param_2,param_6,param_3,param_1);
      goto LAB_000592ae;
    }
  }
  __gmpn_gcd_subdiv_step(param_2,param_3,param_1,param_4,FUN_00059110,param_5,param_6);
LAB_000592ae:
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0007ebe0();
}

