
void * dss_createkey(ssh_signkey *self,uchar *pub_blob,int pub_len,uchar *priv_blob,int priv_len)

{
  long lVar1;
  int iVar2;
  undefined8 *key;
  Bignum pvVar3;
  Bignum_conflict a;
  long in_FS_OFFSET;
  int local_bc [4];
  int hashlen;
  char *pb;
  char *hash;
  SHA_State s;
  uchar digest [20];
  
  lVar1 = *(long *)(in_FS_OFFSET + 0x28);
  local_bc[0] = priv_len;
  pb = (char *)priv_blob;
  key = (undefined8 *)dss_newkey(self,(char *)pub_blob,pub_len);
  if (key != (undefined8 *)0x0) {
    pvVar3 = getmp(&pb,local_bc);
    key[4] = pvVar3;
    if (pvVar3 == (Bignum)0x0) {
      dss_freekey(key);
      key = (undefined8 *)0x0;
    }
    else {
      hashlen = -1;
      getstring(&pb,local_bc,&hash,&hashlen);
      if (hashlen == 0x14) {
        SHA_Init((SHA_CTX *)&s);
        sha_mpint(&s,(Bignum)*key);
        sha_mpint(&s,(Bignum)key[1]);
        sha_mpint(&s,(Bignum)key[2]);
        SHA_Final(&s,digest);
        iVar2 = memcmp(hash,digest,0x14);
        if (iVar2 != 0) {
          dss_freekey(key);
          key = (undefined8 *)0x0;
          goto LAB_00138bf1;
        }
      }
      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);
      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);
      if (iVar2 == 0) {
        freebn(a);
      }
      else {
        dss_freekey(key);
        freebn(a);
        key = (undefined8 *)0x0;
      }
    }
  }
LAB_00138bf1:
  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {
    return key;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}



undefined8 * FUN_00138b4a(void)

{
  int iVar1;
  undefined8 *puVar2;
  long lVar3;
  undefined8 uVar4;
  undefined8 in_RCX;
  undefined4 in_R8D;
  long in_FS_OFFSET;
  undefined4 local_bc [4];
  int local_ac;
  undefined8 local_a8;
  void *local_a0;
  undefined1 local_98 [96];
  undefined1 local_38 [24];
  long local_20;
  
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  local_bc[0] = in_R8D;
  local_a8 = in_RCX;
  puVar2 = (undefined8 *)FUN_001389cf();
  if (puVar2 != (undefined8 *)0x0) {
    lVar3 = FUN_00138178(&local_a8,local_bc);
    puVar2[4] = lVar3;
    if (lVar3 == 0) {
      FUN_001388bc(puVar2);
      puVar2 = (undefined8 *)0x0;
    }
    else {
      local_ac = -1;
      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);
      if (local_ac == 0x14) {
        FUN_00147955(local_98);
        FUN_00138505(local_98,*puVar2);
        FUN_00138505(local_98,puVar2[1]);
        FUN_00138505(local_98,puVar2[2]);
        FUN_00147cb6(local_98,local_38);
        iVar1 = memcmp(local_a0,local_38,0x14);
        if (iVar1 != 0) {
          FUN_001388bc(puVar2);
          puVar2 = (undefined8 *)0x0;
          goto LAB_00138bf1;
        }
      }
      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);
      iVar1 = FUN_00132034(uVar4,puVar2[3]);
      if (iVar1 == 0) {
        FUN_00131850(uVar4);
      }
      else {
        FUN_001388bc(puVar2);
        FUN_00131850(uVar4);
        puVar2 = (undefined8 *)0x0;
      }
    }
  }
