uint FUN_004385f0(undefined4 *param_1,uint *param_2,uint *param_3,uint *param_4,int param_5)

{
  byte bVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  byte *pbVar6;
  uint uVar7;
  byte *pbVar8;
  uint uVar9;
  
  pbVar6 = (byte *)*param_1;
  if (param_5 != 0) {
    uVar7 = (uint)*pbVar6;
    uVar3 = uVar7 & 0x1f;
    iVar5 = param_5 + -1;
    pbVar8 = pbVar6;
    if (uVar3 == 0x1f) {
      iVar5 = param_5 + -1;
      if (iVar5 != 0) {
        uVar3 = 0;
        while( true ) {
          pbVar8 = pbVar8 + 1;
          bVar1 = *pbVar8;
          if (-1 < (char)bVar1) break;
          uVar3 = uVar3 << 7 | bVar1 & 0x7f;
          iVar5 = iVar5 + -1;
          if ((iVar5 == 0) || (0xffffff < (int)uVar3)) goto LAB_004386e0;
        }
        iVar5 = iVar5 + -1;
        if (iVar5 != 0) {
          uVar3 = bVar1 & 0x7f | uVar3 << 7;
          goto LAB_00438640;
        }
      }
    }
    else if (iVar5 != 0) {
LAB_00438640:
      *param_3 = uVar3;
      *param_4 = uVar7 & 0xc0;
      if (0 < iVar5) {
        bVar1 = pbVar8[1];
        if (bVar1 == 0x80) {
          pbVar8 = pbVar8 + 2;
          uVar9 = 1;
          uVar3 = 0;
        }
        else {
          pbVar8 = pbVar8 + 2;
          uVar3 = bVar1 & 0x7f;
          if ((char)bVar1 < '\0') {
            if ((4 < uVar3) || (iVar4 = iVar5 + -2, iVar5 == 1)) goto LAB_004386e0;
            uVar2 = 0;
            uVar9 = uVar3;
            while (uVar3 = uVar2, uVar9 != 0) {
              bVar1 = *pbVar8;
              uVar9 = uVar9 - 1;
              pbVar8 = pbVar8 + 1;
              uVar2 = uVar2 << 8 | (uint)bVar1;
              if (iVar4 == 0) goto LAB_004386e0;
              iVar4 = iVar4 + -1;
            }
          }
          if ((int)uVar3 < 0) goto LAB_004386e0;
          uVar9 = 0;
        }
        *param_2 = uVar3;
        if ((int)uVar3 <= (int)(pbVar6 + (param_5 - (int)pbVar8))) {
          *param_1 = pbVar8;
          return uVar7 & 0x20 | uVar9;
        }
        FUN_00433604(0xd,0x72,0x9b,"asn1_lib.c",0x8e);
        *param_1 = pbVar8;
        return uVar7 & 0x20 | 0x80 | uVar9;
      }
    }
  }
LAB_004386e0:
  FUN_00433604(0xd,0x72,0x7b,"asn1_lib.c",0x96);
  return 0x80;
}