static int x_GLF_global_loop_count = 0;
cbuffer cbuffer_x_7 : register(b0, space0) {
  uint4 x_7[3];
};
cbuffer cbuffer_x_10 : register(b1, space0) {
  uint4 x_10[4];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  float f = 0.0f;
  int i = 0;
  int i_1 = 0;
  int i_2 = 0;
  int i_3 = 0;
  int i_4 = 0;
  int i_5 = 0;
  int i_6 = 0;
  int i_7 = 0;
  int i_8 = 0;
  int i_9 = 0;
  int i_10 = 0;
  int i_11 = 0;
  int i_12 = 0;
  int i_13 = 0;
  int i_14 = 0;
  float sum = 0.0f;
  int r = 0;
  x_GLF_global_loop_count = 0;
  const float x_53 = asfloat(x_7[1].x);
  f = x_53;
  const int x_55 = asint(x_10[1].x);
  i = x_55;
  while (true) {
    const int x_60 = i;
    const uint scalar_offset = ((16u * uint(0))) / 4;
    const int x_62 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
    if ((x_60 < x_62)) {
    } else {
      break;
    }
    const int x_66 = asint(x_10[1].x);
    i_1 = x_66;
    while (true) {
      const int x_71 = i_1;
      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
      const int x_73 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
      if ((x_71 < x_73)) {
      } else {
        break;
      }
      const int x_77 = asint(x_10[1].x);
      i_2 = x_77;
      while (true) {
        const int x_82 = i_2;
        const uint scalar_offset_2 = ((16u * uint(0))) / 4;
        const int x_84 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
        if ((x_82 < x_84)) {
        } else {
          break;
        }
        const int x_88 = asint(x_10[1].x);
        i_3 = x_88;
        while (true) {
          const int x_93 = i_3;
          const uint scalar_offset_3 = ((16u * uint(0))) / 4;
          const int x_95 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
          if ((x_93 < x_95)) {
          } else {
            break;
          }
          const int x_99 = asint(x_10[1].x);
          i_4 = x_99;
          while (true) {
            const int x_104 = i_4;
            const uint scalar_offset_4 = ((16u * uint(0))) / 4;
            const int x_106 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
            if ((x_104 < x_106)) {
            } else {
              break;
            }
            const int x_110 = asint(x_10[1].x);
            i_5 = x_110;
            while (true) {
              const int x_115 = i_5;
              const uint scalar_offset_5 = ((16u * uint(0))) / 4;
              const int x_117 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
              if ((x_115 < x_117)) {
              } else {
                break;
              }
              const int x_121 = asint(x_10[1].x);
              i_6 = x_121;
              while (true) {
                const int x_126 = i_6;
                const uint scalar_offset_6 = ((16u * uint(0))) / 4;
                const int x_128 = asint(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
                if ((x_126 < x_128)) {
                } else {
                  break;
                }
                const int x_132 = asint(x_10[1].x);
                i_7 = x_132;
                while (true) {
                  const int x_137 = i_7;
                  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
                  const int x_139 = asint(x_10[scalar_offset_7 / 4][scalar_offset_7 % 4]);
                  if ((x_137 < x_139)) {
                  } else {
                    break;
                  }
                  const int x_143 = asint(x_10[1].x);
                  i_8 = x_143;
                  while (true) {
                    const int x_148 = i_8;
                    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
                    const int x_150 = asint(x_10[scalar_offset_8 / 4][scalar_offset_8 % 4]);
                    if ((x_148 < x_150)) {
                    } else {
                      break;
                    }
                    const int x_154 = asint(x_10[1].x);
                    i_9 = x_154;
                    while (true) {
                      const int x_159 = i_9;
                      const uint scalar_offset_9 = ((16u * uint(0))) / 4;
                      const int x_161 = asint(x_10[scalar_offset_9 / 4][scalar_offset_9 % 4]);
                      if ((x_159 < x_161)) {
                      } else {
                        break;
                      }
                      const int x_165 = asint(x_10[1].x);
                      i_10 = x_165;
                      while (true) {
                        const int x_170 = i_10;
                        const uint scalar_offset_10 = ((16u * uint(0))) / 4;
                        const int x_172 = asint(x_10[scalar_offset_10 / 4][scalar_offset_10 % 4]);
                        if ((x_170 < x_172)) {
                        } else {
                          break;
                        }
                        const int x_176 = asint(x_10[1].x);
                        i_11 = x_176;
                        while (true) {
                          const int x_181 = i_11;
                          const int x_183 = asint(x_10[2].x);
                          if ((x_181 < x_183)) {
                          } else {
                            break;
                          }
                          const int x_187 = asint(x_10[1].x);
                          i_12 = x_187;
                          while (true) {
                            const int x_192 = i_12;
                            const uint scalar_offset_11 = ((16u * uint(0))) / 4;
                            const int x_194 = asint(x_10[scalar_offset_11 / 4][scalar_offset_11 % 4]);
                            if ((x_192 < x_194)) {
                            } else {
                              break;
                            }
                            const int x_198 = asint(x_10[1].x);
                            i_13 = x_198;
                            while (true) {
                              const int x_203 = i_13;
                              const uint scalar_offset_12 = ((16u * uint(0))) / 4;
                              const int x_205 = asint(x_10[scalar_offset_12 / 4][scalar_offset_12 % 4]);
                              if ((x_203 < x_205)) {
                              } else {
                                break;
                              }
                              const int x_209 = asint(x_10[1].x);
                              i_14 = x_209;
                              while (true) {
                                const int x_214 = i_14;
                                const int x_216 = asint(x_10[2].x);
                                if ((x_214 < x_216)) {
                                } else {
                                  break;
                                }
                                while (true) {
                                  x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
                                  {
                                    const int x_225 = x_GLF_global_loop_count;
                                    const int x_227 = asint(x_10[3].x);
                                    if ((x_225 < (100 - x_227))) {
                                    } else {
                                      break;
                                    }
                                  }
                                }
                                const uint scalar_offset_13 = ((16u * uint(0))) / 4;
                                const float x_231 = asfloat(x_7[scalar_offset_13 / 4][scalar_offset_13 % 4]);
                                f = (f + x_231);
                                {
                                  i_14 = (i_14 + 1);
                                }
                              }
                              {
                                i_13 = (i_13 + 1);
                              }
                            }
                            {
                              i_12 = (i_12 + 1);
                            }
                          }
                          {
                            i_11 = (i_11 + 1);
                          }
                        }
                        {
                          i_10 = (i_10 + 1);
                        }
                      }
                      {
                        i_9 = (i_9 + 1);
                      }
                    }
                    {
                      i_8 = (i_8 + 1);
                    }
                  }
                  {
                    i_7 = (i_7 + 1);
                  }
                }
                {
                  i_6 = (i_6 + 1);
                }
              }
              {
                i_5 = (i_5 + 1);
              }
            }
            {
              i_4 = (i_4 + 1);
            }
          }
          {
            i_3 = (i_3 + 1);
          }
        }
        {
          i_2 = (i_2 + 1);
        }
      }
      {
        i_1 = (i_1 + 1);
      }
    }
    {
      i = (i + 1);
    }
  }
  const float x_265 = asfloat(x_7[1].x);
  sum = x_265;
  const int x_267 = asint(x_10[1].x);
  r = x_267;
  {
    for(; (x_GLF_global_loop_count < 100); r = (r + 1)) {
      x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
      sum = (sum + f);
    }
  }
  const float x_282 = sum;
  const float x_284 = asfloat(x_7[2].x);
  if ((x_282 == x_284)) {
    const uint scalar_offset_14 = ((16u * uint(0))) / 4;
    const int x_290 = asint(x_10[scalar_offset_14 / 4][scalar_offset_14 % 4]);
    const int x_293 = asint(x_10[1].x);
    const int x_296 = asint(x_10[1].x);
    const uint scalar_offset_15 = ((16u * uint(0))) / 4;
    const int x_299 = asint(x_10[scalar_offset_15 / 4][scalar_offset_15 % 4]);
    x_GLF_color = float4(float(x_290), float(x_293), float(x_296), float(x_299));
  } else {
    const int x_303 = asint(x_10[1].x);
    const float x_304 = float(x_303);
    x_GLF_color = float4(x_304, x_304, x_304, x_304);
  }
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol {
  float4 x_GLF_color_1 : SV_Target0;
};

tint_symbol main() {
  main_1();
  const main_out tint_symbol_1 = {x_GLF_color};
  const tint_symbol tint_symbol_4 = {tint_symbol_1.x_GLF_color_1};
  return tint_symbol_4;
}