LAB_00138bf1:
  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {
    return puVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0xb0
MOV dword ptr [RSP + 0xc],R8D
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0xa8],RAX
XOR EAX,EAX
MOV qword ptr [RSP + 0x20],RCX
CALL 0x001389cf
MOV RBX,RAX
TEST RAX,RAX
JZ 0x00138bf1
LEA RSI,[RSP + 0xc]
LEA RDI,[RSP + 0x20]
CALL 0x00138178
MOV RBP,RAX
MOV qword ptr [RBX + 0x20],RAX
TEST RAX,RAX
JZ 0x00138c17
MOV dword ptr [RSP + 0x1c],0xffffffff
LEA RCX,[RSP + 0x1c]
LEA RDX,[RSP + 0x28]
LEA RSI,[RSP + 0xc]
LEA RDI,[RSP + 0x20]
CALL 0x00137e49
CMP dword ptr [RSP + 0x1c],0x14
JZ 0x00138c24
MOV RSI,qword ptr [RBX + 0x20]
MOV RDI,qword ptr [RBX + 0x10]
MOV RDX,qword ptr [RBX]
CALL 0x00133492
MOV RBP,RAX
MOV RSI,qword ptr [RBX + 0x18]
MOV RDI,RAX
CALL 0x00132034
TEST EAX,EAX
JNZ 0x00138c93
MOV RDI,RBP
CALL 0x00131850
MOV RAX,RBX
MOV RCX,qword ptr [RSP + 0xa8]
XOR RCX,qword ptr FS:[0x28]
JNZ 0x00138cad
ADD RSP,0xb0
POP RBX
POP RBP
POP R12
RET
MOV RDI,RBX
CALL 0x001388bc
MOV RBX,RBP
JMP 0x00138bf1
LEA RBP,[RSP + 0x30]
MOV RDI,RBP
CALL 0x00147955
MOV RSI,qword ptr [RBX]
MOV RDI,RBP
CALL 0x00138505
MOV RSI,qword ptr [RBX + 0x8]
MOV RDI,RBP
CALL 0x00138505
MOV RSI,qword ptr [RBX + 0x10]
MOV RDI,RBP
CALL 0x00138505
LEA R12,[RSP + 0x90]
MOV RSI,R12
MOV RDI,RBP
CALL 0x00147cb6
MOV EDX,0x14
MOV RSI,R12
MOV RDI,qword ptr [RSP + 0x28]
CALL 0x00108440
TEST EAX,EAX
JZ 0x00138bc2
MOV RDI,RBX
CALL 0x001388bc
MOV EBX,0x0
JMP 0x00138bf1
MOV RDI,RBX
CALL 0x001388bc
MOV RDI,RBP
CALL 0x00131850
MOV EBX,0x0
JMP 0x00138bf1
CALL 0x00108280
(translation_unit "undefined8 * FUN_00138b4a(void)\n\n{\n  int iVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 uVar4;\n  undefined8 in_RCX;\n  undefined4 in_R8D;\n  long in_FS_OFFSET;\n  undefined4 local_bc [4];\n  int local_ac;\n  undefined8 local_a8;\n  void *local_a0;\n  undefined1 local_98 [96];\n  undefined1 local_38 [24];\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = in_R8D;\n  local_a8 = in_RCX;\n  puVar2 = (undefined8 *)FUN_001389cf();\n  if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}\n\n" (function_definition "undefined8 * FUN_00138b4a(void)\n\n{\n  int iVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 uVar4;\n  undefined8 in_RCX;\n  undefined4 in_R8D;\n  long in_FS_OFFSET;\n  undefined4 local_bc [4];\n  int local_ac;\n  undefined8 local_a8;\n  void *local_a0;\n  undefined1 local_98 [96];\n  undefined1 local_38 [24];\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = in_R8D;\n  local_a8 = in_RCX;\n  puVar2 = (undefined8 *)FUN_001389cf();\n  if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" type_identifier (pointer_declarator "* FUN_00138b4a(void)" * (function_declarator "FUN_00138b4a(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) )))) (compound_statement "{\n  int iVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 uVar4;\n  undefined8 in_RCX;\n  undefined4 in_R8D;\n  long in_FS_OFFSET;\n  undefined4 local_bc [4];\n  int local_ac;\n  undefined8 local_a8;\n  void *local_a0;\n  undefined1 local_98 [96];\n  undefined1 local_38 [24];\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = in_R8D;\n  local_a8 = in_RCX;\n  puVar2 = (undefined8 *)FUN_001389cf();\n  if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "undefined8 in_RCX;" type_identifier identifier ;) (declaration "undefined4 in_R8D;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 local_bc [4];" type_identifier (array_declarator "local_bc [4]" identifier [ number_literal ]) ;) (declaration "int local_ac;" primitive_type identifier ;) (declaration "undefined8 local_a8;" type_identifier identifier ;) (declaration "void *local_a0;" primitive_type (pointer_declarator "*local_a0" * identifier) ;) (declaration "undefined1 local_98 [96];" type_identifier (array_declarator "local_98 [96]" identifier [ number_literal ]) ;) (declaration "undefined1 local_38 [24];" type_identifier (array_declarator "local_38 [24]" identifier [ number_literal ]) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "local_bc[0] = in_R8D;" (assignment_expression "local_bc[0] = in_R8D" (subscript_expression "local_bc[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_a8 = in_RCX;" (assignment_expression "local_a8 = in_RCX" identifier = identifier) ;) (expression_statement "puVar2 = (undefined8 *)FUN_001389cf();" (assignment_expression "puVar2 = (undefined8 *)FUN_001389cf()" identifier = (cast_expression "(undefined8 *)FUN_001389cf()" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001389cf()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }" { (expression_statement "lVar3 = FUN_00138178(&local_a8,local_bc);" (assignment_expression "lVar3 = FUN_00138178(&local_a8,local_bc)" identifier = (call_expression "FUN_00138178(&local_a8,local_bc)" identifier (argument_list "(&local_a8,local_bc)" ( (pointer_expression "&local_a8" & identifier) , identifier )))) ;) (expression_statement "puVar2[4] = lVar3;" (assignment_expression "puVar2[4] = lVar3" (subscript_expression "puVar2[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" if (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }" { (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" else (compound_statement "{\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" { (expression_statement "local_ac = -1;" (assignment_expression "local_ac = -1" identifier = number_literal) ;) (expression_statement "FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);" (call_expression "FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac)" identifier (argument_list "(&local_a8,local_bc,&local_a0,&local_ac)" ( (pointer_expression "&local_a8" & identifier) , identifier , (pointer_expression "&local_a0" & identifier) , (pointer_expression "&local_ac" & identifier) ))) ;) (if_statement "if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }" if (parenthesized_expression "(local_ac == 0x14)" ( (binary_expression "local_ac == 0x14" identifier == number_literal) )) (compound_statement "{\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }" { (expression_statement "FUN_00147955(local_98);" (call_expression "FUN_00147955(local_98)" identifier (argument_list "(local_98)" ( identifier ))) ;) (expression_statement "FUN_00138505(local_98,*puVar2);" (call_expression "FUN_00138505(local_98,*puVar2)" identifier (argument_list "(local_98,*puVar2)" ( identifier , (pointer_expression "*puVar2" * identifier) ))) ;) (expression_statement "FUN_00138505(local_98,puVar2[1]);" (call_expression "FUN_00138505(local_98,puVar2[1])" identifier (argument_list "(local_98,puVar2[1])" ( identifier , (subscript_expression "puVar2[1]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_00138505(local_98,puVar2[2]);" (call_expression "FUN_00138505(local_98,puVar2[2])" identifier (argument_list "(local_98,puVar2[2])" ( identifier , (subscript_expression "puVar2[2]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_00147cb6(local_98,local_38);" (call_expression "FUN_00147cb6(local_98,local_38)" identifier (argument_list "(local_98,local_38)" ( identifier , identifier ))) ;) (expression_statement "iVar1 = memcmp(local_a0,local_38,0x14);" (assignment_expression "iVar1 = memcmp(local_a0,local_38,0x14)" identifier = (call_expression "memcmp(local_a0,local_38,0x14)" identifier (argument_list "(local_a0,local_38,0x14)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }" { (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00138bf1;" goto statement_identifier ;) })) })) (expression_statement "uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);" (assignment_expression "uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2)" identifier = (call_expression "FUN_00133492(puVar2[2],puVar2[4],*puVar2)" identifier (argument_list "(puVar2[2],puVar2[4],*puVar2)" ( (subscript_expression "puVar2[2]" identifier [ number_literal ]) , (subscript_expression "puVar2[4]" identifier [ number_literal ]) , (pointer_expression "*puVar2" * identifier) )))) ;) (expression_statement "iVar1 = FUN_00132034(uVar4,puVar2[3]);" (assignment_expression "iVar1 = FUN_00132034(uVar4,puVar2[3])" identifier = (call_expression "FUN_00132034(uVar4,puVar2[3])" identifier (argument_list "(uVar4,puVar2[3])" ( identifier , (subscript_expression "puVar2[3]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_00131850(uVar4);\n      }" { (expression_statement "FUN_00131850(uVar4);" (call_expression "FUN_00131850(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) }) (else_clause "else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" else (compound_statement "{\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" { (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "FUN_00131850(uVar4);" (call_expression "FUN_00131850(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) }))) })) (labeled_statement "LAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }" statement_identifier : (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }" if (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return puVar2;\n  }" { (return_statement "return puVar2;" return identifier ;) }))) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "void * dss_createkey(ssh_signkey *self,uchar *pub_blob,int pub_len,uchar *priv_blob,int priv_len)\n\n{\n  long lVar1;\n  int iVar2;\n  undefined8 *key;\n  Bignum pvVar3;\n  Bignum_conflict a;\n  long in_FS_OFFSET;\n  int local_bc [4];\n  int hashlen;\n  char *pb;\n  char *hash;\n  SHA_State s;\n  uchar digest [20];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = priv_len;\n  pb = (char *)priv_blob;\n  key = (undefined8 *)dss_newkey(self,(char *)pub_blob,pub_len);\n  if (key != (undefined8 *)0x0) {\n    pvVar3 = getmp(&pb,local_bc);\n    key[4] = pvVar3;\n    if (pvVar3 == (Bignum)0x0) {\n      dss_freekey(key);\n      key = (undefined8 *)0x0;\n    }\n    else {\n      hashlen = -1;\n      getstring(&pb,local_bc,&hash,&hashlen);\n      if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);\n      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);\n      if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return key;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}\n\n" (function_definition "void * dss_createkey(ssh_signkey *self,uchar *pub_blob,int pub_len,uchar *priv_blob,int priv_len)\n\n{\n  long lVar1;\n  int iVar2;\n  undefined8 *key;\n  Bignum pvVar3;\n  Bignum_conflict a;\n  long in_FS_OFFSET;\n  int local_bc [4];\n  int hashlen;\n  char *pb;\n  char *hash;\n  SHA_State s;\n  uchar digest [20];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = priv_len;\n  pb = (char *)priv_blob;\n  key = (undefined8 *)dss_newkey(self,(char *)pub_blob,pub_len);\n  if (key != (undefined8 *)0x0) {\n    pvVar3 = getmp(&pb,local_bc);\n    key[4] = pvVar3;\n    if (pvVar3 == (Bignum)0x0) {\n      dss_freekey(key);\n      key = (undefined8 *)0x0;\n    }\n    else {\n      hashlen = -1;\n      getstring(&pb,local_bc,&hash,&hashlen);\n      if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);\n      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);\n      if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return key;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" primitive_type (pointer_declarator "* dss_createkey(ssh_signkey *self,uchar *pub_blob,int pub_len,uchar *priv_blob,int priv_len)" * (function_declarator "dss_createkey(ssh_signkey *self,uchar *pub_blob,int pub_len,uchar *priv_blob,int priv_len)" identifier (parameter_list "(ssh_signkey *self,uchar *pub_blob,int pub_len,uchar *priv_blob,int priv_len)" ( (parameter_declaration "ssh_signkey *self" type_identifier (pointer_declarator "*self" * identifier)) , (parameter_declaration "uchar *pub_blob" type_identifier (pointer_declarator "*pub_blob" * identifier)) , (parameter_declaration "int pub_len" primitive_type identifier) , (parameter_declaration "uchar *priv_blob" type_identifier (pointer_declarator "*priv_blob" * identifier)) , (parameter_declaration "int priv_len" primitive_type identifier) )))) (compound_statement "{\n  long lVar1;\n  int iVar2;\n  undefined8 *key;\n  Bignum pvVar3;\n  Bignum_conflict a;\n  long in_FS_OFFSET;\n  int local_bc [4];\n  int hashlen;\n  char *pb;\n  char *hash;\n  SHA_State s;\n  uchar digest [20];\n  \n  lVar1 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = priv_len;\n  pb = (char *)priv_blob;\n  key = (undefined8 *)dss_newkey(self,(char *)pub_blob,pub_len);\n  if (key != (undefined8 *)0x0) {\n    pvVar3 = getmp(&pb,local_bc);\n    key[4] = pvVar3;\n    if (pvVar3 == (Bignum)0x0) {\n      dss_freekey(key);\n      key = (undefined8 *)0x0;\n    }\n    else {\n      hashlen = -1;\n      getstring(&pb,local_bc,&hash,&hashlen);\n      if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);\n      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);\n      if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return key;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined8 *key;" type_identifier (pointer_declarator "*key" * identifier) ;) (declaration "Bignum pvVar3;" type_identifier identifier ;) (declaration "Bignum_conflict a;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "int local_bc [4];" primitive_type (array_declarator "local_bc [4]" identifier [ number_literal ]) ;) (declaration "int hashlen;" primitive_type identifier ;) (declaration "char *pb;" primitive_type (pointer_declarator "*pb" * identifier) ;) (declaration "char *hash;" primitive_type (pointer_declarator "*hash" * identifier) ;) (declaration "SHA_State s;" type_identifier identifier ;) (declaration "uchar digest [20];" type_identifier (array_declarator "digest [20]" identifier [ number_literal ]) ;) (expression_statement "lVar1 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar1 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "local_bc[0] = priv_len;" (assignment_expression "local_bc[0] = priv_len" (subscript_expression "local_bc[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pb = (char *)priv_blob;" (assignment_expression "pb = (char *)priv_blob" identifier = (cast_expression "(char *)priv_blob" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "key = (undefined8 *)dss_newkey(self,(char *)pub_blob,pub_len);" (assignment_expression "key = (undefined8 *)dss_newkey(self,(char *)pub_blob,pub_len)" identifier = (cast_expression "(undefined8 *)dss_newkey(self,(char *)pub_blob,pub_len)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "dss_newkey(self,(char *)pub_blob,pub_len)" identifier (argument_list "(self,(char *)pub_blob,pub_len)" ( identifier , (cast_expression "(char *)pub_blob" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))))) ;) (if_statement "if (key != (undefined8 *)0x0) {\n    pvVar3 = getmp(&pb,local_bc);\n    key[4] = pvVar3;\n    if (pvVar3 == (Bignum)0x0) {\n      dss_freekey(key);\n      key = (undefined8 *)0x0;\n    }\n    else {\n      hashlen = -1;\n      getstring(&pb,local_bc,&hash,&hashlen);\n      if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);\n      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);\n      if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }\n    }\n  }" if (parenthesized_expression "(key != (undefined8 *)0x0)" ( (binary_expression "key != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pvVar3 = getmp(&pb,local_bc);\n    key[4] = pvVar3;\n    if (pvVar3 == (Bignum)0x0) {\n      dss_freekey(key);\n      key = (undefined8 *)0x0;\n    }\n    else {\n      hashlen = -1;\n      getstring(&pb,local_bc,&hash,&hashlen);\n      if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);\n      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);\n      if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }\n    }\n  }" { (expression_statement "pvVar3 = getmp(&pb,local_bc);" (assignment_expression "pvVar3 = getmp(&pb,local_bc)" identifier = (call_expression "getmp(&pb,local_bc)" identifier (argument_list "(&pb,local_bc)" ( (pointer_expression "&pb" & identifier) , identifier )))) ;) (expression_statement "key[4] = pvVar3;" (assignment_expression "key[4] = pvVar3" (subscript_expression "key[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar3 == (Bignum)0x0) {\n      dss_freekey(key);\n      key = (undefined8 *)0x0;\n    }\n    else {\n      hashlen = -1;\n      getstring(&pb,local_bc,&hash,&hashlen);\n      if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);\n      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);\n      if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }\n    }" if (parenthesized_expression "(pvVar3 == (Bignum)0x0)" ( (binary_expression "pvVar3 == (Bignum)0x0" identifier == (cast_expression "(Bignum)0x0" ( (type_descriptor "Bignum" type_identifier) ) number_literal)) )) (compound_statement "{\n      dss_freekey(key);\n      key = (undefined8 *)0x0;\n    }" { (expression_statement "dss_freekey(key);" (call_expression "dss_freekey(key)" identifier (argument_list "(key)" ( identifier ))) ;) (expression_statement "key = (undefined8 *)0x0;" (assignment_expression "key = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      hashlen = -1;\n      getstring(&pb,local_bc,&hash,&hashlen);\n      if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);\n      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);\n      if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }\n    }" else (compound_statement "{\n      hashlen = -1;\n      getstring(&pb,local_bc,&hash,&hashlen);\n      if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);\n      iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);\n      if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }\n    }" { (expression_statement "hashlen = -1;" (assignment_expression "hashlen = -1" identifier = number_literal) ;) (expression_statement "getstring(&pb,local_bc,&hash,&hashlen);" (call_expression "getstring(&pb,local_bc,&hash,&hashlen)" identifier (argument_list "(&pb,local_bc,&hash,&hashlen)" ( (pointer_expression "&pb" & identifier) , identifier , (pointer_expression "&hash" & identifier) , (pointer_expression "&hashlen" & identifier) ))) ;) (if_statement "if (hashlen == 0x14) {\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }" if (parenthesized_expression "(hashlen == 0x14)" ( (binary_expression "hashlen == 0x14" identifier == number_literal) )) (compound_statement "{\n        SHA_Init((SHA_CTX *)&s);\n        sha_mpint(&s,(Bignum)*key);\n        sha_mpint(&s,(Bignum)key[1]);\n        sha_mpint(&s,(Bignum)key[2]);\n        SHA_Final(&s,digest);\n        iVar2 = memcmp(hash,digest,0x14);\n        if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }" { (expression_statement "SHA_Init((SHA_CTX *)&s);" (call_expression "SHA_Init((SHA_CTX *)&s)" identifier (argument_list "((SHA_CTX *)&s)" ( (cast_expression "(SHA_CTX *)&s" ( (type_descriptor "SHA_CTX *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&s" & identifier)) ))) ;) (expression_statement "sha_mpint(&s,(Bignum)*key);" (call_expression "sha_mpint(&s,(Bignum)*key)" identifier (argument_list "(&s,(Bignum)*key)" ( (pointer_expression "&s" & identifier) , (binary_expression "(Bignum)*key" (parenthesized_expression "(Bignum)" ( identifier )) * identifier) ))) ;) (expression_statement "sha_mpint(&s,(Bignum)key[1]);" (call_expression "sha_mpint(&s,(Bignum)key[1])" identifier (argument_list "(&s,(Bignum)key[1])" ( (pointer_expression "&s" & identifier) , (cast_expression "(Bignum)key[1]" ( (type_descriptor "Bignum" type_identifier) ) (subscript_expression "key[1]" identifier [ number_literal ])) ))) ;) (expression_statement "sha_mpint(&s,(Bignum)key[2]);" (call_expression "sha_mpint(&s,(Bignum)key[2])" identifier (argument_list "(&s,(Bignum)key[2])" ( (pointer_expression "&s" & identifier) , (cast_expression "(Bignum)key[2]" ( (type_descriptor "Bignum" type_identifier) ) (subscript_expression "key[2]" identifier [ number_literal ])) ))) ;) (expression_statement "SHA_Final(&s,digest);" (call_expression "SHA_Final(&s,digest)" identifier (argument_list "(&s,digest)" ( (pointer_expression "&s" & identifier) , identifier ))) ;) (expression_statement "iVar2 = memcmp(hash,digest,0x14);" (assignment_expression "iVar2 = memcmp(hash,digest,0x14)" identifier = (call_expression "memcmp(hash,digest,0x14)" identifier (argument_list "(hash,digest,0x14)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar2 != 0) {\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n          dss_freekey(key);\n          key = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }" { (expression_statement "dss_freekey(key);" (call_expression "dss_freekey(key)" identifier (argument_list "(key)" ( identifier ))) ;) (expression_statement "key = (undefined8 *)0x0;" (assignment_expression "key = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00138bf1;" goto statement_identifier ;) })) })) (expression_statement "a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key);" (assignment_expression "a = modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key)" identifier = (call_expression "modpow((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key)" identifier (argument_list "((Bignum_conflict)key[2],(Bignum_conflict)key[4],(Bignum_conflict)*key)" ( (cast_expression "(Bignum_conflict)key[2]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "key[2]" identifier [ number_literal ])) , (cast_expression "(Bignum_conflict)key[4]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "key[4]" identifier [ number_literal ])) , (binary_expression "(Bignum_conflict)*key" (parenthesized_expression "(Bignum_conflict)" ( identifier )) * identifier) )))) ;) (expression_statement "iVar2 = bignum_cmp(a,(Bignum_conflict)key[3]);" (assignment_expression "iVar2 = bignum_cmp(a,(Bignum_conflict)key[3])" identifier = (call_expression "bignum_cmp(a,(Bignum_conflict)key[3])" identifier (argument_list "(a,(Bignum_conflict)key[3])" ( identifier , (cast_expression "(Bignum_conflict)key[3]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "key[3]" identifier [ number_literal ])) )))) ;) (if_statement "if (iVar2 == 0) {\n        freebn(a);\n      }\n      else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        freebn(a);\n      }" { (expression_statement "freebn(a);" (call_expression "freebn(a)" identifier (argument_list "(a)" ( identifier ))) ;) }) (else_clause "else {\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }" else (compound_statement "{\n        dss_freekey(key);\n        freebn(a);\n        key = (undefined8 *)0x0;\n      }" { (expression_statement "dss_freekey(key);" (call_expression "dss_freekey(key)" identifier (argument_list "(key)" ( identifier ))) ;) (expression_statement "freebn(a);" (call_expression "freebn(a)" identifier (argument_list "(a)" ( identifier ))) ;) (expression_statement "key = (undefined8 *)0x0;" (assignment_expression "key = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) }))) })) (labeled_statement "LAB_00138bf1:\n  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return key;\n  }" statement_identifier : (if_statement "if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return key;\n  }" if (parenthesized_expression "(lVar1 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar1 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return key;\n  }" { (return_statement "return key;" return identifier ;) }))) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "undefined8 * FUN_00138b4a(void)\n\n{\n  int iVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 uVar4;\n  undefined8 in_RCX;\n  undefined4 in_R8D;\n  long in_FS_OFFSET;\n  undefined4 local_bc [4];\n  int local_ac;\n  undefined8 local_a8;\n  void *local_a0;\n  undefined1 local_98 [96];\n  undefined1 local_38 [24];\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = in_R8D;\n  local_a8 = in_RCX;\n  puVar2 = (undefined8 *)FUN_001389cf();\n  if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }\n                    \n  __stack_chk_fail();\n}\n\n" (function_definition "undefined8 * FUN_00138b4a(void)\n\n{\n  int iVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 uVar4;\n  undefined8 in_RCX;\n  undefined4 in_R8D;\n  long in_FS_OFFSET;\n  undefined4 local_bc [4];\n  int local_ac;\n  undefined8 local_a8;\n  void *local_a0;\n  undefined1 local_98 [96];\n  undefined1 local_38 [24];\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = in_R8D;\n  local_a8 = in_RCX;\n  puVar2 = (undefined8 *)FUN_001389cf();\n  if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }\n                    \n  __stack_chk_fail();\n}" type_identifier (pointer_declarator "* FUN_00138b4a(void)" * (function_declarator "FUN_00138b4a(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) )))) (compound_statement "{\n  int iVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 uVar4;\n  undefined8 in_RCX;\n  undefined4 in_R8D;\n  long in_FS_OFFSET;\n  undefined4 local_bc [4];\n  int local_ac;\n  undefined8 local_a8;\n  void *local_a0;\n  undefined1 local_98 [96];\n  undefined1 local_38 [24];\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = in_R8D;\n  local_a8 = in_RCX;\n  puVar2 = (undefined8 *)FUN_001389cf();\n  if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }\n                    \n  __stack_chk_fail();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "undefined8 in_RCX;" type_identifier identifier ;) (declaration "undefined4 in_R8D;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 local_bc [4];" type_identifier (array_declarator "local_bc [4]" identifier [ number_literal ]) ;) (declaration "int local_ac;" primitive_type identifier ;) (declaration "undefined8 local_a8;" type_identifier identifier ;) (declaration "void *local_a0;" primitive_type (pointer_declarator "*local_a0" * identifier) ;) (declaration "undefined1 local_98 [96];" type_identifier (array_declarator "local_98 [96]" identifier [ number_literal ]) ;) (declaration "undefined1 local_38 [24];" type_identifier (array_declarator "local_38 [24]" identifier [ number_literal ]) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "local_bc[0] = in_R8D;" (assignment_expression "local_bc[0] = in_R8D" (subscript_expression "local_bc[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_a8 = in_RCX;" (assignment_expression "local_a8 = in_RCX" identifier = identifier) ;) (expression_statement "puVar2 = (undefined8 *)FUN_001389cf();" (assignment_expression "puVar2 = (undefined8 *)FUN_001389cf()" identifier = (cast_expression "(undefined8 *)FUN_001389cf()" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001389cf()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }" { (expression_statement "lVar3 = FUN_00138178(&local_a8,local_bc);" (assignment_expression "lVar3 = FUN_00138178(&local_a8,local_bc)" identifier = (call_expression "FUN_00138178(&local_a8,local_bc)" identifier (argument_list "(&local_a8,local_bc)" ( (pointer_expression "&local_a8" & identifier) , identifier )))) ;) (expression_statement "puVar2[4] = lVar3;" (assignment_expression "puVar2[4] = lVar3" (subscript_expression "puVar2[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" if (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }" { (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" else (compound_statement "{\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" { (expression_statement "local_ac = -1;" (assignment_expression "local_ac = -1" identifier = number_literal) ;) (expression_statement "FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);" (call_expression "FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac)" identifier (argument_list "(&local_a8,local_bc,&local_a0,&local_ac)" ( (pointer_expression "&local_a8" & identifier) , identifier , (pointer_expression "&local_a0" & identifier) , (pointer_expression "&local_ac" & identifier) ))) ;) (if_statement "if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }" if (parenthesized_expression "(local_ac == 0x14)" ( (binary_expression "local_ac == 0x14" identifier == number_literal) )) (compound_statement "{\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }" { (expression_statement "FUN_00147955(local_98);" (call_expression "FUN_00147955(local_98)" identifier (argument_list "(local_98)" ( identifier ))) ;) (expression_statement "FUN_00138505(local_98,*puVar2);" (call_expression "FUN_00138505(local_98,*puVar2)" identifier (argument_list "(local_98,*puVar2)" ( identifier , (pointer_expression "*puVar2" * identifier) ))) ;) (expression_statement "FUN_00138505(local_98,puVar2[1]);" (call_expression "FUN_00138505(local_98,puVar2[1])" identifier (argument_list "(local_98,puVar2[1])" ( identifier , (subscript_expression "puVar2[1]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_00138505(local_98,puVar2[2]);" (call_expression "FUN_00138505(local_98,puVar2[2])" identifier (argument_list "(local_98,puVar2[2])" ( identifier , (subscript_expression "puVar2[2]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_00147cb6(local_98,local_38);" (call_expression "FUN_00147cb6(local_98,local_38)" identifier (argument_list "(local_98,local_38)" ( identifier , identifier ))) ;) (expression_statement "iVar1 = memcmp(local_a0,local_38,0x14);" (assignment_expression "iVar1 = memcmp(local_a0,local_38,0x14)" identifier = (call_expression "memcmp(local_a0,local_38,0x14)" identifier (argument_list "(local_a0,local_38,0x14)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }" { (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00138bf1;" goto statement_identifier ;) })) })) (expression_statement "uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);" (assignment_expression "uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2)" identifier = (call_expression "FUN_00133492(puVar2[2],puVar2[4],*puVar2)" identifier (argument_list "(puVar2[2],puVar2[4],*puVar2)" ( (subscript_expression "puVar2[2]" identifier [ number_literal ]) , (subscript_expression "puVar2[4]" identifier [ number_literal ]) , (pointer_expression "*puVar2" * identifier) )))) ;) (expression_statement "iVar1 = FUN_00132034(uVar4,puVar2[3]);" (assignment_expression "iVar1 = FUN_00132034(uVar4,puVar2[3])" identifier = (call_expression "FUN_00132034(uVar4,puVar2[3])" identifier (argument_list "(uVar4,puVar2[3])" ( identifier , (subscript_expression "puVar2[3]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_00131850(uVar4);\n      }" { (expression_statement "FUN_00131850(uVar4);" (call_expression "FUN_00131850(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) }) (else_clause "else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" else (compound_statement "{\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" { (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "FUN_00131850(uVar4);" (call_expression "FUN_00131850(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) }))) })) (labeled_statement "LAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }" statement_identifier : (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }" if (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return puVar2;\n  }" { (return_statement "return puVar2;" return identifier ;) }))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (goto_statement goto statement_identifier ;) })) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) , (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }))) }))) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) }))) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "undefined8 * FUN_00138b4a(void)\n\n{\n  int iVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 uVar4;\n  undefined8 in_RCX;\n  undefined4 in_R8D;\n  long in_FS_OFFSET;\n  undefined4 local_bc [4];\n  int local_ac;\n  undefined8 local_a8;\n  void *local_a0;\n  undefined1 local_98 [96];\n  undefined1 local_38 [24];\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = in_R8D;\n  local_a8 = in_RCX;\n  puVar2 = (undefined8 *)FUN_001389cf();\n  if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }\n                    \n  __stack_chk_fail();\n}" (type_identifier "undefined8") (pointer_declarator "* FUN_00138b4a(void)" (* "*") (function_declarator "FUN_00138b4a(void)" (identifier "FUN_00138b4a") (parameter_list "(void)" (( "(") (parameter_declaration "void" (primitive_type "void")) () ")")))) (compound_statement "{\n  int iVar1;\n  undefined8 *puVar2;\n  long lVar3;\n  undefined8 uVar4;\n  undefined8 in_RCX;\n  undefined4 in_R8D;\n  long in_FS_OFFSET;\n  undefined4 local_bc [4];\n  int local_ac;\n  undefined8 local_a8;\n  void *local_a0;\n  undefined1 local_98 [96];\n  undefined1 local_38 [24];\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  local_bc[0] = in_R8D;\n  local_a8 = in_RCX;\n  puVar2 = (undefined8 *)FUN_001389cf();\n  if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }\nLAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }\n                    \n  __stack_chk_fail();\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "undefined8 *puVar2;" (type_identifier "undefined8") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "undefined8 in_RCX;" (type_identifier "undefined8") (identifier "in_RCX") (; ";")) (declaration "undefined4 in_R8D;" (type_identifier "undefined4") (identifier "in_R8D") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "undefined4 local_bc [4];" (type_identifier "undefined4") (array_declarator "local_bc [4]" (identifier "local_bc") ([ "[") (number_literal "4") (] "]")) (; ";")) (declaration "int local_ac;" (primitive_type "int") (identifier "local_ac") (; ";")) (declaration "undefined8 local_a8;" (type_identifier "undefined8") (identifier "local_a8") (; ";")) (declaration "void *local_a0;" (primitive_type "void") (pointer_declarator "*local_a0" (* "*") (identifier "local_a0")) (; ";")) (declaration "undefined1 local_98 [96];" (type_identifier "undefined1") (array_declarator "local_98 [96]" (identifier "local_98") ([ "[") (number_literal "96") (] "]")) (; ";")) (declaration "undefined1 local_38 [24];" (type_identifier "undefined1") (array_declarator "local_38 [24]" (identifier "local_38") ([ "[") (number_literal "24") (] "]")) (; ";")) (declaration "long local_20;" (sized_type_specifier "long" (long "long")) (identifier "local_20") (; ";")) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_20") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "local_bc[0] = in_R8D;" (assignment_expression "local_bc[0] = in_R8D" (subscript_expression "local_bc[0]" (identifier "local_bc") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "in_R8D")) (; ";")) (expression_statement "local_a8 = in_RCX;" (assignment_expression "local_a8 = in_RCX" (identifier "local_a8") (= "=") (identifier "in_RCX")) (; ";")) (expression_statement "puVar2 = (undefined8 *)FUN_001389cf();" (assignment_expression "puVar2 = (undefined8 *)FUN_001389cf()" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)FUN_001389cf()" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_001389cf()" (identifier "FUN_001389cf") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" (( "(") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    lVar3 = FUN_00138178(&local_a8,local_bc);\n    puVar2[4] = lVar3;\n    if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }\n  }" ({ "{") (expression_statement "lVar3 = FUN_00138178(&local_a8,local_bc);" (assignment_expression "lVar3 = FUN_00138178(&local_a8,local_bc)" (identifier "lVar3") (= "=") (call_expression "FUN_00138178(&local_a8,local_bc)" (identifier "FUN_00138178") (argument_list "(&local_a8,local_bc)" (( "(") (pointer_expression "&local_a8" (& "&") (identifier "local_a8")) (, ",") (identifier "local_bc") () ")")))) (; ";")) (expression_statement "puVar2[4] = lVar3;" (assignment_expression "puVar2[4] = lVar3" (subscript_expression "puVar2[4]" (identifier "puVar2") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if (lVar3 == 0) {\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }\n    else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" (if "if") (parenthesized_expression "(lVar3 == 0)" (( "(") (binary_expression "lVar3 == 0" (identifier "lVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_001388bc(puVar2);\n      puVar2 = (undefined8 *)0x0;\n    }" ({ "{") (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" (identifier "FUN_001388bc") (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" (else "else") (compound_statement "{\n      local_ac = -1;\n      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);\n      if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }\n      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);\n      iVar1 = FUN_00132034(uVar4,puVar2[3]);\n      if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }\n    }" ({ "{") (expression_statement "local_ac = -1;" (assignment_expression "local_ac = -1" (identifier "local_ac") (= "=") (number_literal "-1")) (; ";")) (expression_statement "FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);" (call_expression "FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac)" (identifier "FUN_00137e49") (argument_list "(&local_a8,local_bc,&local_a0,&local_ac)" (( "(") (pointer_expression "&local_a8" (& "&") (identifier "local_a8")) (, ",") (identifier "local_bc") (, ",") (pointer_expression "&local_a0" (& "&") (identifier "local_a0")) (, ",") (pointer_expression "&local_ac" (& "&") (identifier "local_ac")) () ")"))) (; ";")) (if_statement "if (local_ac == 0x14) {\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }" (if "if") (parenthesized_expression "(local_ac == 0x14)" (( "(") (binary_expression "local_ac == 0x14" (identifier "local_ac") (== "==") (number_literal "0x14")) () ")")) (compound_statement "{\n        FUN_00147955(local_98);\n        FUN_00138505(local_98,*puVar2);\n        FUN_00138505(local_98,puVar2[1]);\n        FUN_00138505(local_98,puVar2[2]);\n        FUN_00147cb6(local_98,local_38);\n        iVar1 = memcmp(local_a0,local_38,0x14);\n        if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }\n      }" ({ "{") (expression_statement "FUN_00147955(local_98);" (call_expression "FUN_00147955(local_98)" (identifier "FUN_00147955") (argument_list "(local_98)" (( "(") (identifier "local_98") () ")"))) (; ";")) (expression_statement "FUN_00138505(local_98,*puVar2);" (call_expression "FUN_00138505(local_98,*puVar2)" (identifier "FUN_00138505") (argument_list "(local_98,*puVar2)" (( "(") (identifier "local_98") (, ",") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) () ")"))) (; ";")) (expression_statement "FUN_00138505(local_98,puVar2[1]);" (call_expression "FUN_00138505(local_98,puVar2[1])" (identifier "FUN_00138505") (argument_list "(local_98,puVar2[1])" (( "(") (identifier "local_98") (, ",") (subscript_expression "puVar2[1]" (identifier "puVar2") ([ "[") (number_literal "1") (] "]")) () ")"))) (; ";")) (expression_statement "FUN_00138505(local_98,puVar2[2]);" (call_expression "FUN_00138505(local_98,puVar2[2])" (identifier "FUN_00138505") (argument_list "(local_98,puVar2[2])" (( "(") (identifier "local_98") (, ",") (subscript_expression "puVar2[2]" (identifier "puVar2") ([ "[") (number_literal "2") (] "]")) () ")"))) (; ";")) (expression_statement "FUN_00147cb6(local_98,local_38);" (call_expression "FUN_00147cb6(local_98,local_38)" (identifier "FUN_00147cb6") (argument_list "(local_98,local_38)" (( "(") (identifier "local_98") (, ",") (identifier "local_38") () ")"))) (; ";")) (expression_statement "iVar1 = memcmp(local_a0,local_38,0x14);" (assignment_expression "iVar1 = memcmp(local_a0,local_38,0x14)" (identifier "iVar1") (= "=") (call_expression "memcmp(local_a0,local_38,0x14)" (identifier "memcmp") (argument_list "(local_a0,local_38,0x14)" (( "(") (identifier "local_a0") (, ",") (identifier "local_38") (, ",") (number_literal "0x14") () ")")))) (; ";")) (if_statement "if (iVar1 != 0) {\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_001388bc(puVar2);\n          puVar2 = (undefined8 *)0x0;\n          goto LAB_00138bf1;\n        }" ({ "{") (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" (identifier "FUN_001388bc") (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (goto_statement "goto LAB_00138bf1;" (goto "goto") (statement_identifier "LAB_00138bf1") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);" (assignment_expression "uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2)" (identifier "uVar4") (= "=") (call_expression "FUN_00133492(puVar2[2],puVar2[4],*puVar2)" (identifier "FUN_00133492") (argument_list "(puVar2[2],puVar2[4],*puVar2)" (( "(") (subscript_expression "puVar2[2]" (identifier "puVar2") ([ "[") (number_literal "2") (] "]")) (, ",") (subscript_expression "puVar2[4]" (identifier "puVar2") ([ "[") (number_literal "4") (] "]")) (, ",") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) () ")")))) (; ";")) (expression_statement "iVar1 = FUN_00132034(uVar4,puVar2[3]);" (assignment_expression "iVar1 = FUN_00132034(uVar4,puVar2[3])" (identifier "iVar1") (= "=") (call_expression "FUN_00132034(uVar4,puVar2[3])" (identifier "FUN_00132034") (argument_list "(uVar4,puVar2[3])" (( "(") (identifier "uVar4") (, ",") (subscript_expression "puVar2[3]" (identifier "puVar2") ([ "[") (number_literal "3") (] "]")) () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n        FUN_00131850(uVar4);\n      }\n      else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00131850(uVar4);\n      }" ({ "{") (expression_statement "FUN_00131850(uVar4);" (call_expression "FUN_00131850(uVar4)" (identifier "FUN_00131850") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" (else "else") (compound_statement "{\n        FUN_001388bc(puVar2);\n        FUN_00131850(uVar4);\n        puVar2 = (undefined8 *)0x0;\n      }" ({ "{") (expression_statement "FUN_001388bc(puVar2);" (call_expression "FUN_001388bc(puVar2)" (identifier "FUN_001388bc") (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (expression_statement "FUN_00131850(uVar4);" (call_expression "FUN_00131850(uVar4)" (identifier "FUN_00131850") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "puVar2 = (undefined8 *)0x0;" (assignment_expression "puVar2 = (undefined8 *)0x0" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")))) (} "}")))) (} "}"))) (labeled_statement "LAB_00138bf1:\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }" (statement_identifier "LAB_00138bf1") (: ":") (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return puVar2;\n  }" (if "if") (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_20") (== "==") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n    return puVar2;\n  }" ({ "{") (return_statement "return puVar2;" (return "return") (identifier "puVar2") (; ";")) (} "}")))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

void * function_1(type_1 *self,type_2 *pub_blob,int pub_len,type_2 *priv_blob,int priv_len)

{
  long var_17;
  int var_13;
  type_3 *var_3;
  type_4 var_5;
  type_5 a;
  long var_1;
  int local_bc [4];
  int var_8;
  char *pb;
  char *hash;
  type_6 s;
  type_2 digest [20];
  
  var_17 = *(long *)(var_1 + 0x28);
  local_bc[0] = priv_len;
  pb = (char *)priv_blob;
  var_3 = (type_3 *)var_2(self,(char *)pub_blob,pub_len);
  if (var_3 != (type_3 *)0x0) {
    var_5 = var_4(&pb,local_bc);
    var_3[4] = var_5;
    if (var_5 == (type_4)0x0) {
      var_6(var_3);
      var_3 = (type_3 *)0x0;
    }
    else {
      var_8 = -1;
      var_7(&pb,local_bc,&hash,&var_8);
      if (var_8 == 0x14) {
        var_9((type_7 *)&s);
        var_10(&s,(type_4)*var_3);
        var_10(&s,(type_4)var_3[1]);
        var_10(&s,(type_4)var_3[2]);
        var_11(&s,digest);
        var_13 = var_12(hash,digest,0x14);
        if (var_13 != 0) {
          var_6(var_3);
          var_3 = (type_3 *)0x0;
          goto LAB_00138bf1;
        }
      }
      a = var_14((type_5)var_3[2],(type_5)var_3[4],(type_5)*var_3);
      var_13 = var_15(a,(type_5)var_3[3]);
      if (var_13 == 0) {
        var_16(a);
      }
      else {
        var_6(var_3);
        var_16(a);
        var_3 = (type_3 *)0x0;
      }
    }
  }
LAB_00138bf1:
  if (var_17 == *(long *)(var_1 + 0x28)) {
    return var_3;
  }
                    /* WARNING: Subroutine does not return */
  var_18();
}


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

undefined8 * MASKED(void)

{
  int iVar1;
  undefined8 *puVar2;
  long lVar3;
  undefined8 uVar4;
  undefined8 in_RCX;
  undefined4 in_R8D;
  long in_FS_OFFSET;
  undefined4 local_bc [4];
  int local_ac;
  undefined8 local_a8;
  void *local_a0;
  undefined1 local_98 [96];
  undefined1 local_38 [24];
  long local_20;
  
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  local_bc[0] = in_R8D;
  local_a8 = in_RCX;
  puVar2 = (undefined8 *)FUN_001389cf();
  if (puVar2 != (undefined8 *)0x0) {
    lVar3 = FUN_00138178(&local_a8,local_bc);
    puVar2[4] = lVar3;
    if (lVar3 == 0) {
      FUN_001388bc(puVar2);
      puVar2 = (undefined8 *)0x0;
    }
    else {
      local_ac = -1;
      FUN_00137e49(&local_a8,local_bc,&local_a0,&local_ac);
      if (local_ac == 0x14) {
        FUN_00147955(local_98);
        FUN_00138505(local_98,*puVar2);
        FUN_00138505(local_98,puVar2[1]);
        FUN_00138505(local_98,puVar2[2]);
        FUN_00147cb6(local_98,local_38);
        iVar1 = memcmp(local_a0,local_38,0x14);
        if (iVar1 != 0) {
          FUN_001388bc(puVar2);
          puVar2 = (undefined8 *)0x0;
          goto LAB_00138bf1;
        }
      }
      uVar4 = FUN_00133492(puVar2[2],puVar2[4],*puVar2);
      iVar1 = FUN_00132034(uVar4,puVar2[3]);
      if (iVar1 == 0) {
        FUN_00131850(uVar4);
      }
      else {
        FUN_001388bc(puVar2);
        FUN_00131850(uVar4);
        puVar2 = (undefined8 *)0x0;
      }
    }
  }
LAB_00138bf1:
  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {
    return puVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

