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

int __gmpz_kronecker_ui(mpz_srcptr a,ulong b)

{
  uint uVar1;
  uint *puVar2;
  uint uVar3;
  mp_limb_t a_00;
  int iVar4;
  uint uVar5;
  
  uVar1 = a->_mp_size;
  if (uVar1 == 0) {
    return (uint)(b == 1);
  }
  puVar2 = a->_mp_d;
  if ((b & 1) == 0) {
    uVar5 = *puVar2;
    if (b == 0) {
      return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);
    }
    if ((uVar5 & 1) == 0) {
      return 0;
    }
    iVar4 = 0;
    for (uVar3 = b; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {
      iVar4 = iVar4 + 1;
    }
    b = b >> ((byte)iVar4 & 0x1f);
    uVar5 = (uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2;
  }
  else {
    uVar5 = (int)uVar1 >> 0x1e & b & 2;
  }
  if (b == 1) {
    iVar4 = 1 - (uVar5 & 2);
  }
  else {
    iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);
    if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {
      __gmpn_cpuvec_init();
    }
    if (iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)) {
      uVar5 = uVar5 ^ b;
      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);
    }
    else {
      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);
    }
    iVar4 = __gmpn_jacobi_base(a_00,b,uVar5);
  }
  return iVar4;
}



uint __regparm2 __gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)

{
  uint *puVar1;
  int iVar2;
  uint uVar3;
  undefined4 uVar4;
  uint uVar5;
  int iVar6;
  int unaff_EBX;
  uint uVar7;
  int unaff_retaddr;
  
  entry(param_2,0x2cb59);
  uVar5 = *(uint *)(unaff_retaddr + 4);
  if (uVar5 == 0) {
    return (uint)(param_3 == 1);
  }
  puVar1 = *(uint **)(unaff_retaddr + 8);
  if ((param_3 & 1) == 0) {
    uVar7 = *puVar1;
    if (param_3 == 0) {
      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);
    }
    if ((uVar7 & 1) == 0) {
      return 0;
    }
    iVar6 = 0;
    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {
      iVar6 = iVar6 + 1;
    }
    param_3 = param_3 >> ((byte)iVar6 & 0x1f);
    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;
  }
  else {
    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;
  }
  if (param_3 == 1) {
    uVar5 = 1 - (uVar7 & 2);
  }
  else {
    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);
    if (**(int **)(unaff_EBX + 0x711ff) == 0) {
      __gmpn_cpuvec_init();
    }
    iVar2 = *(int *)(unaff_EBX + 0x7123b);
    if (iVar6 < *(int *)(iVar2 + 0xa4)) {
      uVar7 = uVar7 ^ param_3;
      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);
    }
    else {
      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);
    }
    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);
  }
  return uVar5;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x0001c340
