/* TM_lib_internal::C_P021_unflatten_sections */
void C_P021_unflatten_sections_TM_lib_internal(
  /* TM_lib_internal::C_P021_unflatten_sections::nid_packet_ok */kcg_bool nid_packet_ok,
  /* TM_lib_internal::C_P021_unflatten_sections::n_iter */kcg_int n_iter,
  /* TM_lib_internal::C_P021_unflatten_sections::flat */P021_sections_array_flat_T_TM *flat,
  outC_C_P021_unflatten_sections_TM_lib_internal *outC)
{
  static kcg_int i2;
  static kcg_int i1;
  static kcg_int i;
  static kcg_int noname;
  
  outC->_L11 = nid_packet_ok;
  outC->_L3 = n_iter;
  for (i2 = 0; i2 < 33; i2++) {
    outC->_L5[i2] = outC->_L3;
  }
  kcg_copy_P021_sections_array_flat_T_TM(&outC->_L1, flat);
  for (i1 = 0; i1 < 33; i1++) {
    kcg_copy_P021_sections_array_flat_T_TM(&outC->_L6[i1], &outC->_L1);
  }
  if (outC->_L11) {
    for (i = 0; i < 33; i++) {
      /* 1 */
      C_P021_us_array_TM_lib_internal(
        i,
        outC->_L5[i],
        &outC->_L6[i],
        &outC->Context_1[i]);
      kcg_copy_P021_section_enum_T_TM(
        &outC->_L9[i],
        &outC->Context_1[i].sections);
      outC->_L7 = i + 1;
      if (!outC->Context_1[i].cont) {
        break;
      }
    }
  }
  else {
    outC->_L7 = 0;
  }
#ifdef KCG_MAPW_CPY
  
  for (i = outC->_L7; i < 33; i++) {
    kcg_copy_P021_section_enum_T_TM(
      &outC->_L9[i],
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
#endif /* KCG_MAPW_CPY */
  
  noname = outC->_L7;
  kcg_copy_P021_OBU_sectionlist_enum_T_TM(&outC->sections, &outC->_L9);
}
/* TM_lib_internal::C_P021_unflatten_sections */
void C_P021_unflatten_sections_TM_lib_internal(
  /* TM_lib_internal::C_P021_unflatten_sections::nid_packet_ok */kcg_bool nid_packet_ok,
  /* TM_lib_internal::C_P021_unflatten_sections::n_iter */kcg_int n_iter,
  /* TM_lib_internal::C_P021_unflatten_sections::flat */P021_sections_array_flat_T_TM *flat,
  /* TM_lib_internal::C_P021_unflatten_sections::sections */P021_OBU_sectionlist_enum_T_TM *sections)
{
  kcg_bool tmp;
  kcg_int i;
  /* TM_lib_internal::C_P021_unflatten_sections::_L7 */ kcg_int _L7;
  
  if (nid_packet_ok) {
    for (i = 0; i < 33; i++) {
      /* 1 */
      C_P021_us_array_TM_lib_internal(i, n_iter, flat, &tmp, &(*sections)[i]);
      _L7 = i + 1;
      if (!tmp) {
        break;
      }
    }
  }
  else {
    _L7 = 0;
  }
#ifdef KCG_MAPW_CPY
  
  for (i = _L7; i < 33; i++) {
    kcg_copy_P021_section_enum_T_TM(
      &(*sections)[i],
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
#endif /* KCG_MAPW_CPY */
  
}
/* TM_conversions::C_P021_to_legacy_loop */
void C_P021_to_legacy_loop_TM_conversions(
    /* TM_conversions::C_P021_to_legacy_loop::i */ kcg_int i,
    /* TM_conversions::C_P021_to_legacy_loop::P021_in */ P021_OBU_T_TM *P021_in,
    /* TM_conversions::C_P021_to_legacy_loop::P021_section_in */ P021_OBU_sectionlist_enum_T_TM *P021_section_in,
    /* TM_conversions::C_P021_to_legacy_loop::P015_legacy_out */ P21_GradientProfile_T_Packet_Types_Pkg *P015_legacy_out)
{
    /* TM_conversions::C_P021_to_legacy_loop::_L21 */
    static P021_section_enum_T_TM _L21;

    (*P015_legacy_out).q_dir = (*P021_in).q_dir;
    (*P015_legacy_out).q_scale = (*P021_in).q_scale;
    if ((0 <= i) & (i < 33)) {
        kcg_copy_P021_section_enum_T_TM(&_L21, &(*P021_section_in)[i]);
    }
    else {
        kcg_copy_P021_section_enum_T_TM(
            &_L21,
            (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
    }
    (*P015_legacy_out).valid = _L21.valid;
    (*P015_legacy_out).d_gradient = _L21.d_gradient;
    (*P015_legacy_out).q_gdir = _L21.q_gdir;
    (*P015_legacy_out).g_a = _L21.g_a;
}
/* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop */
void GP_Convert_P21_to_DistanceProfi(
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::i */ kcg_int i,
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::ProfileAccu */ GradientProfile_t_TrackAtlasTyp *ProfileAccu,
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::SectionIn */ P021_OBU_sectionlist_enum_T_TM *SectionIn,
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::q_scale */ Q_SCALE q_scale,
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::GradientProfile */ GradientProfile_t_TrackAtlasTyp *GradientProfile)
{
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop */
    static kcg_int tmp4;
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop */
    static kcg_int tmp3;
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop */
    static G_internal_Type_Obu_BasicTypes_ tmp2;
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop */
    static L_internal_Type_Obu_BasicTypes_ tmp1;
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop */
    static P021_section_enum_T_TM tmp;
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::_L123 */
    static P021_section_enum_T_TM _L123;
    /* TA_Gradient::GP_Convert_P21_to_DistanceProfile_loop::_L143 */
    static Gradient_section_t_TrackAtlasTy _L143;

    if ((0 <= i) & (i < 33)) {
        kcg_copy_P021_section_enum_T_TM(&_L123, &(*SectionIn)[i]);
    }
    else {
        kcg_copy_P021_section_enum_T_TM(
            &_L123,
            (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
    }
    tmp1 = /* 3 */ Normalize_Distance_d_internal_t(q_scale, _L123.d_gradient);
    if ((0 <= i - 1) & (i - 1 < 50)) {
        kcg_copy_Gradient_section_t_Tra(&_L143, &(*ProfileAccu)[i - 1]);
    }
    else {
        kcg_copy_Gradient_section_t_Tra(
            &_L143,
            (Gradient_section_t_TrackAtlasTy *) &DEFAULT_GP_Section_TA_Gradient);
    }
    kcg_copy_GradientProfile_t_Trac(GradientProfile, ProfileAccu);
    /* 2 */ if (_L123.valid) {
        tmp4 = tmp1 + _L143.Loc_Absolute;
        tmp3 = tmp1 + _L143.Loc_LRBG;
    }
    else {
        tmp4 = 0;
        tmp3 = 0;
    }
    tmp2 = /* 2 */ EVAL_Q_GDIR_TA_Lib_internal(_L123.q_gdir, _L123.g_a);
    if ((0 <= i + 1) & (i + 1 < 33)) {
        kcg_copy_P021_section_enum_T_TM(&tmp, &(*SectionIn)[i + 1]);
    }
    else {
        kcg_copy_P021_section_enum_T_TM(
            &tmp,
            (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
    }
    tmp1 = /* 4 */ Normalize_Distance_d_internal_t(q_scale, tmp.d_gradient);
    if ((0 <= i) & (i < 50)) {
        (*GradientProfile)[i].valid = _L123.valid;
        (*GradientProfile)[i].Loc_Absolute = tmp4;
        (*GradientProfile)[i].Loc_LRBG = tmp3;
        (*GradientProfile)[i].Gradient = tmp2;
        (*GradientProfile)[i].L_Gradient = tmp1;
    }
}
/* TA_Gradient::Convert_P21_to_DistanceProfile_loop */
void Convert_P21_to_DistancePr_TA_Gradient(
  /* TA_Gradient::Convert_P21_to_DistanceProfile_loop::i */kcg_int i,
  /* TA_Gradient::Convert_P21_to_DistanceProfile_loop::acc */GradientProfile_t_TrackAtlasTypes *acc,
  /* TA_Gradient::Convert_P21_to_DistanceProfile_loop::SectionIn */P021_OBU_sectionlist_enum_T_TM *SectionIn,
  /* TA_Gradient::Convert_P21_to_DistanceProfile_loop::q_scale */Q_SCALE q_scale,
  outC_Convert_P21_to_DistancePr_TA_Gradient *outC)
{
  outC->_L134 = i;
  outC->_L126 = 1;
  outC->_L141 = outC->_L134 + outC->_L126;
  kcg_copy_P021_OBU_sectionlist_enum_T_TM(&outC->_L128, SectionIn);
  if ((0 <= outC->_L141) & (outC->_L141 < 33)) {
    kcg_copy_P021_section_enum_T_TM(&outC->_L140, &outC->_L128[outC->_L141]);
  }
  else {
    kcg_copy_P021_section_enum_T_TM(
      &outC->_L140,
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
  outC->_L139 = q_scale;
  kcg_copy_P021_OBU_sectionlist_enum_T_TM(&outC->_L121, SectionIn);
  if ((0 <= outC->_L134) & (outC->_L134 < 33)) {
    kcg_copy_P021_section_enum_T_TM(&outC->_L123, &outC->_L121[outC->_L134]);
  }
  else {
    kcg_copy_P021_section_enum_T_TM(
      &outC->_L123,
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
  outC->_L138 = outC->_L123.d_gradient;
  outC->_L137 = outC->_L140.d_gradient;
  outC->_L130 = outC->_L123.valid;
  /* 3 */
  Normalize_Distance_d_inte_TA_Lib_internal(
    outC->_L139,
    outC->_L138,
    &outC->Context_3);
  outC->_L135 = outC->Context_3.d_internal;
  outC->_L129 = outC->_L123.q_gdir;
  outC->_L124 = outC->_L123.g_a;
  /* 2 */
  EVAL_Q_GDIR_TA_Lib_internal(outC->_L129, outC->_L124, &outC->Context_2);
  outC->_L127 = outC->Context_2.gradient;
  /* 4 */
  Normalize_Distance_d_inte_TA_Lib_internal(
    outC->_L139,
    outC->_L137,
    &outC->Context_4);
  outC->_L122 = outC->Context_4.d_internal;
  outC->_L132 = outC->_L122 - outC->_L135;
  outC->_L136.valid = outC->_L130;
  outC->_L136.Loc_Absolute = outC->_L135;
  outC->_L136.Loc_LRBG = outC->_L135;
  outC->_L136.Gradient = outC->_L127;
  outC->_L136.L_Gradient = outC->_L132;
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L125, acc);
  outC->_L131 = i;
  kcg_copy_GradientProfile_t_TrackAtlasTypes(&outC->_L133, &outC->_L125);
  if ((0 <= outC->_L131) & (outC->_L131 < 10)) {
    kcg_copy_Gradient_section_t_TrackAtlasTypes(
      &outC->_L133[outC->_L131],
      &outC->_L136);
  }
  kcg_copy_GradientProfile_t_TrackAtlasTypes(
    &outC->GradientProfile,
    &outC->_L133);
}