struct BST {
  int data;
  int leftIndex;
  int rightIndex;
};

static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  BST tree[10] = (BST[10])0;
  int x_360 = 0;
  int x_62_phi = 0;
  bool x_90_phi = false;
  int x_357_phi = 0;
  int x_360_phi = 0;
  int x_362_phi = 0;
  const BST tint_symbol_2 = {9, -1, -1};
  tree[0] = tint_symbol_2;
  switch(0u) {
    default: {
      x_62_phi = 0;
      while (true) {
        int x_88 = 0;
        int x_80 = 0;
        int x_63 = 0;
        int x_63_phi = 0;
        const int x_62 = x_62_phi;
        x_90_phi = false;
        if ((x_62 <= 1)) {
        } else {
          break;
        }
        const int x_69 = tree[x_62].data;
        if ((5 <= x_69)) {
          const int x_82_save = x_62;
          const int x_83 = tree[x_82_save].leftIndex;
          if ((x_83 == -1)) {
            tree[x_82_save].leftIndex = 1;
            const BST tint_symbol_3 = {5, -1, -1};
            tree[1] = tint_symbol_3;
            x_90_phi = true;
            break;
          } else {
            x_88 = tree[x_82_save].leftIndex;
            x_63_phi = x_88;
            {
              x_63 = x_63_phi;
              x_62_phi = x_63;
            }
            continue;
          }
          return;
        } else {
          const int x_74_save = x_62;
          const int x_75 = tree[x_74_save].rightIndex;
          if ((x_75 == -1)) {
            tree[x_74_save].rightIndex = 1;
            const BST tint_symbol_4 = {5, -1, -1};
            tree[1] = tint_symbol_4;
            x_90_phi = true;
            break;
          } else {
            x_80 = tree[x_74_save].rightIndex;
            x_63_phi = x_80;
            {
              x_63 = x_63_phi;
              x_62_phi = x_63;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_63 = x_63_phi;
          x_62_phi = x_63;
        }
      }
      if (x_90_phi) {
        break;
      }
      break;
    }
  }
  int x_95_phi = 0;
  bool x_123_phi = false;
  switch(0u) {
    default: {
      x_95_phi = 0;
      while (true) {
        int x_121 = 0;
        int x_113 = 0;
        int x_96 = 0;
        int x_96_phi = 0;
        const int x_95 = x_95_phi;
        x_123_phi = false;
        if ((x_95 <= 2)) {
        } else {
          break;
        }
        const int x_102 = tree[x_95].data;
        if ((12 <= x_102)) {
          const int x_115_save = x_95;
          const int x_116 = tree[x_115_save].leftIndex;
          if ((x_116 == -1)) {
            tree[x_115_save].leftIndex = 2;
            const BST tint_symbol_5 = {12, -1, -1};
            tree[2] = tint_symbol_5;
            x_123_phi = true;
            break;
          } else {
            x_121 = tree[x_115_save].leftIndex;
            x_96_phi = x_121;
            {
              x_96 = x_96_phi;
              x_95_phi = x_96;
            }
            continue;
          }
          return;
        } else {
          const int x_107_save = x_95;
          const int x_108 = tree[x_107_save].rightIndex;
          if ((x_108 == -1)) {
            tree[x_107_save].rightIndex = 2;
            const BST tint_symbol_6 = {12, -1, -1};
            tree[2] = tint_symbol_6;
            x_123_phi = true;
            break;
          } else {
            x_113 = tree[x_107_save].rightIndex;
            x_96_phi = x_113;
            {
              x_96 = x_96_phi;
              x_95_phi = x_96;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_96 = x_96_phi;
          x_95_phi = x_96;
        }
      }
      if (x_123_phi) {
        break;
      }
      break;
    }
  }
  int x_128_phi = 0;
  bool x_156_phi = false;
  switch(0u) {
    default: {
      x_128_phi = 0;
      while (true) {
        int x_154 = 0;
        int x_146 = 0;
        int x_129 = 0;
        int x_129_phi = 0;
        const int x_128 = x_128_phi;
        x_156_phi = false;
        if ((x_128 <= 3)) {
        } else {
          break;
        }
        const int x_135 = tree[x_128].data;
        if ((15 <= x_135)) {
          const int x_148_save = x_128;
          const int x_149 = tree[x_148_save].leftIndex;
          if ((x_149 == -1)) {
            tree[x_148_save].leftIndex = 3;
            const BST tint_symbol_7 = {15, -1, -1};
            tree[3] = tint_symbol_7;
            x_156_phi = true;
            break;
          } else {
            x_154 = tree[x_148_save].leftIndex;
            x_129_phi = x_154;
            {
              x_129 = x_129_phi;
              x_128_phi = x_129;
            }
            continue;
          }
          return;
        } else {
          const int x_140_save = x_128;
          const int x_141 = tree[x_140_save].rightIndex;
          if ((x_141 == -1)) {
            tree[x_140_save].rightIndex = 3;
            const BST tint_symbol_8 = {15, -1, -1};
            tree[3] = tint_symbol_8;
            x_156_phi = true;
            break;
          } else {
            x_146 = tree[x_140_save].rightIndex;
            x_129_phi = x_146;
            {
              x_129 = x_129_phi;
              x_128_phi = x_129;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_129 = x_129_phi;
          x_128_phi = x_129;
        }
      }
      if (x_156_phi) {
        break;
      }
      break;
    }
  }
  int x_161_phi = 0;
  bool x_189_phi = false;
  switch(0u) {
    default: {
      x_161_phi = 0;
      while (true) {
        int x_187 = 0;
        int x_179 = 0;
        int x_162 = 0;
        int x_162_phi = 0;
        const int x_161 = x_161_phi;
        x_189_phi = false;
        if ((x_161 <= 4)) {
        } else {
          break;
        }
        const int x_168 = tree[x_161].data;
        if ((7 <= x_168)) {
          const int x_181_save = x_161;
          const int x_182 = tree[x_181_save].leftIndex;
          if ((x_182 == -1)) {
            tree[x_181_save].leftIndex = 4;
            const BST tint_symbol_9 = {7, -1, -1};
            tree[4] = tint_symbol_9;
            x_189_phi = true;
            break;
          } else {
            x_187 = tree[x_181_save].leftIndex;
            x_162_phi = x_187;
            {
              x_162 = x_162_phi;
              x_161_phi = x_162;
            }
            continue;
          }
          return;
        } else {
          const int x_173_save = x_161;
          const int x_174 = tree[x_173_save].rightIndex;
          if ((x_174 == -1)) {
            tree[x_173_save].rightIndex = 4;
            const BST tint_symbol_10 = {7, -1, -1};
            tree[4] = tint_symbol_10;
            x_189_phi = true;
            break;
          } else {
            x_179 = tree[x_173_save].rightIndex;
            x_162_phi = x_179;
            {
              x_162 = x_162_phi;
              x_161_phi = x_162;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_162 = x_162_phi;
          x_161_phi = x_162;
        }
      }
      if (x_189_phi) {
        break;
      }
      break;
    }
  }
  int x_194_phi = 0;
  bool x_222_phi = false;
  switch(0u) {
    default: {
      x_194_phi = 0;
      while (true) {
        int x_220 = 0;
        int x_212 = 0;
        int x_195 = 0;
        int x_195_phi = 0;
        const int x_194 = x_194_phi;
        x_222_phi = false;
        if ((x_194 <= 5)) {
        } else {
          break;
        }
        const int x_201 = tree[x_194].data;
        if ((8 <= x_201)) {
          const int x_214_save = x_194;
          const int x_215 = tree[x_214_save].leftIndex;
          if ((x_215 == -1)) {
            tree[x_214_save].leftIndex = 5;
            const BST tint_symbol_11 = {8, -1, -1};
            tree[5] = tint_symbol_11;
            x_222_phi = true;
            break;
          } else {
            x_220 = tree[x_214_save].leftIndex;
            x_195_phi = x_220;
            {
              x_195 = x_195_phi;
              x_194_phi = x_195;
            }
            continue;
          }
          return;
        } else {
          const int x_206_save = x_194;
          const int x_207 = tree[x_206_save].rightIndex;
          if ((x_207 == -1)) {
            tree[x_206_save].rightIndex = 5;
            const BST tint_symbol_12 = {8, -1, -1};
            tree[5] = tint_symbol_12;
            x_222_phi = true;
            break;
          } else {
            x_212 = tree[x_206_save].rightIndex;
            x_195_phi = x_212;
            {
              x_195 = x_195_phi;
              x_194_phi = x_195;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_195 = x_195_phi;
          x_194_phi = x_195;
        }
      }
      if (x_222_phi) {
        break;
      }
      break;
    }
  }
  int x_227_phi = 0;
  bool x_255_phi = false;
  switch(0u) {
    default: {
      x_227_phi = 0;
      while (true) {
        int x_253 = 0;
        int x_245 = 0;
        int x_228 = 0;
        int x_228_phi = 0;
        const int x_227 = x_227_phi;
        x_255_phi = false;
        if ((x_227 <= 6)) {
        } else {
          break;
        }
        const int x_234 = tree[x_227].data;
        if ((2 <= x_234)) {
          const int x_247_save = x_227;
          const int x_248 = tree[x_247_save].leftIndex;
          if ((x_248 == -1)) {
            tree[x_247_save].leftIndex = 6;
            const BST tint_symbol_13 = {2, -1, -1};
            tree[6] = tint_symbol_13;
            x_255_phi = true;
            break;
          } else {
            x_253 = tree[x_247_save].leftIndex;
            x_228_phi = x_253;
            {
              x_228 = x_228_phi;
              x_227_phi = x_228;
            }
            continue;
          }
          return;
        } else {
          const int x_239_save = x_227;
          const int x_240 = tree[x_239_save].rightIndex;
          if ((x_240 == -1)) {
            tree[x_239_save].rightIndex = 6;
            const BST tint_symbol_14 = {2, -1, -1};
            tree[6] = tint_symbol_14;
            x_255_phi = true;
            break;
          } else {
            x_245 = tree[x_239_save].rightIndex;
            x_228_phi = x_245;
            {
              x_228 = x_228_phi;
              x_227_phi = x_228;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_228 = x_228_phi;
          x_227_phi = x_228;
        }
      }
      if (x_255_phi) {
        break;
      }
      break;
    }
  }
  int x_260_phi = 0;
  bool x_288_phi = false;
  switch(0u) {
    default: {
      x_260_phi = 0;
      while (true) {
        int x_286 = 0;
        int x_278 = 0;
        int x_261 = 0;
        int x_261_phi = 0;
        const int x_260 = x_260_phi;
        x_288_phi = false;
        if ((x_260 <= 7)) {
        } else {
          break;
        }
        const int x_267 = tree[x_260].data;
        if ((6 <= x_267)) {
          const int x_280_save = x_260;
          const int x_281 = tree[x_280_save].leftIndex;
          if ((x_281 == -1)) {
            tree[x_280_save].leftIndex = 7;
            const BST tint_symbol_15 = {6, -1, -1};
            tree[7] = tint_symbol_15;
            x_288_phi = true;
            break;
          } else {
            x_286 = tree[x_280_save].leftIndex;
            x_261_phi = x_286;
            {
              x_261 = x_261_phi;
              x_260_phi = x_261;
            }
            continue;
          }
          return;
        } else {
          const int x_272_save = x_260;
          const int x_273 = tree[x_272_save].rightIndex;
          if ((x_273 == -1)) {
            tree[x_272_save].rightIndex = 7;
            const BST tint_symbol_16 = {6, -1, -1};
            tree[7] = tint_symbol_16;
            x_288_phi = true;
            break;
          } else {
            x_278 = tree[x_272_save].rightIndex;
            x_261_phi = x_278;
            {
              x_261 = x_261_phi;
              x_260_phi = x_261;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_261 = x_261_phi;
          x_260_phi = x_261;
        }
      }
      if (x_288_phi) {
        break;
      }
      break;
    }
  }
  int x_293_phi = 0;
  bool x_321_phi = false;
  switch(0u) {
    default: {
      x_293_phi = 0;
      while (true) {
        int x_319 = 0;
        int x_311 = 0;
        int x_294 = 0;
        int x_294_phi = 0;
        const int x_293 = x_293_phi;
        x_321_phi = false;
        if ((x_293 <= 8)) {
        } else {
          break;
        }
        const int x_300 = tree[x_293].data;
        if ((17 <= x_300)) {
          const int x_313_save = x_293;
          const int x_314 = tree[x_313_save].leftIndex;
          if ((x_314 == -1)) {
            tree[x_313_save].leftIndex = 8;
            const BST tint_symbol_17 = {17, -1, -1};
            tree[8] = tint_symbol_17;
            x_321_phi = true;
            break;
          } else {
            x_319 = tree[x_313_save].leftIndex;
            x_294_phi = x_319;
            {
              x_294 = x_294_phi;
              x_293_phi = x_294;
            }
            continue;
          }
          return;
        } else {
          const int x_305_save = x_293;
          const int x_306 = tree[x_305_save].rightIndex;
          if ((x_306 == -1)) {
            tree[x_305_save].rightIndex = 8;
            const BST tint_symbol_18 = {17, -1, -1};
            tree[8] = tint_symbol_18;
            x_321_phi = true;
            break;
          } else {
            x_311 = tree[x_305_save].rightIndex;
            x_294_phi = x_311;
            {
              x_294 = x_294_phi;
              x_293_phi = x_294;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_294 = x_294_phi;
          x_293_phi = x_294;
        }
      }
      if (x_321_phi) {
        break;
      }
      break;
    }
  }
  int x_326_phi = 0;
  bool x_354_phi = false;
  switch(0u) {
    default: {
      x_326_phi = 0;
      while (true) {
        int x_352 = 0;
        int x_344 = 0;
        int x_327 = 0;
        int x_327_phi = 0;
        const int x_326 = x_326_phi;
        x_354_phi = false;
        if ((x_326 <= 9)) {
        } else {
          break;
        }
        const int x_333 = tree[x_326].data;
        if ((13 <= x_333)) {
          const int x_346_save = x_326;
          const int x_347 = tree[x_346_save].leftIndex;
          if ((x_347 == -1)) {
            tree[x_346_save].leftIndex = 9;
            const BST tint_symbol_19 = {13, -1, -1};
            tree[9] = tint_symbol_19;
            x_354_phi = true;
            break;
          } else {
            x_352 = tree[x_346_save].leftIndex;
            x_327_phi = x_352;
            {
              x_327 = x_327_phi;
              x_326_phi = x_327;
            }
            continue;
          }
          return;
        } else {
          const int x_338_save = x_326;
          const int x_339 = tree[x_338_save].rightIndex;
          if ((x_339 == -1)) {
            tree[x_338_save].rightIndex = 9;
            const BST tint_symbol_20 = {13, -1, -1};
            tree[9] = tint_symbol_20;
            x_354_phi = true;
            break;
          } else {
            x_344 = tree[x_338_save].rightIndex;
            x_327_phi = x_344;
            {
              x_327 = x_327_phi;
              x_326_phi = x_327;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_327 = x_327_phi;
          x_326_phi = x_327;
        }
      }
      if (x_354_phi) {
        break;
      }
      break;
    }
  }
  x_357_phi = 0;
  x_360_phi = 0;
  x_362_phi = 0;
  while (true) {
    int x_392 = 0;
    int x_402 = 0;
    int x_407 = 0;
    int x_363 = 0;
    int x_358_phi = 0;
    int x_361_phi = 0;
    const int x_357 = x_357_phi;
    x_360 = x_360_phi;
    const int x_362 = x_362_phi;
    const int x_365 = (6 - 15);
    if ((x_362 < 20)) {
    } else {
      break;
    }
    int x_374_phi = 0;
    int x_392_phi = 0;
    bool x_393_phi = false;
    switch(0u) {
      default: {
        x_374_phi = 0;
        while (true) {
          const int x_374 = x_374_phi;
          x_392_phi = x_357;
          x_393_phi = false;
          if ((x_374 != -1)) {
          } else {
            break;
          }
          const BST x_381 = tree[x_374];
          const int x_382 = x_381.data;
          const int x_383 = x_381.leftIndex;
          const int x_385 = x_381.rightIndex;
          if ((x_382 == x_362)) {
            x_392_phi = x_362;
            x_393_phi = true;
            break;
          }
          const float x_389 = x_GLF_color[((3u <= 3u) ? 3u : 3u)];
          {
            x_374_phi = (!((x_362 <= x_382)) ? x_385 : x_383);
          }
        }
        x_392 = x_392_phi;
        const bool x_393 = x_393_phi;
        x_358_phi = x_392;
        if (x_393) {
          break;
        }
        x_358_phi = -1;
        break;
      }
    }
    int x_358 = 0;
    int x_401 = 0;
    int x_406 = 0;
    int x_402_phi = 0;
    int x_407_phi = 0;
    x_358 = x_358_phi;
    switch(x_362) {
      case 2:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 12:
      case 13:
      case 15:
      case 17: {
        x_402_phi = x_360;
        if ((x_358 == asint(x_362))) {
          x_401 = asint((x_360 + asint(1)));
          x_402_phi = x_401;
        }
        x_402 = x_402_phi;
        x_361_phi = x_402;
        break;
      }
      default: {
        x_407_phi = x_360;
        if ((x_358 == asint(-1))) {
          x_406 = asint((x_360 + asint(1)));
          x_407_phi = x_406;
        }
        x_407 = x_407_phi;
        x_361_phi = x_407;
        break;
      }
    }
    const int x_361 = x_361_phi;
    {
      x_363 = (x_362 + 1);
      x_357_phi = x_358;
      x_360_phi = x_361;
      x_362_phi = x_363;
    }
  }
  if ((x_360 == asint(20))) {
    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
  }
  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_21 = {tint_symbol_1.x_GLF_color_1};
  return tint_symbol_21;
}