ADD EBX,0x714a7
SUB ESP,0x1c
MOV EAX,dword ptr [ESP + 0x30]
MOV ESI,dword ptr [ESP + 0x34]
MOV EDX,dword ptr [EAX + 0x4]
TEST EDX,EDX
JZ 0x0002cc18
MOV EBP,dword ptr [EAX + 0x8]
TEST ESI,0x1
JZ 0x0002cbe0
MOV EDI,EDX
SAR EDI,0x1e
AND EDI,ESI
AND EDI,0x2
CMP ESI,0x1
JZ 0x0002cc60
MOV EAX,EDX
SAR EAX,0x1f
XOR EDX,EAX
SUB EDX,EAX
MOV EAX,dword ptr [EBX + 0xfffffd58]
MOV EAX,dword ptr [EAX]
TEST EAX,EAX
JZ 0x0002cc70
MOV EAX,dword ptr [EBX + 0xfffffd94]
CMP dword ptr [EAX + 0xa4],EDX
JLE 0x0002cc30
PUSH 0x0
XOR EDI,ESI
PUSH ESI
PUSH EDX
PUSH EBP
CALL dword ptr [EAX + 0x60]
ADD ESP,0x10
SUB ESP,0x4
PUSH EDI
PUSH ESI
PUSH EAX
CALL 0x0001b790
ADD ESP,0x10
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDI,dword ptr [EBP]
TEST ESI,ESI
JZ 0x0002cc40
XOR EAX,EAX
TEST EDI,0x1
JZ 0x0002cbd5
MOV EAX,EDI
XOR ECX,ECX
SHR EAX,0x1
TZCNT ECX,ESI
XOR EDI,EAX
MOV EAX,EDX
SHR ESI,CL
ADD ECX,ECX
SAR EAX,0x1e
AND EDI,ECX
AND EAX,ESI
AND EAX,0x2
XOR EDI,EAX
JMP 0x0002cb8a
XOR EAX,EAX
CMP ESI,0x1
SETZ AL
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
PUSH ESI
PUSH EDX
PUSH EBP
CALL dword ptr [EAX + 0x40]
ADD ESP,0x10
JMP 0x0002cbc7
ADD EDX,0x1
AND EDX,0xfffffffd
SETZ DL
XOR EAX,EAX
CMP EDI,0x1
SETZ AL
ADD ESP,0x1c
POP EBX
AND EAX,EDX
POP ESI
POP EDI
POP EBP
RET
AND EDI,0x2
MOV EAX,ESI
SUB EAX,EDI
JMP 0x0002cbd5
MOV dword ptr [ESP + 0xc],EDX
CALL 0x0001b700
MOV EDX,dword ptr [ESP + 0xc]
JMP 0x0002cbac
(translation_unit "uint __regparm2 __gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)\n\n{\n  uint *puVar1;\n  int iVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  uint uVar5;\n  int iVar6;\n  int unaff_EBX;\n  uint uVar7;\n  int unaff_retaddr;\n  \n  entry(param_2,0x2cb59);\n  uVar5 = *(uint *)(unaff_retaddr + 4);\n  if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }\n  puVar1 = *(uint **)(unaff_retaddr + 8);\n  if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }\n  return uVar5;\n}\n\n" (function_definition "uint __regparm2 __gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)\n\n{\n  uint *puVar1;\n  int iVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  uint uVar5;\n  int iVar6;\n  int unaff_EBX;\n  uint uVar7;\n  int unaff_retaddr;\n  \n  entry(param_2,0x2cb59);\n  uVar5 = *(uint *)(unaff_retaddr + 4);\n  if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }\n  puVar1 = *(uint **)(unaff_retaddr + 8);\n  if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }\n  return uVar5;\n}" type_identifier (ERROR "__regparm2" identifier) (function_declarator "__gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2,uint param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  int iVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  uint uVar5;\n  int iVar6;\n  int unaff_EBX;\n  uint uVar7;\n  int unaff_retaddr;\n  \n  entry(param_2,0x2cb59);\n  uVar5 = *(uint *)(unaff_retaddr + 4);\n  if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }\n  puVar1 = *(uint **)(unaff_retaddr + 8);\n  if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }\n  return uVar5;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int unaff_EBX;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "int unaff_retaddr;" primitive_type identifier ;) (expression_statement "entry(param_2,0x2cb59);" (call_expression "entry(param_2,0x2cb59)" identifier (argument_list "(param_2,0x2cb59)" ( identifier , number_literal ))) ;) (expression_statement "uVar5 = *(uint *)(unaff_retaddr + 4);" (assignment_expression "uVar5 = *(uint *)(unaff_retaddr + 4)" identifier = (pointer_expression "*(uint *)(unaff_retaddr + 4)" * (cast_expression "(uint *)(unaff_retaddr + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_retaddr + 4)" ( (binary_expression "unaff_retaddr + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    return (uint)(param_3 == 1);\n  }" { (return_statement "return (uint)(param_3 == 1);" return (call_expression "(uint)(param_3 == 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) ))) ;) })) (expression_statement "puVar1 = *(uint **)(unaff_retaddr + 8);" (assignment_expression "puVar1 = *(uint **)(unaff_retaddr + 8)" identifier = (pointer_expression "*(uint **)(unaff_retaddr + 8)" * (cast_expression "(uint **)(unaff_retaddr + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_retaddr + 8)" ( (binary_expression "unaff_retaddr + 8" identifier + number_literal) ))))) ;) (if_statement "if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }" { (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (if_statement "if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }" { (return_statement "return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);" return (call_expression "(uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0)" ( (binary_expression "uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0" (binary_expression "uVar7 == 1" identifier == number_literal) && (binary_expression "(uVar5 + 1 & 0xfffffffd) == 0" (parenthesized_expression "(uVar5 + 1 & 0xfffffffd)" ( (binary_expression "uVar5 + 1 & 0xfffffffd" (binary_expression "uVar5 + 1" identifier + number_literal) & number_literal) )) == number_literal)) ))) ;) })) (if_statement "if ((uVar7 & 1) == 0) {\n      return 0;\n    }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (for_statement "for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }" for ( (assignment_expression "uVar3 = param_3" identifier = identifier) ; (binary_expression "(uVar3 & 1) == 0" (parenthesized_expression "(uVar3 & 1)" ( (binary_expression "uVar3 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar3 = uVar3 >> 1 | 0x80000000" identifier = (binary_expression "uVar3 >> 1 | 0x80000000" (binary_expression "uVar3 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      iVar6 = iVar6 + 1;\n    }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) })) (expression_statement "param_3 = param_3 >> ((byte)iVar6 & 0x1f);" (assignment_expression "param_3 = param_3 >> ((byte)iVar6 & 0x1f)" identifier = (binary_expression "param_3 >> ((byte)iVar6 & 0x1f)" identifier >> (parenthesized_expression "((byte)iVar6 & 0x1f)" ( (binary_expression "(byte)iVar6 & 0x1f" (cast_expression "(byte)iVar6" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;" (assignment_expression "uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2" identifier = (binary_expression "(uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(uVar7 ^ uVar7 >> 1) & iVar6 * 2" (parenthesized_expression "(uVar7 ^ uVar7 >> 1)" ( (binary_expression "uVar7 ^ uVar7 >> 1" identifier ^ (binary_expression "uVar7 >> 1" identifier >> number_literal)) )) & (binary_expression "iVar6 * 2" identifier * number_literal)) ^ (binary_expression "(int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(int)uVar5 >> 0x1e & param_3" (binary_expression "(int)uVar5 >> 0x1e" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal))) ;) }) (else_clause "else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" else (compound_statement "{\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" { (expression_statement "uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;" (assignment_expression "uVar7 = (int)uVar5 >> 0x1e & param_3 & 2" identifier = (binary_expression "(int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(int)uVar5 >> 0x1e & param_3" (binary_expression "(int)uVar5 >> 0x1e" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal)) ;) }))) (if_statement "if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar5 = 1 - (uVar7 & 2);\n  }" { (expression_statement "uVar5 = 1 - (uVar7 & 2);" (assignment_expression "uVar5 = 1 - (uVar7 & 2)" identifier = (binary_expression "1 - (uVar7 & 2)" number_literal - (parenthesized_expression "(uVar7 & 2)" ( (binary_expression "uVar7 & 2" identifier & number_literal) )))) ;) }) (else_clause "else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" else (compound_statement "{\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" { (expression_statement "iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);" (assignment_expression "iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)" identifier = (binary_expression "(uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)" (parenthesized_expression "(uVar5 ^ (int)uVar5 >> 0x1f)" ( (binary_expression "uVar5 ^ (int)uVar5 >> 0x1f" identifier ^ (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar5 >> 0x1f)" ( (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }" if (parenthesized_expression "(**(int **)(unaff_EBX + 0x711ff) == 0)" ( (binary_expression "**(int **)(unaff_EBX + 0x711ff) == 0" (pointer_expression "**(int **)(unaff_EBX + 0x711ff)" * (pointer_expression "*(int **)(unaff_EBX + 0x711ff)" * (cast_expression "(int **)(unaff_EBX + 0x711ff)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EBX + 0x711ff)" ( (binary_expression "unaff_EBX + 0x711ff" identifier + number_literal) ))))) == number_literal) )) (compound_statement "{\n      __gmpn_cpuvec_init();\n    }" { (expression_statement "__gmpn_cpuvec_init();" (call_expression "__gmpn_cpuvec_init()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar2 = *(int *)(unaff_EBX + 0x7123b);" (assignment_expression "iVar2 = *(int *)(unaff_EBX + 0x7123b)" identifier = (pointer_expression "*(int *)(unaff_EBX + 0x7123b)" * (cast_expression "(int *)(unaff_EBX + 0x7123b)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBX + 0x7123b)" ( (binary_expression "unaff_EBX + 0x7123b" identifier + number_literal) ))))) ;) (if_statement "if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" if (parenthesized_expression "(iVar6 < *(int *)(iVar2 + 0xa4))" ( (binary_expression "iVar6 < *(int *)(iVar2 + 0xa4)" identifier < (pointer_expression "*(int *)(iVar2 + 0xa4)" * (cast_expression "(int *)(iVar2 + 0xa4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0xa4)" ( (binary_expression "iVar2 + 0xa4" identifier + number_literal) ))))) )) (compound_statement "{\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }" { (expression_statement "uVar7 = uVar7 ^ param_3;" (assignment_expression "uVar7 = uVar7 ^ param_3" identifier = (binary_expression "uVar7 ^ param_3" identifier ^ identifier)) ;) (expression_statement "uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);" (assignment_expression "uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0)" identifier = (call_expression "(**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0)" (parenthesized_expression "(**(code **)(iVar2 + 0x60))" ( (pointer_expression "**(code **)(iVar2 + 0x60)" * (pointer_expression "*(code **)(iVar2 + 0x60)" * (cast_expression "(code **)(iVar2 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x60)" ( (binary_expression "iVar2 + 0x60" identifier + number_literal) ))))) )) (argument_list "(puVar1,iVar6,param_3,0)" ( identifier , identifier , identifier , number_literal )))) ;) }) (else_clause "else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" else (compound_statement "{\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" { (expression_statement "uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);" (assignment_expression "uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3)" identifier = (call_expression "(**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3)" (parenthesized_expression "(**(code **)(iVar2 + 0x40))" ( (pointer_expression "**(code **)(iVar2 + 0x40)" * (pointer_expression "*(code **)(iVar2 + 0x40)" * (cast_expression "(code **)(iVar2 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x40)" ( (binary_expression "iVar2 + 0x40" identifier + number_literal) ))))) )) (argument_list "(puVar1,iVar6,param_3)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);" (assignment_expression "uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7)" identifier = (call_expression "__gmpn_jacobi_base(uVar4,param_3,uVar7)" identifier (argument_list "(uVar4,param_3,uVar7)" ( identifier , identifier , identifier )))) ;) }))) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint __gmpz_kronecker_ui(mpz_srcptr a,ulong b)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  mp_limb_t a_00;\n  int iVar4;\n  uint uVar5;\n  \n  uVar1 = a->_mp_size;\n  if (uVar1 == 0) {\n    return (uint)(b == 1);\n  }\n  puVar2 = a->_mp_d;\n  if ((b & 1) == 0) {\n    uVar5 = *puVar2;\n    if (b == 0) {\n      return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar5 & 1) == 0) {\n      return 0;\n    }\n    iVar4 = 0;\n    for (uVar3 = b; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar4 = iVar4 + 1;\n    }\n    b = b >> ((byte)iVar4 & 0x1f);\n    uVar5 = (uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2;\n  }\n  else {\n    uVar5 = (int)uVar1 >> 0x1e & b & 2;\n  }\n  if (b == 1) {\n    iVar4 = 1 - (uVar5 & 2);\n  }\n  else {\n    iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)) {\n      uVar5 = uVar5 ^ b;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }\n    iVar4 = __gmpn_jacobi_base(a_00,b,uVar5);\n  }\n  return iVar4;\n}\n\n" comment (function_definition "int __gmpz_kronecker_ui(mpz_srcptr a,ulong b)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  mp_limb_t a_00;\n  int iVar4;\n  uint uVar5;\n  \n  uVar1 = a->_mp_size;\n  if (uVar1 == 0) {\n    return (uint)(b == 1);\n  }\n  puVar2 = a->_mp_d;\n  if ((b & 1) == 0) {\n    uVar5 = *puVar2;\n    if (b == 0) {\n      return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar5 & 1) == 0) {\n      return 0;\n    }\n    iVar4 = 0;\n    for (uVar3 = b; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar4 = iVar4 + 1;\n    }\n    b = b >> ((byte)iVar4 & 0x1f);\n    uVar5 = (uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2;\n  }\n  else {\n    uVar5 = (int)uVar1 >> 0x1e & b & 2;\n  }\n  if (b == 1) {\n    iVar4 = 1 - (uVar5 & 2);\n  }\n  else {\n    iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)) {\n      uVar5 = uVar5 ^ b;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }\n    iVar4 = __gmpn_jacobi_base(a_00,b,uVar5);\n  }\n  return iVar4;\n}" primitive_type (function_declarator "__gmpz_kronecker_ui(mpz_srcptr a,ulong b)" identifier (parameter_list "(mpz_srcptr a,ulong b)" ( (parameter_declaration "mpz_srcptr a" type_identifier identifier) , (parameter_declaration "ulong b" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  mp_limb_t a_00;\n  int iVar4;\n  uint uVar5;\n  \n  uVar1 = a->_mp_size;\n  if (uVar1 == 0) {\n    return (uint)(b == 1);\n  }\n  puVar2 = a->_mp_d;\n  if ((b & 1) == 0) {\n    uVar5 = *puVar2;\n    if (b == 0) {\n      return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar5 & 1) == 0) {\n      return 0;\n    }\n    iVar4 = 0;\n    for (uVar3 = b; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar4 = iVar4 + 1;\n    }\n    b = b >> ((byte)iVar4 & 0x1f);\n    uVar5 = (uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2;\n  }\n  else {\n    uVar5 = (int)uVar1 >> 0x1e & b & 2;\n  }\n  if (b == 1) {\n    iVar4 = 1 - (uVar5 & 2);\n  }\n  else {\n    iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)) {\n      uVar5 = uVar5 ^ b;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }\n    iVar4 = __gmpn_jacobi_base(a_00,b,uVar5);\n  }\n  return iVar4;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "mp_limb_t a_00;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (expression_statement "uVar1 = a->_mp_size;" (assignment_expression "uVar1 = a->_mp_size" identifier = (field_expression "a->_mp_size" identifier -> field_identifier)) ;) (if_statement "if (uVar1 == 0) {\n    return (uint)(b == 1);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return (uint)(b == 1);\n  }" { (return_statement "return (uint)(b == 1);" return (call_expression "(uint)(b == 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(b == 1)" ( (binary_expression "b == 1" identifier == number_literal) ))) ;) })) (expression_statement "puVar2 = a->_mp_d;" (assignment_expression "puVar2 = a->_mp_d" identifier = (field_expression "a->_mp_d" identifier -> field_identifier)) ;) (if_statement "if ((b & 1) == 0) {\n    uVar5 = *puVar2;\n    if (b == 0) {\n      return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar5 & 1) == 0) {\n      return 0;\n    }\n    iVar4 = 0;\n    for (uVar3 = b; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar4 = iVar4 + 1;\n    }\n    b = b >> ((byte)iVar4 & 0x1f);\n    uVar5 = (uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2;\n  }\n  else {\n    uVar5 = (int)uVar1 >> 0x1e & b & 2;\n  }" if (parenthesized_expression "((b & 1) == 0)" ( (binary_expression "(b & 1) == 0" (parenthesized_expression "(b & 1)" ( (binary_expression "b & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar5 = *puVar2;\n    if (b == 0) {\n      return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar5 & 1) == 0) {\n      return 0;\n    }\n    iVar4 = 0;\n    for (uVar3 = b; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar4 = iVar4 + 1;\n    }\n    b = b >> ((byte)iVar4 & 0x1f);\n    uVar5 = (uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2;\n  }" { (expression_statement "uVar5 = *puVar2;" (assignment_expression "uVar5 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (if_statement "if (b == 0) {\n      return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);\n    }" if (parenthesized_expression "(b == 0)" ( (binary_expression "b == 0" identifier == number_literal) )) (compound_statement "{\n      return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);\n    }" { (return_statement "return (uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0);" return (call_expression "(uint)(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0)" ( (binary_expression "uVar5 == 1 && (uVar1 + 1 & 0xfffffffd) == 0" (binary_expression "uVar5 == 1" identifier == number_literal) && (binary_expression "(uVar1 + 1 & 0xfffffffd) == 0" (parenthesized_expression "(uVar1 + 1 & 0xfffffffd)" ( (binary_expression "uVar1 + 1 & 0xfffffffd" (binary_expression "uVar1 + 1" identifier + number_literal) & number_literal) )) == number_literal)) ))) ;) })) (if_statement "if ((uVar5 & 1) == 0) {\n      return 0;\n    }" if (parenthesized_expression "((uVar5 & 1) == 0)" ( (binary_expression "(uVar5 & 1) == 0" (parenthesized_expression "(uVar5 & 1)" ( (binary_expression "uVar5 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (for_statement "for (uVar3 = b; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar4 = iVar4 + 1;\n    }" for ( (assignment_expression "uVar3 = b" identifier = identifier) ; (binary_expression "(uVar3 & 1) == 0" (parenthesized_expression "(uVar3 & 1)" ( (binary_expression "uVar3 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar3 = uVar3 >> 1 | 0x80000000" identifier = (binary_expression "uVar3 >> 1 | 0x80000000" (binary_expression "uVar3 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      iVar4 = iVar4 + 1;\n    }" { (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) })) (expression_statement "b = b >> ((byte)iVar4 & 0x1f);" (assignment_expression "b = b >> ((byte)iVar4 & 0x1f)" identifier = (binary_expression "b >> ((byte)iVar4 & 0x1f)" identifier >> (parenthesized_expression "((byte)iVar4 & 0x1f)" ( (binary_expression "(byte)iVar4 & 0x1f" (cast_expression "(byte)iVar4" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar5 = (uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2;" (assignment_expression "uVar5 = (uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2" identifier = (binary_expression "(uVar5 ^ uVar5 >> 1) & iVar4 * 2 ^ (int)uVar1 >> 0x1e & b & 2" (binary_expression "(uVar5 ^ uVar5 >> 1) & iVar4 * 2" (parenthesized_expression "(uVar5 ^ uVar5 >> 1)" ( (binary_expression "uVar5 ^ uVar5 >> 1" identifier ^ (binary_expression "uVar5 >> 1" identifier >> number_literal)) )) & (binary_expression "iVar4 * 2" identifier * number_literal)) ^ (binary_expression "(int)uVar1 >> 0x1e & b & 2" (binary_expression "(int)uVar1 >> 0x1e & b" (binary_expression "(int)uVar1 >> 0x1e" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal))) ;) }) (else_clause "else {\n    uVar5 = (int)uVar1 >> 0x1e & b & 2;\n  }" else (compound_statement "{\n    uVar5 = (int)uVar1 >> 0x1e & b & 2;\n  }" { (expression_statement "uVar5 = (int)uVar1 >> 0x1e & b & 2;" (assignment_expression "uVar5 = (int)uVar1 >> 0x1e & b & 2" identifier = (binary_expression "(int)uVar1 >> 0x1e & b & 2" (binary_expression "(int)uVar1 >> 0x1e & b" (binary_expression "(int)uVar1 >> 0x1e" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal)) ;) }))) (if_statement "if (b == 1) {\n    iVar4 = 1 - (uVar5 & 2);\n  }\n  else {\n    iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)) {\n      uVar5 = uVar5 ^ b;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }\n    iVar4 = __gmpn_jacobi_base(a_00,b,uVar5);\n  }" if (parenthesized_expression "(b == 1)" ( (binary_expression "b == 1" identifier == number_literal) )) (compound_statement "{\n    iVar4 = 1 - (uVar5 & 2);\n  }" { (expression_statement "iVar4 = 1 - (uVar5 & 2);" (assignment_expression "iVar4 = 1 - (uVar5 & 2)" identifier = (binary_expression "1 - (uVar5 & 2)" number_literal - (parenthesized_expression "(uVar5 & 2)" ( (binary_expression "uVar5 & 2" identifier & number_literal) )))) ;) }) (else_clause "else {\n    iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)) {\n      uVar5 = uVar5 ^ b;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }\n    iVar4 = __gmpn_jacobi_base(a_00,b,uVar5);\n  }" else (compound_statement "{\n    iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n    if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)) {\n      uVar5 = uVar5 ^ b;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }\n    iVar4 = __gmpn_jacobi_base(a_00,b,uVar5);\n  }" { (expression_statement "iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);" (assignment_expression "iVar4 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" identifier = (binary_expression "(uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" (parenthesized_expression "(uVar1 ^ (int)uVar1 >> 0x1f)" ( (binary_expression "uVar1 ^ (int)uVar1 >> 0x1f" identifier ^ (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar1 >> 0x1f)" ( (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {\n      __gmpn_cpuvec_init();\n    }" if (parenthesized_expression "(*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0)" ( (binary_expression "*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0" (pointer_expression "*(int *)PTR___gmpn_cpuvec_initialized_0009dd58" * (cast_expression "(int *)PTR___gmpn_cpuvec_initialized_0009dd58" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (compound_statement "{\n      __gmpn_cpuvec_init();\n    }" { (expression_statement "__gmpn_cpuvec_init();" (call_expression "__gmpn_cpuvec_init()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if (iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)) {\n      uVar5 = uVar5 ^ b;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }" if (parenthesized_expression "(iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4))" ( (binary_expression "iVar4 < *(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)" identifier < (pointer_expression "*(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)" * (cast_expression "(int *)(PTR___gmpn_cpuvec_0009dd94 + 0xa4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0xa4)" ( (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0xa4" identifier + number_literal) ))))) )) (compound_statement "{\n      uVar5 = uVar5 ^ b;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);\n    }" { (expression_statement "uVar5 = uVar5 ^ b;" (assignment_expression "uVar5 = uVar5 ^ b" identifier = (binary_expression "uVar5 ^ b" identifier ^ identifier)) ;) (expression_statement "a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0);" (assignment_expression "a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0)" identifier = (call_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))(puVar2,iVar4,b,0)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0x60)" ( (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0x60" identifier + number_literal) ))))) )) (argument_list "(puVar2,iVar4,b,0)" ( identifier , identifier , identifier , number_literal )))) ;) }) (else_clause "else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }" else (compound_statement "{\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);\n    }" { (expression_statement "a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b);" (assignment_expression "a_00 = (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b)" identifier = (call_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))(puVar2,iVar4,b)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0x40)" ( (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0x40" identifier + number_literal) ))))) )) (argument_list "(puVar2,iVar4,b)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "iVar4 = __gmpn_jacobi_base(a_00,b,uVar5);" (assignment_expression "iVar4 = __gmpn_jacobi_base(a_00,b,uVar5)" identifier = (call_expression "__gmpn_jacobi_base(a_00,b,uVar5)" identifier (argument_list "(a_00,b,uVar5)" ( identifier , identifier , identifier )))) ;) }))) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit "uint __regparm2 __gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)\n\n{\n  uint *puVar1;\n  int iVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  uint uVar5;\n  int iVar6;\n  int unaff_EBX;\n  uint uVar7;\n  int unaff_retaddr;\n  \n  entry(param_2,0x2cb59);\n  uVar5 = *(uint *)(unaff_retaddr + 4);\n  if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }\n  puVar1 = *(uint **)(unaff_retaddr + 8);\n  if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }\n  return uVar5;\n}\n\n" (function_definition "uint __regparm2 __gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)\n\n{\n  uint *puVar1;\n  int iVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  uint uVar5;\n  int iVar6;\n  int unaff_EBX;\n  uint uVar7;\n  int unaff_retaddr;\n  \n  entry(param_2,0x2cb59);\n  uVar5 = *(uint *)(unaff_retaddr + 4);\n  if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }\n  puVar1 = *(uint **)(unaff_retaddr + 8);\n  if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }\n  return uVar5;\n}" type_identifier (ERROR "__regparm2" identifier) (function_declarator "__gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2,uint param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  int iVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  uint uVar5;\n  int iVar6;\n  int unaff_EBX;\n  uint uVar7;\n  int unaff_retaddr;\n  \n  entry(param_2,0x2cb59);\n  uVar5 = *(uint *)(unaff_retaddr + 4);\n  if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }\n  puVar1 = *(uint **)(unaff_retaddr + 8);\n  if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }\n  return uVar5;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int unaff_EBX;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "int unaff_retaddr;" primitive_type identifier ;) (expression_statement "entry(param_2,0x2cb59);" (call_expression "entry(param_2,0x2cb59)" identifier (argument_list "(param_2,0x2cb59)" ( identifier , number_literal ))) ;) (expression_statement "uVar5 = *(uint *)(unaff_retaddr + 4);" (assignment_expression "uVar5 = *(uint *)(unaff_retaddr + 4)" identifier = (pointer_expression "*(uint *)(unaff_retaddr + 4)" * (cast_expression "(uint *)(unaff_retaddr + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_retaddr + 4)" ( (binary_expression "unaff_retaddr + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    return (uint)(param_3 == 1);\n  }" { (return_statement "return (uint)(param_3 == 1);" return (call_expression "(uint)(param_3 == 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) ))) ;) })) (expression_statement "puVar1 = *(uint **)(unaff_retaddr + 8);" (assignment_expression "puVar1 = *(uint **)(unaff_retaddr + 8)" identifier = (pointer_expression "*(uint **)(unaff_retaddr + 8)" * (cast_expression "(uint **)(unaff_retaddr + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_retaddr + 8)" ( (binary_expression "unaff_retaddr + 8" identifier + number_literal) ))))) ;) (if_statement "if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }" { (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (if_statement "if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }" { (return_statement "return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);" return (call_expression "(uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0)" ( (binary_expression "uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0" (binary_expression "uVar7 == 1" identifier == number_literal) && (binary_expression "(uVar5 + 1 & 0xfffffffd) == 0" (parenthesized_expression "(uVar5 + 1 & 0xfffffffd)" ( (binary_expression "uVar5 + 1 & 0xfffffffd" (binary_expression "uVar5 + 1" identifier + number_literal) & number_literal) )) == number_literal)) ))) ;) })) (if_statement "if ((uVar7 & 1) == 0) {\n      return 0;\n    }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (for_statement "for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }" for ( (assignment_expression "uVar3 = param_3" identifier = identifier) ; (binary_expression "(uVar3 & 1) == 0" (parenthesized_expression "(uVar3 & 1)" ( (binary_expression "uVar3 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar3 = uVar3 >> 1 | 0x80000000" identifier = (binary_expression "uVar3 >> 1 | 0x80000000" (binary_expression "uVar3 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      iVar6 = iVar6 + 1;\n    }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) })) (expression_statement "param_3 = param_3 >> ((byte)iVar6 & 0x1f);" (assignment_expression "param_3 = param_3 >> ((byte)iVar6 & 0x1f)" identifier = (binary_expression "param_3 >> ((byte)iVar6 & 0x1f)" identifier >> (parenthesized_expression "((byte)iVar6 & 0x1f)" ( (binary_expression "(byte)iVar6 & 0x1f" (cast_expression "(byte)iVar6" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;" (assignment_expression "uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2" identifier = (binary_expression "(uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(uVar7 ^ uVar7 >> 1) & iVar6 * 2" (parenthesized_expression "(uVar7 ^ uVar7 >> 1)" ( (binary_expression "uVar7 ^ uVar7 >> 1" identifier ^ (binary_expression "uVar7 >> 1" identifier >> number_literal)) )) & (binary_expression "iVar6 * 2" identifier * number_literal)) ^ (binary_expression "(int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(int)uVar5 >> 0x1e & param_3" (binary_expression "(int)uVar5 >> 0x1e" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal))) ;) }) (else_clause "else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" else (compound_statement "{\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" { (expression_statement "uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;" (assignment_expression "uVar7 = (int)uVar5 >> 0x1e & param_3 & 2" identifier = (binary_expression "(int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(int)uVar5 >> 0x1e & param_3" (binary_expression "(int)uVar5 >> 0x1e" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal)) ;) }))) (if_statement "if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar5 = 1 - (uVar7 & 2);\n  }" { (expression_statement "uVar5 = 1 - (uVar7 & 2);" (assignment_expression "uVar5 = 1 - (uVar7 & 2)" identifier = (binary_expression "1 - (uVar7 & 2)" number_literal - (parenthesized_expression "(uVar7 & 2)" ( (binary_expression "uVar7 & 2" identifier & number_literal) )))) ;) }) (else_clause "else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" else (compound_statement "{\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" { (expression_statement "iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);" (assignment_expression "iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)" identifier = (binary_expression "(uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)" (parenthesized_expression "(uVar5 ^ (int)uVar5 >> 0x1f)" ( (binary_expression "uVar5 ^ (int)uVar5 >> 0x1f" identifier ^ (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar5 >> 0x1f)" ( (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }" if (parenthesized_expression "(**(int **)(unaff_EBX + 0x711ff) == 0)" ( (binary_expression "**(int **)(unaff_EBX + 0x711ff) == 0" (pointer_expression "**(int **)(unaff_EBX + 0x711ff)" * (pointer_expression "*(int **)(unaff_EBX + 0x711ff)" * (cast_expression "(int **)(unaff_EBX + 0x711ff)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EBX + 0x711ff)" ( (binary_expression "unaff_EBX + 0x711ff" identifier + number_literal) ))))) == number_literal) )) (compound_statement "{\n      __gmpn_cpuvec_init();\n    }" { (expression_statement "__gmpn_cpuvec_init();" (call_expression "__gmpn_cpuvec_init()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar2 = *(int *)(unaff_EBX + 0x7123b);" (assignment_expression "iVar2 = *(int *)(unaff_EBX + 0x7123b)" identifier = (pointer_expression "*(int *)(unaff_EBX + 0x7123b)" * (cast_expression "(int *)(unaff_EBX + 0x7123b)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBX + 0x7123b)" ( (binary_expression "unaff_EBX + 0x7123b" identifier + number_literal) ))))) ;) (if_statement "if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" if (parenthesized_expression "(iVar6 < *(int *)(iVar2 + 0xa4))" ( (binary_expression "iVar6 < *(int *)(iVar2 + 0xa4)" identifier < (pointer_expression "*(int *)(iVar2 + 0xa4)" * (cast_expression "(int *)(iVar2 + 0xa4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0xa4)" ( (binary_expression "iVar2 + 0xa4" identifier + number_literal) ))))) )) (compound_statement "{\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }" { (expression_statement "uVar7 = uVar7 ^ param_3;" (assignment_expression "uVar7 = uVar7 ^ param_3" identifier = (binary_expression "uVar7 ^ param_3" identifier ^ identifier)) ;) (expression_statement "uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);" (assignment_expression "uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0)" identifier = (call_expression "(**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0)" (parenthesized_expression "(**(code **)(iVar2 + 0x60))" ( (pointer_expression "**(code **)(iVar2 + 0x60)" * (pointer_expression "*(code **)(iVar2 + 0x60)" * (cast_expression "(code **)(iVar2 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x60)" ( (binary_expression "iVar2 + 0x60" identifier + number_literal) ))))) )) (argument_list "(puVar1,iVar6,param_3,0)" ( identifier , identifier , identifier , number_literal )))) ;) }) (else_clause "else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" else (compound_statement "{\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" { (expression_statement "uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);" (assignment_expression "uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3)" identifier = (call_expression "(**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3)" (parenthesized_expression "(**(code **)(iVar2 + 0x40))" ( (pointer_expression "**(code **)(iVar2 + 0x40)" * (pointer_expression "*(code **)(iVar2 + 0x40)" * (cast_expression "(code **)(iVar2 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x40)" ( (binary_expression "iVar2 + 0x40" identifier + number_literal) ))))) )) (argument_list "(puVar1,iVar6,param_3)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);" (assignment_expression "uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7)" identifier = (call_expression "__gmpn_jacobi_base(uVar4,param_3,uVar7)" identifier (argument_list "(uVar4,param_3,uVar7)" ( identifier , identifier , identifier )))) ;) }))) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * 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 ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT == LIT) && (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) )) == LIT)) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (for_statement for ( (assignment_expression IDENT = IDENT) ; (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ; (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) | LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ (binary_expression IDENT >> LIT)) )) & (binary_expression IDENT * LIT)) ^ (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) & IDENT) & LIT))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) & IDENT) & LIT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression LIT - (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) )) - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ IDENT)) ;) (expression_statement (assignment_expression IDENT = (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 , LIT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (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 (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "uint __regparm2 __gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)\n\n{\n  uint *puVar1;\n  int iVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  uint uVar5;\n  int iVar6;\n  int unaff_EBX;\n  uint uVar7;\n  int unaff_retaddr;\n  \n  entry(param_2,0x2cb59);\n  uVar5 = *(uint *)(unaff_retaddr + 4);\n  if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }\n  puVar1 = *(uint **)(unaff_retaddr + 8);\n  if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }\n  return uVar5;\n}" (type_identifier "uint") (ERROR "__regparm2" (identifier "__regparm2")) (function_declarator "__gmpz_kronecker_ui(undefined4 param_1,undefined4 param_2,uint param_3)" (identifier "__gmpz_kronecker_ui") (parameter_list "(undefined4 param_1,undefined4 param_2,uint param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  int iVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  uint uVar5;\n  int iVar6;\n  int unaff_EBX;\n  uint uVar7;\n  int unaff_retaddr;\n  \n  entry(param_2,0x2cb59);\n  uVar5 = *(uint *)(unaff_retaddr + 4);\n  if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }\n  puVar1 = *(uint **)(unaff_retaddr + 8);\n  if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }\n  return uVar5;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int unaff_EBX;" (primitive_type "int") (identifier "unaff_EBX") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "int unaff_retaddr;" (primitive_type "int") (identifier "unaff_retaddr") (; ";")) (expression_statement "entry(param_2,0x2cb59);" (call_expression "entry(param_2,0x2cb59)" (identifier "entry") (argument_list "(param_2,0x2cb59)" (( "(") (identifier "param_2") (, ",") (number_literal "0x2cb59") () ")"))) (; ";")) (expression_statement "uVar5 = *(uint *)(unaff_retaddr + 4);" (assignment_expression "uVar5 = *(uint *)(unaff_retaddr + 4)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(unaff_retaddr + 4)" (* "*") (cast_expression "(uint *)(unaff_retaddr + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_retaddr + 4)" (( "(") (binary_expression "unaff_retaddr + 4" (identifier "unaff_retaddr") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (uVar5 == 0) {\n    return (uint)(param_3 == 1);\n  }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return (uint)(param_3 == 1);\n  }" ({ "{") (return_statement "return (uint)(param_3 == 1);" (return "return") (call_expression "(uint)(param_3 == 1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_3 == 1)" (( "(") (binary_expression "param_3 == 1" (identifier "param_3") (== "==") (number_literal "1")) () ")"))) (; ";")) (} "}"))) (expression_statement "puVar1 = *(uint **)(unaff_retaddr + 8);" (assignment_expression "puVar1 = *(uint **)(unaff_retaddr + 8)" (identifier "puVar1") (= "=") (pointer_expression "*(uint **)(unaff_retaddr + 8)" (* "*") (cast_expression "(uint **)(unaff_retaddr + 8)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_retaddr + 8)" (( "(") (binary_expression "unaff_retaddr + 8" (identifier "unaff_retaddr") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if ((param_3 & 1) == 0) {\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }\n  else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" (if "if") (parenthesized_expression "((param_3 & 1) == 0)" (( "(") (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar7 = *puVar1;\n    if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }\n    if ((uVar7 & 1) == 0) {\n      return 0;\n    }\n    iVar6 = 0;\n    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }\n    param_3 = param_3 >> ((byte)iVar6 & 0x1f);\n    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;\n  }" ({ "{") (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" (identifier "uVar7") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (if_statement "if (param_3 == 0) {\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);\n    }" ({ "{") (return_statement "return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);" (return "return") (call_expression "(uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0)" (( "(") (binary_expression "uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0" (binary_expression "uVar7 == 1" (identifier "uVar7") (== "==") (number_literal "1")) (&& "&&") (binary_expression "(uVar5 + 1 & 0xfffffffd) == 0" (parenthesized_expression "(uVar5 + 1 & 0xfffffffd)" (( "(") (binary_expression "uVar5 + 1 & 0xfffffffd" (binary_expression "uVar5 + 1" (identifier "uVar5") (+ "+") (number_literal "1")) (& "&") (number_literal "0xfffffffd")) () ")")) (== "==") (number_literal "0"))) () ")"))) (; ";")) (} "}"))) (if_statement "if ((uVar7 & 1) == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "((uVar7 & 1) == 0)" (( "(") (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" (( "(") (binary_expression "uVar7 & 1" (identifier "uVar7") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (for_statement "for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {\n      iVar6 = iVar6 + 1;\n    }" (for "for") (( "(") (assignment_expression "uVar3 = param_3" (identifier "uVar3") (= "=") (identifier "param_3")) (; ";") (binary_expression "(uVar3 & 1) == 0" (parenthesized_expression "(uVar3 & 1)" (( "(") (binary_expression "uVar3 & 1" (identifier "uVar3") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) (; ";") (assignment_expression "uVar3 = uVar3 >> 1 | 0x80000000" (identifier "uVar3") (= "=") (binary_expression "uVar3 >> 1 | 0x80000000" (binary_expression "uVar3 >> 1" (identifier "uVar3") (>> ">>") (number_literal "1")) (| "|") (number_literal "0x80000000"))) () ")") (compound_statement "{\n      iVar6 = iVar6 + 1;\n    }" ({ "{") (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "param_3 = param_3 >> ((byte)iVar6 & 0x1f);" (assignment_expression "param_3 = param_3 >> ((byte)iVar6 & 0x1f)" (identifier "param_3") (= "=") (binary_expression "param_3 >> ((byte)iVar6 & 0x1f)" (identifier "param_3") (>> ">>") (parenthesized_expression "((byte)iVar6 & 0x1f)" (( "(") (binary_expression "(byte)iVar6 & 0x1f" (cast_expression "(byte)iVar6" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar6")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;" (assignment_expression "uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2" (identifier "uVar7") (= "=") (binary_expression "(uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(uVar7 ^ uVar7 >> 1) & iVar6 * 2" (parenthesized_expression "(uVar7 ^ uVar7 >> 1)" (( "(") (binary_expression "uVar7 ^ uVar7 >> 1" (identifier "uVar7") (^ "^") (binary_expression "uVar7 >> 1" (identifier "uVar7") (>> ">>") (number_literal "1"))) () ")")) (& "&") (binary_expression "iVar6 * 2" (identifier "iVar6") (* "*") (number_literal "2"))) (^ "^") (binary_expression "(int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(int)uVar5 >> 0x1e & param_3" (binary_expression "(int)uVar5 >> 0x1e" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (>> ">>") (number_literal "0x1e")) (& "&") (identifier "param_3")) (& "&") (number_literal "2")))) (; ";")) (} "}")) (else_clause "else {\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" (else "else") (compound_statement "{\n    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;\n  }" ({ "{") (expression_statement "uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;" (assignment_expression "uVar7 = (int)uVar5 >> 0x1e & param_3 & 2" (identifier "uVar7") (= "=") (binary_expression "(int)uVar5 >> 0x1e & param_3 & 2" (binary_expression "(int)uVar5 >> 0x1e & param_3" (binary_expression "(int)uVar5 >> 0x1e" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (>> ">>") (number_literal "0x1e")) (& "&") (identifier "param_3")) (& "&") (number_literal "2"))) (; ";")) (} "}")))) (if_statement "if (param_3 == 1) {\n    uVar5 = 1 - (uVar7 & 2);\n  }\n  else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" (if "if") (parenthesized_expression "(param_3 == 1)" (( "(") (binary_expression "param_3 == 1" (identifier "param_3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    uVar5 = 1 - (uVar7 & 2);\n  }" ({ "{") (expression_statement "uVar5 = 1 - (uVar7 & 2);" (assignment_expression "uVar5 = 1 - (uVar7 & 2)" (identifier "uVar5") (= "=") (binary_expression "1 - (uVar7 & 2)" (number_literal "1") (- "-") (parenthesized_expression "(uVar7 & 2)" (( "(") (binary_expression "uVar7 & 2" (identifier "uVar7") (& "&") (number_literal "2")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" (else "else") (compound_statement "{\n    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);\n    if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar2 = *(int *)(unaff_EBX + 0x7123b);\n    if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }\n    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);\n  }" ({ "{") (expression_statement "iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);" (assignment_expression "iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)" (identifier "iVar6") (= "=") (binary_expression "(uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)" (parenthesized_expression "(uVar5 ^ (int)uVar5 >> 0x1f)" (( "(") (binary_expression "uVar5 ^ (int)uVar5 >> 0x1f" (identifier "uVar5") (^ "^") (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (>> ">>") (number_literal "0x1f"))) () ")")) (- "-") (parenthesized_expression "((int)uVar5 >> 0x1f)" (( "(") (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if (**(int **)(unaff_EBX + 0x711ff) == 0) {\n      __gmpn_cpuvec_init();\n    }" (if "if") (parenthesized_expression "(**(int **)(unaff_EBX + 0x711ff) == 0)" (( "(") (binary_expression "**(int **)(unaff_EBX + 0x711ff) == 0" (pointer_expression "**(int **)(unaff_EBX + 0x711ff)" (* "*") (pointer_expression "*(int **)(unaff_EBX + 0x711ff)" (* "*") (cast_expression "(int **)(unaff_EBX + 0x711ff)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EBX + 0x711ff)" (( "(") (binary_expression "unaff_EBX + 0x711ff" (identifier "unaff_EBX") (+ "+") (number_literal "0x711ff")) () ")"))))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      __gmpn_cpuvec_init();\n    }" ({ "{") (expression_statement "__gmpn_cpuvec_init();" (call_expression "__gmpn_cpuvec_init()" (identifier "__gmpn_cpuvec_init") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar2 = *(int *)(unaff_EBX + 0x7123b);" (assignment_expression "iVar2 = *(int *)(unaff_EBX + 0x7123b)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(unaff_EBX + 0x7123b)" (* "*") (cast_expression "(int *)(unaff_EBX + 0x7123b)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EBX + 0x7123b)" (( "(") (binary_expression "unaff_EBX + 0x7123b" (identifier "unaff_EBX") (+ "+") (number_literal "0x7123b")) () ")"))))) (; ";")) (if_statement "if (iVar6 < *(int *)(iVar2 + 0xa4)) {\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }\n    else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" (if "if") (parenthesized_expression "(iVar6 < *(int *)(iVar2 + 0xa4))" (( "(") (binary_expression "iVar6 < *(int *)(iVar2 + 0xa4)" (identifier "iVar6") (< "<") (pointer_expression "*(int *)(iVar2 + 0xa4)" (* "*") (cast_expression "(int *)(iVar2 + 0xa4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0xa4)" (( "(") (binary_expression "iVar2 + 0xa4" (identifier "iVar2") (+ "+") (number_literal "0xa4")) () ")"))))) () ")")) (compound_statement "{\n      uVar7 = uVar7 ^ param_3;\n      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);\n    }" ({ "{") (expression_statement "uVar7 = uVar7 ^ param_3;" (assignment_expression "uVar7 = uVar7 ^ param_3" (identifier "uVar7") (= "=") (binary_expression "uVar7 ^ param_3" (identifier "uVar7") (^ "^") (identifier "param_3"))) (; ";")) (expression_statement "uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);" (assignment_expression "uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0)" (parenthesized_expression "(**(code **)(iVar2 + 0x60))" (( "(") (pointer_expression "**(code **)(iVar2 + 0x60)" (* "*") (pointer_expression "*(code **)(iVar2 + 0x60)" (* "*") (cast_expression "(code **)(iVar2 + 0x60)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 0x60)" (( "(") (binary_expression "iVar2 + 0x60" (identifier "iVar2") (+ "+") (number_literal "0x60")) () ")"))))) () ")")) (argument_list "(puVar1,iVar6,param_3,0)" (( "(") (identifier "puVar1") (, ",") (identifier "iVar6") (, ",") (identifier "param_3") (, ",") (number_literal "0") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" (else "else") (compound_statement "{\n      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);\n    }" ({ "{") (expression_statement "uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);" (assignment_expression "uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3)" (parenthesized_expression "(**(code **)(iVar2 + 0x40))" (( "(") (pointer_expression "**(code **)(iVar2 + 0x40)" (* "*") (pointer_expression "*(code **)(iVar2 + 0x40)" (* "*") (cast_expression "(code **)(iVar2 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 0x40)" (( "(") (binary_expression "iVar2 + 0x40" (identifier "iVar2") (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(puVar1,iVar6,param_3)" (( "(") (identifier "puVar1") (, ",") (identifier "iVar6") (, ",") (identifier "param_3") () ")")))) (; ";")) (} "}")))) (expression_statement "uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);" (assignment_expression "uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7)" (identifier "uVar5") (= "=") (call_expression "__gmpn_jacobi_base(uVar4,param_3,uVar7)" (identifier "__gmpn_jacobi_base") (argument_list "(uVar4,param_3,uVar7)" (( "(") (identifier "uVar4") (, ",") (identifier "param_3") (, ",") (identifier "uVar7") () ")")))) (; ";")) (} "}")))) (return_statement "return uVar5;" (return "return") (identifier "uVar5") (; ";")) (} "}")))

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

int function_1(type_1 a,type_2 var_2)

{
  type_3 var_1;
  type_3 *puVar2;
  type_3 var_4;
  type_4 a_00;
  int var_5;
  type_3 var_3;
  
  var_1 = a->_mp_size;
  if (var_1 == 0) {
    return (type_3)(var_2 == 1);
  }
  puVar2 = a->_mp_d;
  if ((var_2 & 1) == 0) {
    var_3 = *puVar2;
    if (var_2 == 0) {
      return (type_3)(var_3 == 1 && (var_1 + 1 & 0xfffffffd) == 0);
    }
    if ((var_3 & 1) == 0) {
      return 0;
    }
    var_5 = 0;
    for (var_4 = var_2; (var_4 & 1) == 0; var_4 = var_4 >> 1 | 0x80000000) {
      var_5 = var_5 + 1;
    }
    var_2 = var_2 >> ((type_5)var_5 & 0x1f);
    var_3 = (var_3 ^ var_3 >> 1) & var_5 * 2 ^ (int)var_1 >> 0x1e & var_2 & 2;
  }
  else {
    var_3 = (int)var_1 >> 0x1e & var_2 & 2;
  }
  if (var_2 == 1) {
    var_5 = 1 - (var_3 & 2);
  }
  else {
    var_5 = (var_1 ^ (int)var_1 >> 0x1f) - ((int)var_1 >> 0x1f);
    if (*(int *)PTR___gmpn_cpuvec_initialized_0009dd58 == 0) {
      var_6();
    }
    if (var_5 < *(int *)(var_7 + 0xa4)) {
      var_3 = var_3 ^ var_2;
      a_00 = (**(type_6 **)(var_7 + 0x60))(puVar2,var_5,var_2,0);
    }
    else {
      a_00 = (**(type_6 **)(var_7 + 0x40))(puVar2,var_5,var_2);
    }
    var_5 = var_8(a_00,var_2,var_3);
  }
  return var_5;
}


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

uint __regparm2 MASKED(undefined4 param_1,undefined4 param_2,uint param_3)

{
  uint *puVar1;
  int iVar2;
  uint uVar3;
  undefined4 uVar4;
  uint uVar5;
  int iVar6;
  int unaff_EBX;
  uint uVar7;
  int unaff_retaddr;
  
  entry(param_2,0x2cb59);
  uVar5 = *(uint *)(unaff_retaddr + 4);
  if (uVar5 == 0) {
    return (uint)(param_3 == 1);
  }
  puVar1 = *(uint **)(unaff_retaddr + 8);
  if ((param_3 & 1) == 0) {
    uVar7 = *puVar1;
    if (param_3 == 0) {
      return (uint)(uVar7 == 1 && (uVar5 + 1 & 0xfffffffd) == 0);
    }
    if ((uVar7 & 1) == 0) {
      return 0;
    }
    iVar6 = 0;
    for (uVar3 = param_3; (uVar3 & 1) == 0; uVar3 = uVar3 >> 1 | 0x80000000) {
      iVar6 = iVar6 + 1;
    }
    param_3 = param_3 >> ((byte)iVar6 & 0x1f);
    uVar7 = (uVar7 ^ uVar7 >> 1) & iVar6 * 2 ^ (int)uVar5 >> 0x1e & param_3 & 2;
  }
  else {
    uVar7 = (int)uVar5 >> 0x1e & param_3 & 2;
  }
  if (param_3 == 1) {
    uVar5 = 1 - (uVar7 & 2);
  }
  else {
    iVar6 = (uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f);
    if (**(int **)(unaff_EBX + 0x711ff) == 0) {
      __gmpn_cpuvec_init();
    }
    iVar2 = *(int *)(unaff_EBX + 0x7123b);
    if (iVar6 < *(int *)(iVar2 + 0xa4)) {
      uVar7 = uVar7 ^ param_3;
      uVar4 = (**(code **)(iVar2 + 0x60))(puVar1,iVar6,param_3,0);
    }
    else {
      uVar4 = (**(code **)(iVar2 + 0x40))(puVar1,iVar6,param_3);
    }
    uVar5 = __gmpn_jacobi_base(uVar4,param_3,uVar7);
  }
  return uVar5;
}

