cbuffer cbuffer_x_6 : register(b0, space0) {
  uint4 x_6[6];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  int arr[3] = (int[3])0;
  int index = 0;
  bool x_76 = false;
  bool x_86 = false;
  bool x_77_phi = false;
  bool x_87_phi = false;
  const int x_33 = asint(x_6[3].x);
  const int x_35 = asint(x_6[5].x);
  const int x_37 = asint(x_6[2].x);
  const int tint_symbol_3[3] = {x_33, x_35, x_37};
  arr = tint_symbol_3;
  index = 1;
  while (true) {
    bool x_51 = false;
    bool x_52_phi = false;
    x_52_phi = true;
    if (true) {
      const uint scalar_offset = ((16u * uint(0))) / 4;
      const int x_46 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
      x_51 = !(((x_46 == 1) & (index <= 1)));
      x_52_phi = x_51;
    }
    if (!(x_52_phi)) {
    } else {
      break;
    }
    const int x_56_save = index;
    const int x_57 = arr[x_56_save];
    arr[x_56_save] = (x_57 + 1);
    index = (index + 1);
  }
  const int x_62 = asint(x_6[1].x);
  const int x_64 = arr[x_62];
  const int x_66 = asint(x_6[3].x);
  const bool x_67 = (x_64 == x_66);
  x_77_phi = x_67;
  if (x_67) {
    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
    const int x_71 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
    const int x_73 = arr[x_71];
    const int x_75 = asint(x_6[4].x);
    x_76 = (x_73 == x_75);
    x_77_phi = x_76;
  }
  const bool x_77 = x_77_phi;
  x_87_phi = x_77;
  if (x_77) {
    const int x_81 = asint(x_6[3].x);
    const int x_83 = arr[x_81];
    const int x_85 = asint(x_6[2].x);
    x_86 = (x_83 == x_85);
    x_87_phi = x_86;
  }
  if (x_87_phi) {
    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
    const int x_92 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
    const int x_95 = asint(x_6[1].x);
    const int x_98 = asint(x_6[1].x);
    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
    const int x_101 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
    x_GLF_color = float4(float(x_92), float(x_95), float(x_98), float(x_101));
  } else {
    const int x_105 = asint(x_6[1].x);
    const float x_106 = float(x_105);
    x_GLF_color = float4(x_106, x_106, x_106, x_106);
  }
  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;
}
