void APMlmeDynamicTxRateSwitching(int param_1)

{
  byte bVar1;
  short sVar2;
  bool bVar3;
  char cVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  int *piVar19;
  int iVar20;
  int iVar21;
  uint uVar22;
  uint uVar23;
  byte local_40;
  undefined1 auStack_3f [3];
  byte *local_3c;
  int local_38;
  uint local_30;
  
  local_40 = 0;
  if (*(char *)(param_1 + 0x76a0c) == -0x80) {
    local_38 = param_1 + 0x16894;
    piVar19 = (int *)(param_1 + 0x5dd2c);
    iVar20 = 1;
    uVar23 = 0;
    uVar22 = 0;
    do {
      if ((piVar19[-0xf5] != 0) && ((piVar19[-0xf5] != 1 || (piVar19[-0x58] == 2)))) {
        iVar21 = param_1 + iVar20 * 0xa20 + 0x5cf38;
        iVar5 = RTMPCheckEntryEnableAutoRateSwitch(param_1,iVar21);
        if (iVar5 != 0) {
          MlmeSelectTxRateTable(param_1,iVar21,&local_3c,&local_40,auStack_3f);
          if (*(short *)(param_1 + 0x71338) == 1) {
            if (*(char *)(param_1 + 0xec) == '\0') {
              uVar6 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x170c);
              uVar22 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x1710);
            }
            else {
              uVar6 = 0;
              uVar22 = 0;
            }
            uVar11 = uVar22 >> 0x10;
            uVar10 = uVar6 & 0xffff;
            uVar22 = uVar22 & 0xffff;
            *(uint *)(param_1 + 0x766a0) = uVar10 + *(int *)(param_1 + 0x766a0);
            uVar12 = uVar22 + uVar11 + uVar10;
            *(undefined1 *)(param_1 + 0x769d9) = 1;
            *(uint *)(param_1 + 0x766f4) = (uVar6 >> 0x10) + *(int *)(param_1 + 0x766f4);
            *(uint *)(param_1 + 0x7670c) = uVar11 + *(int *)(param_1 + 0x7670c);
            *(uint *)(param_1 + 0x76708) = uVar22 + *(int *)(param_1 + 0x76708);
            *(uint *)(param_1 + 0x76704) = uVar10 + *(int *)(param_1 + 0x76704);
            *(uint *)(param_1 + 0x76690) = uVar22 + *(int *)(param_1 + 0x76690);
            *(uint *)(param_1 + 0x766a8) = uVar11 + *(int *)(param_1 + 0x766a8);
            iVar5 = uVar10 + uVar11;
            if (uVar12 != 0) goto LAB_00072d50;
            uVar6 = *(uint *)(param_1 + 0x4bf4);
          }
          else {
            uVar12 = *piVar19 + piVar19[-1] + piVar19[1];
            if (uVar12 == 0) {
              uVar6 = *(uint *)(param_1 + 0x4bf4);
            }
            else {
              iVar5 = piVar19[1] + *piVar19;
LAB_00072d50:
              uVar23 = (uint)(iVar5 * 100) / uVar12;
              uVar6 = *(uint *)(param_1 + 0x4bf4);
            }
          }
          uVar10 = (uint)*(byte *)((int)piVar19 + -0x86);
          if ((uVar6 & 0xf) == 3) {
            iVar5 = (int)(char)(((int)*(char *)((int)piVar19 + 0xbe) +
                                 (int)*(char *)((int)piVar19 + 0xbd) +
                                (int)*(char *)((int)piVar19 + 0xbf)) / 3);
          }
          else {
            iVar5 = (int)*(char *)((int)piVar19 + 0xbd);
            if ((uVar6 & 0xf) == 2) {
              iVar5 = *(char *)((int)piVar19 + 0xbe) + iVar5 >> 1;
            }
          }
          if (uVar10 == 0) {
            uVar6 = 1;
            uVar11 = 0;
          }
          else {
            uVar7 = local_40 - 1;
            if ((int)uVar10 < (int)uVar7) {
              uVar6 = uVar10 + 1 & 0xff;
              uVar11 = uVar10 - 1 & 0xff;
            }
            else {
              uVar6 = uVar10;
              uVar11 = uVar10;
              if (uVar10 == uVar7) {
                uVar11 = local_40 - 2 & 0xff;
              }
            }
          }
          uVar9 = (uint)local_3c[(uVar10 + 1) * 5 + 4];
          uVar7 = (uint)local_3c[(uVar10 + 1) * 5 + 3];
          if (-0x41 < iVar5) {
            uVar7 = uVar7 + (local_3c[(uVar10 + 1) * 5 + 3] >> 1) & 0xff;
            uVar9 = uVar9 + (local_3c[(uVar10 + 1) * 5 + 4] >> 1) & 0xff;
          }
          *(undefined1 *)((int)piVar19 + 0x1a) = *(undefined1 *)((int)piVar19 + 0x19);
          if (uVar12 < 0x10) {
            local_30 = (uint)*local_3c;
            uVar18 = 0;
            uVar17 = 0;
            uVar16 = 0;
            uVar14 = 0;
            uVar9 = 0;
            uVar11 = 0;
            uVar10 = 0;
            uVar15 = 0;
            uVar13 = 0;
            uVar7 = 0;
            uVar6 = 0;
            uVar12 = 0;
            while ((int)uVar12 < (int)local_30) {
              bVar1 = local_3c[(uVar12 + 1) * 5 + 2];
              if (bVar1 == 0) {
                if (uVar12 != 0) {
LAB_00072ef4:
                  if (bVar1 == 4) {
                    uVar14 = uVar12 & 0xff;
                  }
                  else if (bVar1 == 5) {
                    uVar9 = uVar12 & 0xff;
                  }
                  else if (bVar1 == 6) {
                    uVar11 = uVar12 & 0xff;
                  }
                  else if (bVar1 == 7) {
                    uVar10 = uVar12 & 0xff;
                  }
                  else if (bVar1 == 0xc) {
                    uVar15 = uVar12 & 0xff;
                  }
                  else if (bVar1 == 0xd) {
                    uVar13 = uVar12 & 0xff;
                  }
                  else if (bVar1 == 0xe) {
                    uVar7 = uVar12 & 0xff;
                  }
                  else {
                    cVar4 = (char)uVar12 + '\x01';
                    if (bVar1 != 0xf) goto LAB_00072f80;
                    if ((local_3c[(uVar12 + 1) * 5 + 1] & 2) == 0) {
                      uVar6 = uVar12 & 0xff;
                    }
                  }
                  goto LAB_00072f7c;
                }
                cVar4 = '\x01';
              }
              else {
                if (bVar1 == 1) {
                  uVar18 = uVar12 & 0xff;
                }
                else if (bVar1 == 2) {
                  uVar17 = uVar12 & 0xff;
                }
                else {
                  if (bVar1 != 3) goto LAB_00072ef4;
                  uVar16 = uVar12 & 0xff;
                }
LAB_00072f7c:
                cVar4 = (char)uVar12 + '\x01';
              }
LAB_00072f80:
              uVar12 = (uint)cVar4;
            }
            iVar8 = 5;
            if ((*(uint *)(param_1 + 0x4bf4) & 0x40000) != 0) {
              iVar8 = 2;
            }
            if ((((local_3c == &RateSwitchTable11BGN2S) ||
                 (local_3c == &RateSwitchTable11BGN2SForABand)) ||
                (local_3c == &RateSwitchTable11N2S)) ||
               ((local_3c == &RateSwitchTable11N2SForABand || (local_3c == &RateSwitchTable)))) {
              if (((((uVar6 != 0) && (iVar8 + -0x46 <= iVar5)) ||
                   ((uVar7 != 0 && (uVar6 = uVar7, iVar8 + -0x48 <= iVar5)))) ||
                  (((uVar13 != 0 && (uVar6 = uVar13, iVar8 + -0x4c <= iVar5)) ||
                   ((((uVar15 != 0 && (uVar6 = uVar15, iVar8 + -0x4e <= iVar5)) ||
                     ((uVar14 != 0 && (uVar6 = uVar14, iVar8 + -0x52 <= iVar5)))) ||
                    ((uVar16 != 0 && (uVar6 = uVar16, iVar8 + -0x54 <= iVar5)))))))) ||
                 (((uVar17 != 0 && (uVar6 = uVar17, iVar8 + -0x56 <= iVar5)) ||
                  (uVar6 = 0, uVar18 == 0)))) goto LAB_000731bc;
              bVar3 = iVar5 < iVar8 + -0x58;
LAB_000731a8:
              if (bVar3) {
                uVar6 = 0;
                goto LAB_000731bc;
              }
              uVar10 = (uint)*(byte *)((int)piVar19 + -0x86);
              uVar12 = uVar18;
            }
            else {
              uVar6 = uVar10;
              if ((local_3c == &RateSwitchTable11BGN1S) || (local_3c == &RateSwitchTable11N1S)) {
                if ((((uVar10 == 0) || (iVar5 <= iVar8 + -0x48)) &&
                    (((uVar11 == 0 || (uVar6 = uVar11, iVar5 <= iVar8 + -0x4a)) &&
                     ((uVar9 == 0 || (uVar6 = uVar9, iVar5 <= iVar8 + -0x4d)))))) &&
                   (((((uVar14 == 0 || (uVar6 = uVar14, iVar5 <= iVar8 + -0x4f)) &&
                      ((uVar16 == 0 || (uVar6 = uVar16, iVar5 <= iVar8 + -0x51)))) &&
                     (((uVar17 == 0 || (uVar6 = uVar17, iVar5 <= iVar8 + -0x53)) &&
                      (uVar12 = 0, uVar6 = uVar12, uVar18 != 0)))) &&
                    (uVar6 = uVar18, iVar5 <= iVar8 + -0x56)))) {
                  uVar10 = (uint)*(byte *)((int)piVar19 + -0x86);
                  goto LAB_000731c0;
                }
              }
              else if (((((uVar10 == 0) || (iVar5 < -0x45)) &&
                        ((uVar11 == 0 || (uVar6 = uVar11, iVar5 < -0x49)))) &&
                       (((uVar9 == 0 || (uVar6 = uVar9, iVar5 < -0x4d)) &&
                        ((uVar14 == 0 || (uVar6 = uVar14, iVar5 < -0x51)))))) &&
                      ((((uVar16 == 0 || (uVar6 = uVar16, iVar5 < -0x54)) &&
                        ((uVar17 == 0 || (uVar6 = uVar17, iVar5 < -0x56)))) &&
                       (uVar6 = 0, uVar18 != 0)))) {
                bVar3 = iVar5 < -0x59;
                goto LAB_000731a8;
              }
LAB_000731bc:
              uVar10 = (uint)*(byte *)((int)piVar19 + -0x86);
              uVar12 = uVar6;
            }
LAB_000731c0:
            if (uVar10 != uVar12) {
              *(char *)((int)piVar19 + -0x86) = (char)uVar12;
              APMlmeSetTxRate(param_1,iVar21,local_3c + (uVar12 + 1) * 5);
            }
            memset((void *)(param_1 + iVar20 * 0xa20 + 0x5d2c6),0,0x40)   //possible issue identified - semgrep
            memset((void *)(param_1 + iVar20 * 0xa20 + 0x5d32c),0,0x20)   //possible issue identified - semgrep
            *(undefined1 *)(piVar19 + 6) = 1;
          }
          else {
            if ((char)piVar19[6] != '\x01') {
              piVar19[3] = piVar19[3] + 1;
              if (uVar23 < uVar9) {
                bVar3 = false;
                if (uVar23 <= uVar7) {
                  iVar5 = param_1 + (iVar20 * 0x510 + uVar10 + 0x2e960) * 2;
                  sVar2 = *(short *)(iVar5 + 6)   //possible issue identified - semgrep
                  if (sVar2 == 0) {
                    cVar4 = (char)piVar19[4]   //possible issue identified - semgrep
                  }
                  else {
                    *(short *)(iVar5 + 6) = sVar2 + -1;
                    cVar4 = (char)piVar19[4]   //possible issue identified - semgrep
                  }
                  if (cVar4 == '\0') {
                    iVar5 = param_1 + (iVar20 * 0x510 + uVar6 + 0x2e960) * 2;
                    sVar2 = *(short *)(iVar5 + 6)   //possible issue identified - semgrep
                    bVar3 = true;
                    if (sVar2 == 0) goto LAB_0007334c;
                    *(short *)(iVar5 + 6) = sVar2 + -1;
                  }
                  else {
                    *(char *)(piVar19 + 4) = cVar4 + -1;
                  }
                  goto LAB_00073348;
                }
              }
              else {
                *(undefined2 *)(param_1 + (iVar20 * 0x510 + uVar10 + 0x2e960) * 2 + 6) = 8;
LAB_00073348:
                bVar3 = true;
              }
LAB_0007334c:
              *(char *)(iVar20 * 0xa20 + param_1 + uVar10 + 0x5d32c) = (char)uVar23;
              if (bVar3) {
                if ((uVar10 == uVar11) ||
                   (*(ushort *)(param_1 + (iVar20 * 0x510 + uVar10 + 0x2e960) * 2 + 6) < 8)) {
                  if ((uVar10 != uVar6) &&
                     (*(short *)(param_1 + (iVar20 * 0x510 + uVar6 + 0x2e960) * 2 + 6) == 0)) {
                    *(char *)((int)piVar19 + -0x86) = (char)uVar6;
                  }
                }
                else {
                  *(char *)((int)piVar19 + -0x86) = (char)uVar11;
                }
              }
              uVar6 = (uint)*(byte *)((int)piVar19 + -0x86);
              if (uVar10 < uVar6) {
                piVar19[3] = 0;
                *(undefined1 *)(piVar19 + 4) = 0;
                *(undefined1 *)((int)piVar19 + 0x19) = 1;
                memset((void *)(param_1 + iVar20 * 0xa20 + 0x5d2c6),0,0x40)   //possible issue identified - semgrep
                memset((void *)(param_1 + iVar20 * 0xa20 + 0x5d32c),0,0x20)   //possible issue identified - semgrep
                bVar3 = true;
                if (*(char *)(param_1 + 0x168bc) == '\0') {
                  RTMPSetTimer(local_38,100);
                  *(undefined1 *)(param_1 + 0x168bc) = 1;
LAB_00073510:
                  bVar3 = true;
                }
              }
              else if (uVar6 < uVar10) {
                piVar19[3] = 0;
                *(undefined1 *)((int)piVar19 + 0x19) = 2;
                *(undefined2 *)(param_1 + (iVar20 * 0x510 + uVar6 + 0x2e960) * 2 + 6) = 0;
                *(undefined1 *)(iVar20 * 0xa20 + param_1 + uVar6 + 0x5d32c) = 0;
                *(undefined1 *)(piVar19 + 4) = 0;
                bVar3 = true;
                if (*(char *)(param_1 + 0x168bc) == '\0') {
                  RTMPSetTimer(local_38,100);
                  *(undefined1 *)(param_1 + 0x168bc) = 1;
                  goto LAB_00073510;
                }
              }
              else {
                *(undefined1 *)((int)piVar19 + 0x19) = 0;
                bVar3 = false;
              }
              if (*(short *)(param_1 + 0x71338) == 1) {
                piVar19[7] = uVar22;
              }
              else {
                piVar19[7] = piVar19[-1];
              }
              if (iVar21 != 0) {
                *piVar19 = 0;
                piVar19[1] = 0;
                piVar19[-1] = 0;
              }
              if ((bVar3) && (local_3c + (*(byte *)((int)piVar19 + -0x86) + 1) * 5 != (byte *)0x0))
              {
                APMlmeSetTxRate(param_1,iVar21);
              }
              goto LAB_00073580;
            }
            *(undefined1 *)(piVar19 + 6) = 0;
            *(undefined1 *)((int)piVar19 + 0x19) = 0;
          }
          if (iVar21 != 0) {
            *piVar19 = 0;
            piVar19[1] = 0;
            piVar19[-1] = 0;
          }
        }
      }
LAB_00073580:
      iVar20 = iVar20 + 1;
      piVar19 = piVar19 + 0x288;
    } while (iVar20 != 0x20);
  }
  return;
}