
void mord_2exp(mpz_ptr ldst,mpz_ptr rdst,mpz_srcptr lsrc,mpz_srcptr rsrc,mp_bitcnt_t n)

{
  mp_limb_t *pmVar1;
  ulong uVar2;
  mp_limb_t *pmVar3;
  mp_limb_t mVar4;
  int iVar5;
  long new_alloc;
  ulong uVar6;
  
  uVar6 = (ulong)rsrc->_mp_size;
  pmVar1 = rsrc->_mp_d;
  mVar4 = *pmVar1;
  pmVar3 = pmVar1;
  if (0x3f < n) {
    do {
      if (mVar4 != 0) break;
      n = n - 0x40;
      pmVar3 = pmVar3 + 1;
      mVar4 = *pmVar3;
    } while (0x3f < n);
  }
  new_alloc = (((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f)) -
              ((long)pmVar3 - (long)pmVar1 >> 3);
  if (rdst->_mp_alloc < new_alloc) {
    pmVar1 = (mp_limb_t *)__gmpz_realloc(rdst,new_alloc);
  }
  else {
    pmVar1 = rdst->_mp_d;
  }
  if (((mVar4 & 1) == 0) && (n != 0)) {
    uVar2 = n;
    if (mVar4 != 0) {
      uVar2 = 0;
      if (mVar4 != 0) {
        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {
        }
      }
      if (n < uVar2) {
        uVar2 = n;
      }
    }
    __gmpn_rshift(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff);
    new_alloc = new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0);
    n = n - uVar2;
  }
  else if (pmVar1 != pmVar3) {
    __gmpn_copyi(pmVar1,pmVar3,new_alloc);
  }
  iVar5 = (int)new_alloc;
  if ((long)uVar6 < 0) {
    iVar5 = -(int)new_alloc;
  }
  rdst->_mp_size = iVar5;
  if (n == 0) {
    if (ldst != lsrc) {
      __gmpz_set(ldst,lsrc);
    }
  }
  else {
    __gmpz_mul_2exp(ldst,lsrc,n);
  }
  return;
}



void FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)

