uint FUN_00417ef8(byte *param_1,undefined4 *param_2)

{
  uint uVar1;
  
  uVar1 = (uint)*param_1;
  if (0x7f < uVar1) {
    if (((uVar1 & 0xe0) == 0xc0) && ((param_1[1] & 0xc0) == 0x80)) {
      *param_2 = 2;
      uVar1 = param_1[1] & 0x3f | (uVar1 & 0x1f) << 6;
    }
    else if ((((uVar1 & 0xf0) == 0xe0) && ((param_1[1] & 0xc0) == 0x80)) &&
            ((param_1[2] & 0xc0) == 0x80)) {
      *param_2 = 3;
      uVar1 = param_1[2] & 0x3f | (uVar1 & 0xf) << 0xc | (param_1[1] & 0x3f) << 6;
    }
    else if ((((uVar1 & 0xf8) == 0xf0) && ((param_1[1] & 0xc0) == 0x80)) &&
            (((param_1[2] & 0xc0) == 0x80 && ((param_1[3] & 0xc0) == 0x80)))) {
      *param_2 = 4;
      uVar1 = param_1[3] & 0x3f | (uVar1 & 7) << 0x12 | (param_1[1] & 0x3f) << 0xc |
              (param_1[2] & 0x3f) << 6;
    }
    else if ((((uVar1 & 0xfc) == 0xf8) && ((param_1[1] & 0xc0) == 0x80)) &&
            (((param_1[2] & 0xc0) == 0x80 &&
             (((param_1[3] & 0xc0) == 0x80 && ((param_1[4] & 0xc0) == 0x80)))))) {
      *param_2 = 5;
      uVar1 = param_1[4] & 0x3f | (uVar1 & 3) << 0x18 | (param_1[1] & 0x3f) << 0x12 |
              (param_1[2] & 0x3f) << 0xc | (param_1[3] & 0x3f) << 6;
    }
    else if ((((((uVar1 & 0xfe) == 0xfc) && ((param_1[1] & 0xc0) == 0x80)) &&
              ((param_1[2] & 0xc0) == 0x80)) &&
             (((param_1[3] & 0xc0) == 0x80 && ((param_1[4] & 0xc0) == 0x80)))) &&
            ((param_1[5] & 0xc0) == 0x80)) {
      *param_2 = 6;
      uVar1 = param_1[5] & 0x3f | (uVar1 & 1) << 0x1e | (param_1[1] & 0x3f) << 0x18 |
              (param_1[2] & 0x3f) << 0x12 | (param_1[3] & 0x3f) << 0xc | (param_1[4] & 0x3f) << 6;
    }
    else {
      *param_2 = 0;
      uVar1 = 0xffffffff;
    }
    return uVar1;
  }
  *param_2 = 1;
  return uVar1;
}