{
  ulong *puVar1;
  ulong uVar2;
  ulong *puVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  ulong uVar7;
  
  uVar7 = (ulong)*(int *)(param_4 + 4);
  puVar1 = *(ulong **)(param_4 + 8);
  uVar4 = *puVar1;
  puVar3 = puVar1;
  if (0x3f < param_5) {
    do {
      if (uVar4 != 0) break;
      param_5 = param_5 - 0x40;
      puVar3 = puVar3 + 1;
      uVar4 = *puVar3;
    } while (0x3f < param_5);
  }
  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -
          ((long)puVar3 - (long)puVar1 >> 3);
  if (*param_2 < lVar6) {
    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);
  }
  else {
    puVar1 = *(ulong **)(param_2 + 2);
  }
  if (((uVar4 & 1) == 0) && (param_5 != 0)) {
    uVar2 = param_5;
    if (uVar4 != 0) {
      uVar2 = 0;
      if (uVar4 != 0) {
        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {
        }
      }
      if (param_5 < uVar2) {
        uVar2 = param_5;
      }
    }
    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);
    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);
    param_5 = param_5 - uVar2;
  }
  else if (puVar1 != puVar3) {
    __gmpn_copyi(puVar1,puVar3,lVar6);
  }
  iVar5 = (int)lVar6;
  if ((long)uVar7 < 0) {
    iVar5 = -(int)lVar6;
  }
  param_2[1] = iVar5;
  if (param_5 == 0) {
    if (param_1 != param_3) {
      __gmpz_set(param_1);
    }
  }
  else {
    __gmpz_mul_2exp(param_1,param_3,param_5);
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV qword ptr [RSP],RDI
MOV R14,RSI
MOV qword ptr [RSP + 0x8],RDX
MOV RBX,R8
MOVSXD R15,dword ptr [RCX + 0x4]
MOV RAX,R15
SAR RAX,0x3f
MOV R13,RAX
XOR R13,R15
SUB R13,RAX
MOV RAX,qword ptr [RCX + 0x8]
MOV R12,qword ptr [RAX]
CMP R8,0x3f
JBE 0x001238b6
TEST R12,R12
JNZ 0x001238b6
MOV RBP,RAX
SUB RBX,0x40
ADD RBP,0x8
MOV R12,qword ptr [RBP]
CMP RBX,0x3f
JBE 0x00123842
TEST R12,R12
JZ 0x0012382b
MOV RDX,RBP
SUB RDX,RAX
MOV RAX,RDX
SAR RAX,0x3
SUB R13,RAX
MOVSXD RAX,dword ptr [R14]
CMP RAX,R13
JL 0x001238bb
MOV RAX,qword ptr [R14 + 0x8]
MOV RDI,RAX
TEST R12B,0x1
JNZ 0x0012386c
TEST RBX,RBX
JNZ 0x001238cb
CMP RDI,RBP
JZ 0x0012387c
MOV RDX,R13
MOV RSI,RBP
CALL 0x0010bb70
MOV EAX,R13D
NEG EAX
TEST R15,R15
CMOVS R13D,EAX
MOV dword ptr [R14 + 0x4],R13D
TEST RBX,RBX
JNZ 0x0012390b
MOV RAX,qword ptr [RSP]
MOV RSI,qword ptr [RSP + 0x8]
CMP RAX,RSI
JZ 0x001238a7
MOV RDI,RAX
CALL 0x0010b590
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RBP,RAX
JMP 0x00123842
MOV RSI,R13
MOV RDI,R14
CALL 0x0010b1e0
MOV RDI,RAX
JMP 0x00123861
MOV RAX,RBX
TEST R12,R12
JZ 0x001238e1
BSF R12,R12
CMP R12,RBX
CMOVA R12,RBX
MOV RAX,R12
MOV R12,RAX
MOV ECX,EAX
MOV RDX,R13
MOV RSI,RBP
MOV RBP,RDI
CALL 0x0010b340
CMP qword ptr [RBP + R13*0x8 + -0x8],0x0
SETZ AL
MOVZX EAX,AL
SUB R13,RAX
SUB RBX,R12
JMP 0x0012387c
MOV RDX,RBX
MOV RSI,qword ptr [RSP + 0x8]
MOV RDI,qword ptr [RSP]
CALL 0x0010b840
JMP 0x001238a7
(translation_unit "void FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)\n\n{\n  ulong *puVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  ulong uVar4;\n  int iVar5;\n  long lVar6;\n  ulong uVar7;\n  \n  uVar7 = (ulong)*(int *)(param_4 + 4);\n  puVar1 = *(ulong **)(param_4 + 8);\n  uVar4 = *puVar1;\n  puVar3 = puVar1;\n  if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }\n  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);\n  if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }\n  if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }\n  iVar5 = (int)lVar6;\n  if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }\n  param_2[1] = iVar5;\n  if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }\n  return;\n}\n\n" (function_definition "void FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)\n\n{\n  ulong *puVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  ulong uVar4;\n  int iVar5;\n  long lVar6;\n  ulong uVar7;\n  \n  uVar7 = (ulong)*(int *)(param_4 + 4);\n  puVar1 = *(ulong **)(param_4 + 8);\n  uVar4 = *puVar1;\n  puVar3 = puVar1;\n  if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }\n  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);\n  if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }\n  if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }\n  iVar5 = (int)lVar6;\n  if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }\n  param_2[1] = iVar5;\n  if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)" identifier (parameter_list "(long param_1,int *param_2,long param_3,long param_4,ulong param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_5" type_identifier identifier) ))) (compound_statement "{\n  ulong *puVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  ulong uVar4;\n  int iVar5;\n  long lVar6;\n  ulong uVar7;\n  \n  uVar7 = (ulong)*(int *)(param_4 + 4);\n  puVar1 = *(ulong **)(param_4 + 8);\n  uVar4 = *puVar1;\n  puVar3 = puVar1;\n  if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }\n  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);\n  if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }\n  if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }\n  iVar5 = (int)lVar6;\n  if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }\n  param_2[1] = iVar5;\n  if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }\n  return;\n}" { (declaration "ulong *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (expression_statement "uVar7 = (ulong)*(int *)(param_4 + 4);" (assignment_expression "uVar7 = (ulong)*(int *)(param_4 + 4)" identifier = (binary_expression "(ulong)*(int *)(param_4 + 4)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(int *)(param_4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 4)" ( (binary_expression "param_4 + 4" identifier + number_literal) ))))) ;) (expression_statement "puVar1 = *(ulong **)(param_4 + 8);" (assignment_expression "puVar1 = *(ulong **)(param_4 + 8)" identifier = (pointer_expression "*(ulong **)(param_4 + 8)" * (cast_expression "(ulong **)(param_4 + 8)" ( (type_descriptor "ulong **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 8)" ( (binary_expression "param_4 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "puVar3 = puVar1;" (assignment_expression "puVar3 = puVar1" identifier = identifier) ;) (if_statement "if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }" if (parenthesized_expression "(0x3f < param_5)" ( (binary_expression "0x3f < param_5" number_literal < identifier) )) (compound_statement "{\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }" { (do_statement "do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);" do (compound_statement "{\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    }" { (if_statement "if (uVar4 != 0) break;" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "param_5 = param_5 - 0x40;" (assignment_expression "param_5 = param_5 - 0x40" identifier = (binary_expression "param_5 - 0x40" identifier - number_literal)) ;) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = *puVar3;" (assignment_expression "uVar4 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) }) while (parenthesized_expression "(0x3f < param_5)" ( (binary_expression "0x3f < param_5" number_literal < identifier) )) ;) })) (expression_statement "lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);" (assignment_expression "lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3)" identifier = (binary_expression "(((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3)" (parenthesized_expression "(((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f))" ( (binary_expression "((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)" (parenthesized_expression "((long)uVar7 >> 0x3f ^ uVar7)" ( (binary_expression "(long)uVar7 >> 0x3f ^ uVar7" (binary_expression "(long)uVar7 >> 0x3f" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal) ^ identifier) )) - (parenthesized_expression "((long)uVar7 >> 0x3f)" ( (binary_expression "(long)uVar7 >> 0x3f" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal) ))) )) - (parenthesized_expression "((long)puVar3 - (long)puVar1 >> 3)" ( (binary_expression "(long)puVar3 - (long)puVar1 >> 3" (binary_expression "(long)puVar3 - (long)puVar1" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )))) ;) (if_statement "if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" if (parenthesized_expression "(*param_2 < lVar6)" ( (binary_expression "*param_2 < lVar6" (pointer_expression "*param_2" * identifier) < identifier) )) (compound_statement "{\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }" { (expression_statement "puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);" (assignment_expression "puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6)" identifier = (cast_expression "(ulong *)__gmpz_realloc(param_2,lVar6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(param_2,lVar6)" identifier (argument_list "(param_2,lVar6)" ( identifier , identifier ))))) ;) }) (else_clause "else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" else (compound_statement "{\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" { (expression_statement "puVar1 = *(ulong **)(param_2 + 2);" (assignment_expression "puVar1 = *(ulong **)(param_2 + 2)" identifier = (pointer_expression "*(ulong **)(param_2 + 2)" * (cast_expression "(ulong **)(param_2 + 2)" ( (type_descriptor "ulong **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 2)" ( (binary_expression "param_2 + 2" identifier + number_literal) ))))) ;) }))) (if_statement "if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" if (parenthesized_expression "(((uVar4 & 1) == 0) && (param_5 != 0))" ( (binary_expression "((uVar4 & 1) == 0) && (param_5 != 0)" (parenthesized_expression "((uVar4 & 1) == 0)" ( (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) ))) )) (compound_statement "{\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }" { (expression_statement "uVar2 = param_5;" (assignment_expression "uVar2 = param_5" identifier = identifier) ;) (if_statement "if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (if_statement "if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }" { (for_statement "for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }" for ( ; (binary_expression "(uVar4 >> uVar2 & 1) == 0" (parenthesized_expression "(uVar4 >> uVar2 & 1)" ( (binary_expression "uVar4 >> uVar2 & 1" (binary_expression "uVar4 >> uVar2" identifier >> identifier) & number_literal) )) == number_literal) ; (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ) (compound_statement "{\n        }" { })) })) (if_statement "if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }" if (parenthesized_expression "(param_5 < uVar2)" ( (binary_expression "param_5 < uVar2" identifier < identifier) )) (compound_statement "{\n        uVar2 = param_5;\n      }" { (expression_statement "uVar2 = param_5;" (assignment_expression "uVar2 = param_5" identifier = identifier) ;) })) })) (expression_statement "__gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);" (call_expression "__gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff)" identifier (argument_list "(puVar1,puVar3,lVar6,uVar2 & 0xffffffff)" ( identifier , identifier , identifier , (binary_expression "uVar2 & 0xffffffff" identifier & number_literal) ))) ;) (expression_statement "lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);" (assignment_expression "lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0)" identifier = (binary_expression "lVar6 - (ulong)(puVar1[lVar6 + -1] == 0)" identifier - (call_expression "(ulong)(puVar1[lVar6 + -1] == 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar1[lVar6 + -1] == 0)" ( (binary_expression "puVar1[lVar6 + -1] == 0" (subscript_expression "puVar1[lVar6 + -1]" identifier [ (binary_expression "lVar6 + -1" identifier + number_literal) ]) == number_literal) ))))) ;) (expression_statement "param_5 = param_5 - uVar2;" (assignment_expression "param_5 = param_5 - uVar2" identifier = (binary_expression "param_5 - uVar2" identifier - identifier)) ;) }) (else_clause "else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" else (if_statement "if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" if (parenthesized_expression "(puVar1 != puVar3)" ( (binary_expression "puVar1 != puVar3" identifier != identifier) )) (compound_statement "{\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" { (expression_statement "__gmpn_copyi(puVar1,puVar3,lVar6);" (call_expression "__gmpn_copyi(puVar1,puVar3,lVar6)" identifier (argument_list "(puVar1,puVar3,lVar6)" ( identifier , identifier , identifier ))) ;) })))) (expression_statement "iVar5 = (int)lVar6;" (assignment_expression "iVar5 = (int)lVar6" identifier = (cast_expression "(int)lVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }" if (parenthesized_expression "((long)uVar7 < 0)" ( (binary_expression "(long)uVar7 < 0" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    iVar5 = -(int)lVar6;\n  }" { (expression_statement "iVar5 = -(int)lVar6;" (assignment_expression "iVar5 = -(int)lVar6" identifier = (unary_expression "-(int)lVar6" - (cast_expression "(int)lVar6" ( (type_descriptor "int" primitive_type) ) identifier))) ;) })) (expression_statement "param_2[1] = iVar5;" (assignment_expression "param_2[1] = iVar5" (subscript_expression "param_2[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }" { (if_statement "if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }" if (parenthesized_expression "(param_1 != param_3)" ( (binary_expression "param_1 != param_3" identifier != identifier) )) (compound_statement "{\n      __gmpz_set(param_1);\n    }" { (expression_statement "__gmpz_set(param_1);" (call_expression "__gmpz_set(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) })) }) (else_clause "else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" else (compound_statement "{\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" { (expression_statement "__gmpz_mul_2exp(param_1,param_3,param_5);" (call_expression "__gmpz_mul_2exp(param_1,param_3,param_5)" identifier (argument_list "(param_1,param_3,param_5)" ( identifier , identifier , identifier ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void mord_2exp(mpz_ptr ldst,mpz_ptr rdst,mpz_srcptr lsrc,mpz_srcptr rsrc,mp_bitcnt_t n)\n\n{\n  mp_limb_t *pmVar1;\n  ulong uVar2;\n  mp_limb_t *pmVar3;\n  mp_limb_t mVar4;\n  int iVar5;\n  long new_alloc;\n  ulong uVar6;\n  \n  uVar6 = (ulong)rsrc->_mp_size;\n  pmVar1 = rsrc->_mp_d;\n  mVar4 = *pmVar1;\n  pmVar3 = pmVar1;\n  if (0x3f < n) {\n    do {\n      if (mVar4 != 0) break;\n      n = n - 0x40;\n      pmVar3 = pmVar3 + 1;\n      mVar4 = *pmVar3;\n    } while (0x3f < n);\n  }\n  new_alloc = (((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f)) -\n              ((long)pmVar3 - (long)pmVar1 >> 3);\n  if (rdst->_mp_alloc < new_alloc) {\n    pmVar1 = (mp_limb_t *)__gmpz_realloc(rdst,new_alloc);\n  }\n  else {\n    pmVar1 = rdst->_mp_d;\n  }\n  if (((mVar4 & 1) == 0) && (n != 0)) {\n    uVar2 = n;\n    if (mVar4 != 0) {\n      uVar2 = 0;\n      if (mVar4 != 0) {\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (n < uVar2) {\n        uVar2 = n;\n      }\n    }\n    __gmpn_rshift(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff);\n    new_alloc = new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0);\n    n = n - uVar2;\n  }\n  else if (pmVar1 != pmVar3) {\n    __gmpn_copyi(pmVar1,pmVar3,new_alloc);\n  }\n  iVar5 = (int)new_alloc;\n  if ((long)uVar6 < 0) {\n    iVar5 = -(int)new_alloc;\n  }\n  rdst->_mp_size = iVar5;\n  if (n == 0) {\n    if (ldst != lsrc) {\n      __gmpz_set(ldst,lsrc);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(ldst,lsrc,n);\n  }\n  return;\n}\n\n" (function_definition "void mord_2exp(mpz_ptr ldst,mpz_ptr rdst,mpz_srcptr lsrc,mpz_srcptr rsrc,mp_bitcnt_t n)\n\n{\n  mp_limb_t *pmVar1;\n  ulong uVar2;\n  mp_limb_t *pmVar3;\n  mp_limb_t mVar4;\n  int iVar5;\n  long new_alloc;\n  ulong uVar6;\n  \n  uVar6 = (ulong)rsrc->_mp_size;\n  pmVar1 = rsrc->_mp_d;\n  mVar4 = *pmVar1;\n  pmVar3 = pmVar1;\n  if (0x3f < n) {\n    do {\n      if (mVar4 != 0) break;\n      n = n - 0x40;\n      pmVar3 = pmVar3 + 1;\n      mVar4 = *pmVar3;\n    } while (0x3f < n);\n  }\n  new_alloc = (((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f)) -\n              ((long)pmVar3 - (long)pmVar1 >> 3);\n  if (rdst->_mp_alloc < new_alloc) {\n    pmVar1 = (mp_limb_t *)__gmpz_realloc(rdst,new_alloc);\n  }\n  else {\n    pmVar1 = rdst->_mp_d;\n  }\n  if (((mVar4 & 1) == 0) && (n != 0)) {\n    uVar2 = n;\n    if (mVar4 != 0) {\n      uVar2 = 0;\n      if (mVar4 != 0) {\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (n < uVar2) {\n        uVar2 = n;\n      }\n    }\n    __gmpn_rshift(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff);\n    new_alloc = new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0);\n    n = n - uVar2;\n  }\n  else if (pmVar1 != pmVar3) {\n    __gmpn_copyi(pmVar1,pmVar3,new_alloc);\n  }\n  iVar5 = (int)new_alloc;\n  if ((long)uVar6 < 0) {\n    iVar5 = -(int)new_alloc;\n  }\n  rdst->_mp_size = iVar5;\n  if (n == 0) {\n    if (ldst != lsrc) {\n      __gmpz_set(ldst,lsrc);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(ldst,lsrc,n);\n  }\n  return;\n}" primitive_type (function_declarator "mord_2exp(mpz_ptr ldst,mpz_ptr rdst,mpz_srcptr lsrc,mpz_srcptr rsrc,mp_bitcnt_t n)" identifier (parameter_list "(mpz_ptr ldst,mpz_ptr rdst,mpz_srcptr lsrc,mpz_srcptr rsrc,mp_bitcnt_t n)" ( (parameter_declaration "mpz_ptr ldst" type_identifier identifier) , (parameter_declaration "mpz_ptr rdst" type_identifier identifier) , (parameter_declaration "mpz_srcptr lsrc" type_identifier identifier) , (parameter_declaration "mpz_srcptr rsrc" type_identifier identifier) , (parameter_declaration "mp_bitcnt_t n" type_identifier identifier) ))) (compound_statement "{\n  mp_limb_t *pmVar1;\n  ulong uVar2;\n  mp_limb_t *pmVar3;\n  mp_limb_t mVar4;\n  int iVar5;\n  long new_alloc;\n  ulong uVar6;\n  \n  uVar6 = (ulong)rsrc->_mp_size;\n  pmVar1 = rsrc->_mp_d;\n  mVar4 = *pmVar1;\n  pmVar3 = pmVar1;\n  if (0x3f < n) {\n    do {\n      if (mVar4 != 0) break;\n      n = n - 0x40;\n      pmVar3 = pmVar3 + 1;\n      mVar4 = *pmVar3;\n    } while (0x3f < n);\n  }\n  new_alloc = (((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f)) -\n              ((long)pmVar3 - (long)pmVar1 >> 3);\n  if (rdst->_mp_alloc < new_alloc) {\n    pmVar1 = (mp_limb_t *)__gmpz_realloc(rdst,new_alloc);\n  }\n  else {\n    pmVar1 = rdst->_mp_d;\n  }\n  if (((mVar4 & 1) == 0) && (n != 0)) {\n    uVar2 = n;\n    if (mVar4 != 0) {\n      uVar2 = 0;\n      if (mVar4 != 0) {\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (n < uVar2) {\n        uVar2 = n;\n      }\n    }\n    __gmpn_rshift(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff);\n    new_alloc = new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0);\n    n = n - uVar2;\n  }\n  else if (pmVar1 != pmVar3) {\n    __gmpn_copyi(pmVar1,pmVar3,new_alloc);\n  }\n  iVar5 = (int)new_alloc;\n  if ((long)uVar6 < 0) {\n    iVar5 = -(int)new_alloc;\n  }\n  rdst->_mp_size = iVar5;\n  if (n == 0) {\n    if (ldst != lsrc) {\n      __gmpz_set(ldst,lsrc);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(ldst,lsrc,n);\n  }\n  return;\n}" { (declaration "mp_limb_t *pmVar1;" type_identifier (pointer_declarator "*pmVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "mp_limb_t *pmVar3;" type_identifier (pointer_declarator "*pmVar3" * identifier) ;) (declaration "mp_limb_t mVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "long new_alloc;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (expression_statement "uVar6 = (ulong)rsrc->_mp_size;" (assignment_expression "uVar6 = (ulong)rsrc->_mp_size" identifier = (cast_expression "(ulong)rsrc->_mp_size" ( (type_descriptor "ulong" type_identifier) ) (field_expression "rsrc->_mp_size" identifier -> field_identifier))) ;) (expression_statement "pmVar1 = rsrc->_mp_d;" (assignment_expression "pmVar1 = rsrc->_mp_d" identifier = (field_expression "rsrc->_mp_d" identifier -> field_identifier)) ;) (expression_statement "mVar4 = *pmVar1;" (assignment_expression "mVar4 = *pmVar1" identifier = (pointer_expression "*pmVar1" * identifier)) ;) (expression_statement "pmVar3 = pmVar1;" (assignment_expression "pmVar3 = pmVar1" identifier = identifier) ;) (if_statement "if (0x3f < n) {\n    do {\n      if (mVar4 != 0) break;\n      n = n - 0x40;\n      pmVar3 = pmVar3 + 1;\n      mVar4 = *pmVar3;\n    } while (0x3f < n);\n  }" if (parenthesized_expression "(0x3f < n)" ( (binary_expression "0x3f < n" number_literal < identifier) )) (compound_statement "{\n    do {\n      if (mVar4 != 0) break;\n      n = n - 0x40;\n      pmVar3 = pmVar3 + 1;\n      mVar4 = *pmVar3;\n    } while (0x3f < n);\n  }" { (do_statement "do {\n      if (mVar4 != 0) break;\n      n = n - 0x40;\n      pmVar3 = pmVar3 + 1;\n      mVar4 = *pmVar3;\n    } while (0x3f < n);" do (compound_statement "{\n      if (mVar4 != 0) break;\n      n = n - 0x40;\n      pmVar3 = pmVar3 + 1;\n      mVar4 = *pmVar3;\n    }" { (if_statement "if (mVar4 != 0) break;" if (parenthesized_expression "(mVar4 != 0)" ( (binary_expression "mVar4 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "n = n - 0x40;" (assignment_expression "n = n - 0x40" identifier = (binary_expression "n - 0x40" identifier - number_literal)) ;) (expression_statement "pmVar3 = pmVar3 + 1;" (assignment_expression "pmVar3 = pmVar3 + 1" identifier = (binary_expression "pmVar3 + 1" identifier + number_literal)) ;) (expression_statement "mVar4 = *pmVar3;" (assignment_expression "mVar4 = *pmVar3" identifier = (pointer_expression "*pmVar3" * identifier)) ;) }) while (parenthesized_expression "(0x3f < n)" ( (binary_expression "0x3f < n" number_literal < identifier) )) ;) })) (expression_statement "new_alloc = (((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f)) -\n              ((long)pmVar3 - (long)pmVar1 >> 3);" (assignment_expression "new_alloc = (((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f)) -\n              ((long)pmVar3 - (long)pmVar1 >> 3)" identifier = (binary_expression "(((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f)) -\n              ((long)pmVar3 - (long)pmVar1 >> 3)" (parenthesized_expression "(((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f))" ( (binary_expression "((long)uVar6 >> 0x3f ^ uVar6) - ((long)uVar6 >> 0x3f)" (parenthesized_expression "((long)uVar6 >> 0x3f ^ uVar6)" ( (binary_expression "(long)uVar6 >> 0x3f ^ uVar6" (binary_expression "(long)uVar6 >> 0x3f" (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal) ^ identifier) )) - (parenthesized_expression "((long)uVar6 >> 0x3f)" ( (binary_expression "(long)uVar6 >> 0x3f" (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal) ))) )) - (parenthesized_expression "((long)pmVar3 - (long)pmVar1 >> 3)" ( (binary_expression "(long)pmVar3 - (long)pmVar1 >> 3" (binary_expression "(long)pmVar3 - (long)pmVar1" (cast_expression "(long)pmVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pmVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )))) ;) (if_statement "if (rdst->_mp_alloc < new_alloc) {\n    pmVar1 = (mp_limb_t *)__gmpz_realloc(rdst,new_alloc);\n  }\n  else {\n    pmVar1 = rdst->_mp_d;\n  }" if (parenthesized_expression "(rdst->_mp_alloc < new_alloc)" ( (binary_expression "rdst->_mp_alloc < new_alloc" (field_expression "rdst->_mp_alloc" identifier -> field_identifier) < identifier) )) (compound_statement "{\n    pmVar1 = (mp_limb_t *)__gmpz_realloc(rdst,new_alloc);\n  }" { (expression_statement "pmVar1 = (mp_limb_t *)__gmpz_realloc(rdst,new_alloc);" (assignment_expression "pmVar1 = (mp_limb_t *)__gmpz_realloc(rdst,new_alloc)" identifier = (cast_expression "(mp_limb_t *)__gmpz_realloc(rdst,new_alloc)" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(rdst,new_alloc)" identifier (argument_list "(rdst,new_alloc)" ( identifier , identifier ))))) ;) }) (else_clause "else {\n    pmVar1 = rdst->_mp_d;\n  }" else (compound_statement "{\n    pmVar1 = rdst->_mp_d;\n  }" { (expression_statement "pmVar1 = rdst->_mp_d;" (assignment_expression "pmVar1 = rdst->_mp_d" identifier = (field_expression "rdst->_mp_d" identifier -> field_identifier)) ;) }))) (if_statement "if (((mVar4 & 1) == 0) && (n != 0)) {\n    uVar2 = n;\n    if (mVar4 != 0) {\n      uVar2 = 0;\n      if (mVar4 != 0) {\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (n < uVar2) {\n        uVar2 = n;\n      }\n    }\n    __gmpn_rshift(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff);\n    new_alloc = new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0);\n    n = n - uVar2;\n  }\n  else if (pmVar1 != pmVar3) {\n    __gmpn_copyi(pmVar1,pmVar3,new_alloc);\n  }" if (parenthesized_expression "(((mVar4 & 1) == 0) && (n != 0))" ( (binary_expression "((mVar4 & 1) == 0) && (n != 0)" (parenthesized_expression "((mVar4 & 1) == 0)" ( (binary_expression "(mVar4 & 1) == 0" (parenthesized_expression "(mVar4 & 1)" ( (binary_expression "mVar4 & 1" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(n != 0)" ( (binary_expression "n != 0" identifier != number_literal) ))) )) (compound_statement "{\n    uVar2 = n;\n    if (mVar4 != 0) {\n      uVar2 = 0;\n      if (mVar4 != 0) {\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (n < uVar2) {\n        uVar2 = n;\n      }\n    }\n    __gmpn_rshift(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff);\n    new_alloc = new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0);\n    n = n - uVar2;\n  }" { (expression_statement "uVar2 = n;" (assignment_expression "uVar2 = n" identifier = identifier) ;) (if_statement "if (mVar4 != 0) {\n      uVar2 = 0;\n      if (mVar4 != 0) {\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (n < uVar2) {\n        uVar2 = n;\n      }\n    }" if (parenthesized_expression "(mVar4 != 0)" ( (binary_expression "mVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar2 = 0;\n      if (mVar4 != 0) {\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (n < uVar2) {\n        uVar2 = n;\n      }\n    }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (if_statement "if (mVar4 != 0) {\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }" if (parenthesized_expression "(mVar4 != 0)" ( (binary_expression "mVar4 != 0" identifier != number_literal) )) (compound_statement "{\n        for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }" { (for_statement "for (; (mVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }" for ( ; (binary_expression "(mVar4 >> uVar2 & 1) == 0" (parenthesized_expression "(mVar4 >> uVar2 & 1)" ( (binary_expression "mVar4 >> uVar2 & 1" (binary_expression "mVar4 >> uVar2" identifier >> identifier) & number_literal) )) == number_literal) ; (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ) (compound_statement "{\n        }" { })) })) (if_statement "if (n < uVar2) {\n        uVar2 = n;\n      }" if (parenthesized_expression "(n < uVar2)" ( (binary_expression "n < uVar2" identifier < identifier) )) (compound_statement "{\n        uVar2 = n;\n      }" { (expression_statement "uVar2 = n;" (assignment_expression "uVar2 = n" identifier = identifier) ;) })) })) (expression_statement "__gmpn_rshift(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff);" (call_expression "__gmpn_rshift(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff)" identifier (argument_list "(pmVar1,pmVar3,new_alloc,uVar2 & 0xffffffff)" ( identifier , identifier , identifier , (binary_expression "uVar2 & 0xffffffff" identifier & number_literal) ))) ;) (expression_statement "new_alloc = new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0);" (assignment_expression "new_alloc = new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0)" identifier = (binary_expression "new_alloc - (ulong)(pmVar1[new_alloc + -1] == 0)" identifier - (call_expression "(ulong)(pmVar1[new_alloc + -1] == 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(pmVar1[new_alloc + -1] == 0)" ( (binary_expression "pmVar1[new_alloc + -1] == 0" (subscript_expression "pmVar1[new_alloc + -1]" identifier [ (binary_expression "new_alloc + -1" identifier + number_literal) ]) == number_literal) ))))) ;) (expression_statement "n = n - uVar2;" (assignment_expression "n = n - uVar2" identifier = (binary_expression "n - uVar2" identifier - identifier)) ;) }) (else_clause "else if (pmVar1 != pmVar3) {\n    __gmpn_copyi(pmVar1,pmVar3,new_alloc);\n  }" else (if_statement "if (pmVar1 != pmVar3) {\n    __gmpn_copyi(pmVar1,pmVar3,new_alloc);\n  }" if (parenthesized_expression "(pmVar1 != pmVar3)" ( (binary_expression "pmVar1 != pmVar3" identifier != identifier) )) (compound_statement "{\n    __gmpn_copyi(pmVar1,pmVar3,new_alloc);\n  }" { (expression_statement "__gmpn_copyi(pmVar1,pmVar3,new_alloc);" (call_expression "__gmpn_copyi(pmVar1,pmVar3,new_alloc)" identifier (argument_list "(pmVar1,pmVar3,new_alloc)" ( identifier , identifier , identifier ))) ;) })))) (expression_statement "iVar5 = (int)new_alloc;" (assignment_expression "iVar5 = (int)new_alloc" identifier = (cast_expression "(int)new_alloc" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if ((long)uVar6 < 0) {\n    iVar5 = -(int)new_alloc;\n  }" if (parenthesized_expression "((long)uVar6 < 0)" ( (binary_expression "(long)uVar6 < 0" (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    iVar5 = -(int)new_alloc;\n  }" { (expression_statement "iVar5 = -(int)new_alloc;" (assignment_expression "iVar5 = -(int)new_alloc" identifier = (unary_expression "-(int)new_alloc" - (cast_expression "(int)new_alloc" ( (type_descriptor "int" primitive_type) ) identifier))) ;) })) (expression_statement "rdst->_mp_size = iVar5;" (assignment_expression "rdst->_mp_size = iVar5" (field_expression "rdst->_mp_size" identifier -> field_identifier) = identifier) ;) (if_statement "if (n == 0) {\n    if (ldst != lsrc) {\n      __gmpz_set(ldst,lsrc);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(ldst,lsrc,n);\n  }" if (parenthesized_expression "(n == 0)" ( (binary_expression "n == 0" identifier == number_literal) )) (compound_statement "{\n    if (ldst != lsrc) {\n      __gmpz_set(ldst,lsrc);\n    }\n  }" { (if_statement "if (ldst != lsrc) {\n      __gmpz_set(ldst,lsrc);\n    }" if (parenthesized_expression "(ldst != lsrc)" ( (binary_expression "ldst != lsrc" identifier != identifier) )) (compound_statement "{\n      __gmpz_set(ldst,lsrc);\n    }" { (expression_statement "__gmpz_set(ldst,lsrc);" (call_expression "__gmpz_set(ldst,lsrc)" identifier (argument_list "(ldst,lsrc)" ( identifier , identifier ))) ;) })) }) (else_clause "else {\n    __gmpz_mul_2exp(ldst,lsrc,n);\n  }" else (compound_statement "{\n    __gmpz_mul_2exp(ldst,lsrc,n);\n  }" { (expression_statement "__gmpz_mul_2exp(ldst,lsrc,n);" (call_expression "__gmpz_mul_2exp(ldst,lsrc,n)" identifier (argument_list "(ldst,lsrc,n)" ( identifier , identifier , identifier ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)\n\n{\n  ulong *puVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  ulong uVar4;\n  int iVar5;\n  long lVar6;\n  ulong uVar7;\n  \n  uVar7 = (ulong)*(int *)(param_4 + 4);\n  puVar1 = *(ulong **)(param_4 + 8);\n  uVar4 = *puVar1;\n  puVar3 = puVar1;\n  if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }\n  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);\n  if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }\n  if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }\n  iVar5 = (int)lVar6;\n  if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }\n  param_2[1] = iVar5;\n  if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }\n  return;\n}\n\n" (function_definition "void FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)\n\n{\n  ulong *puVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  ulong uVar4;\n  int iVar5;\n  long lVar6;\n  ulong uVar7;\n  \n  uVar7 = (ulong)*(int *)(param_4 + 4);\n  puVar1 = *(ulong **)(param_4 + 8);\n  uVar4 = *puVar1;\n  puVar3 = puVar1;\n  if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }\n  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);\n  if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }\n  if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }\n  iVar5 = (int)lVar6;\n  if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }\n  param_2[1] = iVar5;\n  if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)" identifier (parameter_list "(long param_1,int *param_2,long param_3,long param_4,ulong param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_5" type_identifier identifier) ))) (compound_statement "{\n  ulong *puVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  ulong uVar4;\n  int iVar5;\n  long lVar6;\n  ulong uVar7;\n  \n  uVar7 = (ulong)*(int *)(param_4 + 4);\n  puVar1 = *(ulong **)(param_4 + 8);\n  uVar4 = *puVar1;\n  puVar3 = puVar1;\n  if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }\n  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);\n  if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }\n  if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }\n  iVar5 = (int)lVar6;\n  if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }\n  param_2[1] = iVar5;\n  if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }\n  return;\n}" { (declaration "ulong *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (expression_statement "uVar7 = (ulong)*(int *)(param_4 + 4);" (assignment_expression "uVar7 = (ulong)*(int *)(param_4 + 4)" identifier = (binary_expression "(ulong)*(int *)(param_4 + 4)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(int *)(param_4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 4)" ( (binary_expression "param_4 + 4" identifier + number_literal) ))))) ;) (expression_statement "puVar1 = *(ulong **)(param_4 + 8);" (assignment_expression "puVar1 = *(ulong **)(param_4 + 8)" identifier = (pointer_expression "*(ulong **)(param_4 + 8)" * (cast_expression "(ulong **)(param_4 + 8)" ( (type_descriptor "ulong **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 8)" ( (binary_expression "param_4 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "puVar3 = puVar1;" (assignment_expression "puVar3 = puVar1" identifier = identifier) ;) (if_statement "if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }" if (parenthesized_expression "(0x3f < param_5)" ( (binary_expression "0x3f < param_5" number_literal < identifier) )) (compound_statement "{\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }" { (do_statement "do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);" do (compound_statement "{\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    }" { (if_statement "if (uVar4 != 0) break;" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "param_5 = param_5 - 0x40;" (assignment_expression "param_5 = param_5 - 0x40" identifier = (binary_expression "param_5 - 0x40" identifier - number_literal)) ;) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = *puVar3;" (assignment_expression "uVar4 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) }) while (parenthesized_expression "(0x3f < param_5)" ( (binary_expression "0x3f < param_5" number_literal < identifier) )) ;) })) (expression_statement "lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);" (assignment_expression "lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3)" identifier = (binary_expression "(((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3)" (parenthesized_expression "(((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f))" ( (binary_expression "((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)" (parenthesized_expression "((long)uVar7 >> 0x3f ^ uVar7)" ( (binary_expression "(long)uVar7 >> 0x3f ^ uVar7" (binary_expression "(long)uVar7 >> 0x3f" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal) ^ identifier) )) - (parenthesized_expression "((long)uVar7 >> 0x3f)" ( (binary_expression "(long)uVar7 >> 0x3f" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) >> number_literal) ))) )) - (parenthesized_expression "((long)puVar3 - (long)puVar1 >> 3)" ( (binary_expression "(long)puVar3 - (long)puVar1 >> 3" (binary_expression "(long)puVar3 - (long)puVar1" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )))) ;) (if_statement "if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" if (parenthesized_expression "(*param_2 < lVar6)" ( (binary_expression "*param_2 < lVar6" (pointer_expression "*param_2" * identifier) < identifier) )) (compound_statement "{\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }" { (expression_statement "puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);" (assignment_expression "puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6)" identifier = (cast_expression "(ulong *)__gmpz_realloc(param_2,lVar6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(param_2,lVar6)" identifier (argument_list "(param_2,lVar6)" ( identifier , identifier ))))) ;) }) (else_clause "else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" else (compound_statement "{\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" { (expression_statement "puVar1 = *(ulong **)(param_2 + 2);" (assignment_expression "puVar1 = *(ulong **)(param_2 + 2)" identifier = (pointer_expression "*(ulong **)(param_2 + 2)" * (cast_expression "(ulong **)(param_2 + 2)" ( (type_descriptor "ulong **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 2)" ( (binary_expression "param_2 + 2" identifier + number_literal) ))))) ;) }))) (if_statement "if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" if (parenthesized_expression "(((uVar4 & 1) == 0) && (param_5 != 0))" ( (binary_expression "((uVar4 & 1) == 0) && (param_5 != 0)" (parenthesized_expression "((uVar4 & 1) == 0)" ( (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) ))) )) (compound_statement "{\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }" { (expression_statement "uVar2 = param_5;" (assignment_expression "uVar2 = param_5" identifier = identifier) ;) (if_statement "if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (if_statement "if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }" { (for_statement "for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }" for ( ; (binary_expression "(uVar4 >> uVar2 & 1) == 0" (parenthesized_expression "(uVar4 >> uVar2 & 1)" ( (binary_expression "uVar4 >> uVar2 & 1" (binary_expression "uVar4 >> uVar2" identifier >> identifier) & number_literal) )) == number_literal) ; (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ) (compound_statement "{\n        }" { })) })) (if_statement "if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }" if (parenthesized_expression "(param_5 < uVar2)" ( (binary_expression "param_5 < uVar2" identifier < identifier) )) (compound_statement "{\n        uVar2 = param_5;\n      }" { (expression_statement "uVar2 = param_5;" (assignment_expression "uVar2 = param_5" identifier = identifier) ;) })) })) (expression_statement "__gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);" (call_expression "__gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff)" identifier (argument_list "(puVar1,puVar3,lVar6,uVar2 & 0xffffffff)" ( identifier , identifier , identifier , (binary_expression "uVar2 & 0xffffffff" identifier & number_literal) ))) ;) (expression_statement "lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);" (assignment_expression "lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0)" identifier = (binary_expression "lVar6 - (ulong)(puVar1[lVar6 + -1] == 0)" identifier - (call_expression "(ulong)(puVar1[lVar6 + -1] == 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar1[lVar6 + -1] == 0)" ( (binary_expression "puVar1[lVar6 + -1] == 0" (subscript_expression "puVar1[lVar6 + -1]" identifier [ (binary_expression "lVar6 + -1" identifier + number_literal) ]) == number_literal) ))))) ;) (expression_statement "param_5 = param_5 - uVar2;" (assignment_expression "param_5 = param_5 - uVar2" identifier = (binary_expression "param_5 - uVar2" identifier - identifier)) ;) }) (else_clause "else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" else (if_statement "if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" if (parenthesized_expression "(puVar1 != puVar3)" ( (binary_expression "puVar1 != puVar3" identifier != identifier) )) (compound_statement "{\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" { (expression_statement "__gmpn_copyi(puVar1,puVar3,lVar6);" (call_expression "__gmpn_copyi(puVar1,puVar3,lVar6)" identifier (argument_list "(puVar1,puVar3,lVar6)" ( identifier , identifier , identifier ))) ;) })))) (expression_statement "iVar5 = (int)lVar6;" (assignment_expression "iVar5 = (int)lVar6" identifier = (cast_expression "(int)lVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }" if (parenthesized_expression "((long)uVar7 < 0)" ( (binary_expression "(long)uVar7 < 0" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    iVar5 = -(int)lVar6;\n  }" { (expression_statement "iVar5 = -(int)lVar6;" (assignment_expression "iVar5 = -(int)lVar6" identifier = (unary_expression "-(int)lVar6" - (cast_expression "(int)lVar6" ( (type_descriptor "int" primitive_type) ) identifier))) ;) })) (expression_statement "param_2[1] = iVar5;" (assignment_expression "param_2[1] = iVar5" (subscript_expression "param_2[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }" { (if_statement "if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }" if (parenthesized_expression "(param_1 != param_3)" ( (binary_expression "param_1 != param_3" identifier != identifier) )) (compound_statement "{\n      __gmpz_set(param_1);\n    }" { (expression_statement "__gmpz_set(param_1);" (call_expression "__gmpz_set(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) })) }) (else_clause "else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" else (compound_statement "{\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" { (expression_statement "__gmpz_mul_2exp(param_1,param_3,param_5);" (call_expression "__gmpz_mul_2exp(param_1,param_3,param_5)" identifier (argument_list "(param_1,param_3,param_5)" ( identifier , identifier , identifier ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (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) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }) while (parenthesized_expression ( (binary_expression LIT < IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) >> LIT) ^ IDENT) )) - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) >> LIT) ))) )) - (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) }) (else_clause else (compound_statement { (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 (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (for_statement for ( ; (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT >> IDENT) & LIT) )) == LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (binary_expression IDENT & LIT) ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) })))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) }))) (return_statement return ;) })))
(function_definition "void FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)\n\n{\n  ulong *puVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  ulong uVar4;\n  int iVar5;\n  long lVar6;\n  ulong uVar7;\n  \n  uVar7 = (ulong)*(int *)(param_4 + 4);\n  puVar1 = *(ulong **)(param_4 + 8);\n  uVar4 = *puVar1;\n  puVar3 = puVar1;\n  if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }\n  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);\n  if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }\n  if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }\n  iVar5 = (int)lVar6;\n  if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }\n  param_2[1] = iVar5;\n  if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001237dd(long param_1,int *param_2,long param_3,long param_4,ulong param_5)" (identifier "FUN_001237dd") (parameter_list "(long param_1,int *param_2,long param_3,long param_4,ulong param_5)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "long param_4" (sized_type_specifier "long" (long "long")) (identifier "param_4")) (, ",") (parameter_declaration "ulong param_5" (type_identifier "ulong") (identifier "param_5")) () ")"))) (compound_statement "{\n  ulong *puVar1;\n  ulong uVar2;\n  ulong *puVar3;\n  ulong uVar4;\n  int iVar5;\n  long lVar6;\n  ulong uVar7;\n  \n  uVar7 = (ulong)*(int *)(param_4 + 4);\n  puVar1 = *(ulong **)(param_4 + 8);\n  uVar4 = *puVar1;\n  puVar3 = puVar1;\n  if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }\n  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);\n  if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }\n  if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }\n  iVar5 = (int)lVar6;\n  if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }\n  param_2[1] = iVar5;\n  if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }\n  return;\n}" ({ "{") (declaration "ulong *puVar1;" (type_identifier "ulong") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "ulong *puVar3;" (type_identifier "ulong") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (expression_statement "uVar7 = (ulong)*(int *)(param_4 + 4);" (assignment_expression "uVar7 = (ulong)*(int *)(param_4 + 4)" (identifier "uVar7") (= "=") (binary_expression "(ulong)*(int *)(param_4 + 4)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(int *)(param_4 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 4)" (( "(") (binary_expression "param_4 + 4" (identifier "param_4") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "puVar1 = *(ulong **)(param_4 + 8);" (assignment_expression "puVar1 = *(ulong **)(param_4 + 8)" (identifier "puVar1") (= "=") (pointer_expression "*(ulong **)(param_4 + 8)" (* "*") (cast_expression "(ulong **)(param_4 + 8)" (( "(") (type_descriptor "ulong **" (type_identifier "ulong") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_4 + 8)" (( "(") (binary_expression "param_4 + 8" (identifier "param_4") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" (identifier "uVar4") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "puVar3 = puVar1;" (assignment_expression "puVar3 = puVar1" (identifier "puVar3") (= "=") (identifier "puVar1")) (; ";")) (if_statement "if (0x3f < param_5) {\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }" (if "if") (parenthesized_expression "(0x3f < param_5)" (( "(") (binary_expression "0x3f < param_5" (number_literal "0x3f") (< "<") (identifier "param_5")) () ")")) (compound_statement "{\n    do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);\n  }" ({ "{") (do_statement "do {\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    } while (0x3f < param_5);" (do "do") (compound_statement "{\n      if (uVar4 != 0) break;\n      param_5 = param_5 - 0x40;\n      puVar3 = puVar3 + 1;\n      uVar4 = *puVar3;\n    }" ({ "{") (if_statement "if (uVar4 != 0) break;" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "param_5 = param_5 - 0x40;" (assignment_expression "param_5 = param_5 - 0x40" (identifier "param_5") (= "=") (binary_expression "param_5 - 0x40" (identifier "param_5") (- "-") (number_literal "0x40"))) (; ";")) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 1" (identifier "puVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = *puVar3;" (assignment_expression "uVar4 = *puVar3" (identifier "uVar4") (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(0x3f < param_5)" (( "(") (binary_expression "0x3f < param_5" (number_literal "0x3f") (< "<") (identifier "param_5")) () ")")) (; ";")) (} "}"))) (expression_statement "lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3);" (assignment_expression "lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3)" (identifier "lVar6") (= "=") (binary_expression "(((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -\n          ((long)puVar3 - (long)puVar1 >> 3)" (parenthesized_expression "(((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f))" (( "(") (binary_expression "((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)" (parenthesized_expression "((long)uVar7 >> 0x3f ^ uVar7)" (( "(") (binary_expression "(long)uVar7 >> 0x3f ^ uVar7" (binary_expression "(long)uVar7 >> 0x3f" (cast_expression "(long)uVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar7")) (>> ">>") (number_literal "0x3f")) (^ "^") (identifier "uVar7")) () ")")) (- "-") (parenthesized_expression "((long)uVar7 >> 0x3f)" (( "(") (binary_expression "(long)uVar7 >> 0x3f" (cast_expression "(long)uVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar7")) (>> ">>") (number_literal "0x3f")) () ")"))) () ")")) (- "-") (parenthesized_expression "((long)puVar3 - (long)puVar1 >> 3)" (( "(") (binary_expression "(long)puVar3 - (long)puVar1 >> 3" (binary_expression "(long)puVar3 - (long)puVar1" (cast_expression "(long)puVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar3")) (- "-") (cast_expression "(long)puVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar1"))) (>> ">>") (number_literal "3")) () ")")))) (; ";")) (if_statement "if (*param_2 < lVar6) {\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }\n  else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" (if "if") (parenthesized_expression "(*param_2 < lVar6)" (( "(") (binary_expression "*param_2 < lVar6" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (< "<") (identifier "lVar6")) () ")")) (compound_statement "{\n    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);\n  }" ({ "{") (expression_statement "puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);" (assignment_expression "puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6)" (identifier "puVar1") (= "=") (cast_expression "(ulong *)__gmpz_realloc(param_2,lVar6)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "__gmpz_realloc(param_2,lVar6)" (identifier "__gmpz_realloc") (argument_list "(param_2,lVar6)" (( "(") (identifier "param_2") (, ",") (identifier "lVar6") () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" (else "else") (compound_statement "{\n    puVar1 = *(ulong **)(param_2 + 2);\n  }" ({ "{") (expression_statement "puVar1 = *(ulong **)(param_2 + 2);" (assignment_expression "puVar1 = *(ulong **)(param_2 + 2)" (identifier "puVar1") (= "=") (pointer_expression "*(ulong **)(param_2 + 2)" (* "*") (cast_expression "(ulong **)(param_2 + 2)" (( "(") (type_descriptor "ulong **" (type_identifier "ulong") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 2)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (((uVar4 & 1) == 0) && (param_5 != 0)) {\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }\n  else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" (if "if") (parenthesized_expression "(((uVar4 & 1) == 0) && (param_5 != 0))" (( "(") (binary_expression "((uVar4 & 1) == 0) && (param_5 != 0)" (parenthesized_expression "((uVar4 & 1) == 0)" (( "(") (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" (( "(") (binary_expression "uVar4 & 1" (identifier "uVar4") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(param_5 != 0)" (( "(") (binary_expression "param_5 != 0" (identifier "param_5") (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    uVar2 = param_5;\n    if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }\n    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);\n    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);\n    param_5 = param_5 - uVar2;\n  }" ({ "{") (expression_statement "uVar2 = param_5;" (assignment_expression "uVar2 = param_5" (identifier "uVar2") (= "=") (identifier "param_5")) (; ";")) (if_statement "if (uVar4 != 0) {\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar2 = 0;\n      if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }\n      if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }\n    }" ({ "{") (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (if_statement "if (uVar4 != 0) {\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }\n      }" ({ "{") (for_statement "for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {\n        }" (for "for") (( "(") (; ";") (binary_expression "(uVar4 >> uVar2 & 1) == 0" (parenthesized_expression "(uVar4 >> uVar2 & 1)" (( "(") (binary_expression "uVar4 >> uVar2 & 1" (binary_expression "uVar4 >> uVar2" (identifier "uVar4") (>> ">>") (identifier "uVar2")) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) (; ";") (assignment_expression "uVar2 = uVar2 + 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1"))) () ")") (compound_statement "{\n        }" ({ "{") (} "}"))) (} "}"))) (if_statement "if (param_5 < uVar2) {\n        uVar2 = param_5;\n      }" (if "if") (parenthesized_expression "(param_5 < uVar2)" (( "(") (binary_expression "param_5 < uVar2" (identifier "param_5") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n        uVar2 = param_5;\n      }" ({ "{") (expression_statement "uVar2 = param_5;" (assignment_expression "uVar2 = param_5" (identifier "uVar2") (= "=") (identifier "param_5")) (; ";")) (} "}"))) (} "}"))) (expression_statement "__gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);" (call_expression "__gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff)" (identifier "__gmpn_rshift") (argument_list "(puVar1,puVar3,lVar6,uVar2 & 0xffffffff)" (( "(") (identifier "puVar1") (, ",") (identifier "puVar3") (, ",") (identifier "lVar6") (, ",") (binary_expression "uVar2 & 0xffffffff" (identifier "uVar2") (& "&") (number_literal "0xffffffff")) () ")"))) (; ";")) (expression_statement "lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);" (assignment_expression "lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0)" (identifier "lVar6") (= "=") (binary_expression "lVar6 - (ulong)(puVar1[lVar6 + -1] == 0)" (identifier "lVar6") (- "-") (call_expression "(ulong)(puVar1[lVar6 + -1] == 0)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(puVar1[lVar6 + -1] == 0)" (( "(") (binary_expression "puVar1[lVar6 + -1] == 0" (subscript_expression "puVar1[lVar6 + -1]" (identifier "puVar1") ([ "[") (binary_expression "lVar6 + -1" (identifier "lVar6") (+ "+") (number_literal "-1")) (] "]")) (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "param_5 = param_5 - uVar2;" (assignment_expression "param_5 = param_5 - uVar2" (identifier "param_5") (= "=") (binary_expression "param_5 - uVar2" (identifier "param_5") (- "-") (identifier "uVar2"))) (; ";")) (} "}")) (else_clause "else if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" (else "else") (if_statement "if (puVar1 != puVar3) {\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" (if "if") (parenthesized_expression "(puVar1 != puVar3)" (( "(") (binary_expression "puVar1 != puVar3" (identifier "puVar1") (!= "!=") (identifier "puVar3")) () ")")) (compound_statement "{\n    __gmpn_copyi(puVar1,puVar3,lVar6);\n  }" ({ "{") (expression_statement "__gmpn_copyi(puVar1,puVar3,lVar6);" (call_expression "__gmpn_copyi(puVar1,puVar3,lVar6)" (identifier "__gmpn_copyi") (argument_list "(puVar1,puVar3,lVar6)" (( "(") (identifier "puVar1") (, ",") (identifier "puVar3") (, ",") (identifier "lVar6") () ")"))) (; ";")) (} "}"))))) (expression_statement "iVar5 = (int)lVar6;" (assignment_expression "iVar5 = (int)lVar6" (identifier "iVar5") (= "=") (cast_expression "(int)lVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar6"))) (; ";")) (if_statement "if ((long)uVar7 < 0) {\n    iVar5 = -(int)lVar6;\n  }" (if "if") (parenthesized_expression "((long)uVar7 < 0)" (( "(") (binary_expression "(long)uVar7 < 0" (cast_expression "(long)uVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar7")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    iVar5 = -(int)lVar6;\n  }" ({ "{") (expression_statement "iVar5 = -(int)lVar6;" (assignment_expression "iVar5 = -(int)lVar6" (identifier "iVar5") (= "=") (unary_expression "-(int)lVar6" (- "-") (cast_expression "(int)lVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar6")))) (; ";")) (} "}"))) (expression_statement "param_2[1] = iVar5;" (assignment_expression "param_2[1] = iVar5" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar5")) (; ";")) (if_statement "if (param_5 == 0) {\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }\n  else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" (if "if") (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }\n  }" ({ "{") (if_statement "if (param_1 != param_3) {\n      __gmpz_set(param_1);\n    }" (if "if") (parenthesized_expression "(param_1 != param_3)" (( "(") (binary_expression "param_1 != param_3" (identifier "param_1") (!= "!=") (identifier "param_3")) () ")")) (compound_statement "{\n      __gmpz_set(param_1);\n    }" ({ "{") (expression_statement "__gmpz_set(param_1);" (call_expression "__gmpz_set(param_1)" (identifier "__gmpz_set") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" (else "else") (compound_statement "{\n    __gmpz_mul_2exp(param_1,param_3,param_5);\n  }" ({ "{") (expression_statement "__gmpz_mul_2exp(param_1,param_3,param_5);" (call_expression "__gmpz_mul_2exp(param_1,param_3,param_5)" (identifier "__gmpz_mul_2exp") (argument_list "(param_1,param_3,param_5)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") (, ",") (identifier "param_5") () ")"))) (; ";")) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 var_11,type_1 rdst,type_2 var_12,type_2 rsrc,type_3 var_1)

{
  type_4 *var_9;
  type_5 var_7;
  type_4 *var_3;
  type_4 var_2;
  int iVar5;
  long var_5;
  type_5 var_4;
  
  var_4 = (type_5)rsrc->_mp_size;
  var_9 = rsrc->_mp_d;
  var_2 = *var_9;
  var_3 = var_9;
  if (0x3f < var_1) {
    do {
      if (var_2 != 0) break;
      var_1 = var_1 - 0x40;
      var_3 = var_3 + 1;
      var_2 = *var_3;
    } while (0x3f < var_1);
  }
  var_5 = (((long)var_4 >> 0x3f ^ var_4) - ((long)var_4 >> 0x3f)) -
              ((long)var_3 - (long)var_9 >> 3);
  if (rdst->_mp_alloc < var_5) {
    var_9 = (type_4 *)var_6(rdst,var_5);
  }
  else {
    var_9 = rdst->_mp_d;
  }
  if (((var_2 & 1) == 0) && (var_1 != 0)) {
    var_7 = var_1;
    if (var_2 != 0) {
      var_7 = 0;
      if (var_2 != 0) {
        for (; (var_2 >> var_7 & 1) == 0; var_7 = var_7 + 1) {
        }
      }
      if (var_1 < var_7) {
        var_7 = var_1;
      }
    }
    var_8(var_9,var_3,var_5,var_7 & 0xffffffff);
    var_5 = var_5 - (type_5)(var_9[var_5 + -1] == 0);
    var_1 = var_1 - var_7;
  }
  else if (var_9 != var_3) {
    var_10(var_9,var_3,var_5);
  }
  iVar5 = (int)var_5;
  if ((long)var_4 < 0) {
    iVar5 = -(int)var_5;
  }
  rdst->_mp_size = iVar5;
  if (var_1 == 0) {
    if (var_11 != var_12) {
      var_13(var_11,var_12);
    }
  }
  else {
    var_14(var_11,var_12,var_1);
  }
  return;
}


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

void MASKED(long param_1,int *param_2,long param_3,long param_4,ulong param_5)

{
  ulong *puVar1;
  ulong uVar2;
  ulong *puVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  ulong uVar7;
  
  uVar7 = (ulong)*(int *)(param_4 + 4);
  puVar1 = *(ulong **)(param_4 + 8);
  uVar4 = *puVar1;
  puVar3 = puVar1;
  if (0x3f < param_5) {
    do {
      if (uVar4 != 0) break;
      param_5 = param_5 - 0x40;
      puVar3 = puVar3 + 1;
      uVar4 = *puVar3;
    } while (0x3f < param_5);
  }
  lVar6 = (((long)uVar7 >> 0x3f ^ uVar7) - ((long)uVar7 >> 0x3f)) -
          ((long)puVar3 - (long)puVar1 >> 3);
  if (*param_2 < lVar6) {
    puVar1 = (ulong *)__gmpz_realloc(param_2,lVar6);
  }
  else {
    puVar1 = *(ulong **)(param_2 + 2);
  }
  if (((uVar4 & 1) == 0) && (param_5 != 0)) {
    uVar2 = param_5;
    if (uVar4 != 0) {
      uVar2 = 0;
      if (uVar4 != 0) {
        for (; (uVar4 >> uVar2 & 1) == 0; uVar2 = uVar2 + 1) {
        }
      }
      if (param_5 < uVar2) {
        uVar2 = param_5;
      }
    }
    __gmpn_rshift(puVar1,puVar3,lVar6,uVar2 & 0xffffffff);
    lVar6 = lVar6 - (ulong)(puVar1[lVar6 + -1] == 0);
    param_5 = param_5 - uVar2;
  }
  else if (puVar1 != puVar3) {
    __gmpn_copyi(puVar1,puVar3,lVar6);
  }
  iVar5 = (int)lVar6;
  if ((long)uVar7 < 0) {
    iVar5 = -(int)lVar6;
  }
  param_2[1] = iVar5;
  if (param_5 == 0) {
    if (param_1 != param_3) {
      __gmpz_set(param_1);
    }
  }
  else {
    __gmpz_mul_2exp(param_1,param_3,param_5);
  }
  return;
}

