[[block]]
struct buf0 {
  injectionSwitch : vec2<f32>;
};

var<private> data : array<i32, 10>;

var<private> temp : array<i32, 10>;

[[group(0), binding(0)]] var<uniform> x_28 : buf0;

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
  var k : i32;
  var i : i32;
  var j : i32;
  var i_1 : i32;
  let x_262 : i32 = *(from);
  k = x_262;
  let x_263 : i32 = *(from);
  i = x_263;
  let x_264 : i32 = *(mid);
  j = (x_264 + 1);
  loop {
    let x_270 : i32 = i;
    let x_271 : i32 = *(mid);
    let x_273 : i32 = j;
    let x_274 : i32 = *(to);
    if (((x_270 <= x_271) && (x_273 <= x_274))) {
    } else {
      break;
    }
    let x_278 : i32 = i;
    let x_280 : i32 = data[x_278];
    let x_281 : i32 = j;
    let x_283 : i32 = data[x_281];
    if ((x_280 < x_283)) {
      let x_288 : i32 = k;
      k = (x_288 + 1);
      let x_290 : i32 = i;
      i = (x_290 + 1);
      let x_293 : i32 = data[x_290];
      temp[x_288] = x_293;
    } else {
      let x_295 : i32 = k;
      k = (x_295 + 1);
      let x_297 : i32 = j;
      j = (x_297 + 1);
      let x_300 : i32 = data[x_297];
      temp[x_295] = x_300;
    }
  }
  loop {
    let x_306 : i32 = i;
    let x_308 : i32 = i;
    let x_309 : i32 = *(mid);
    if (((x_306 < 10) && (x_308 <= x_309))) {
    } else {
      break;
    }
    let x_313 : i32 = k;
    k = (x_313 + 1);
    let x_315 : i32 = i;
    i = (x_315 + 1);
    let x_318 : i32 = data[x_315];
    temp[x_313] = x_318;
  }
  let x_320 : i32 = *(from);
  i_1 = x_320;
  loop {
    let x_325 : i32 = i_1;
    let x_326 : i32 = *(to);
    if ((x_325 <= x_326)) {
    } else {
      break;
    }
    let x_329 : i32 = i_1;
    let x_330 : i32 = i_1;
    let x_332 : i32 = temp[x_330];
    data[x_329] = x_332;

    continuing {
      let x_334 : i32 = i_1;
      i_1 = (x_334 + 1);
    }
  }
  return;
}

fn mergeSort_() {
  var low : i32;
  var high : i32;
  var m : i32;
  var i_2 : i32;
  var from_1 : i32;
  var mid_1 : i32;
  var to_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  low = 0;
  high = 9;
  m = 1;
  loop {
    let x_341 : i32 = m;
    let x_342 : i32 = high;
    if ((x_341 <= x_342)) {
    } else {
      break;
    }
    let x_345 : i32 = low;
    i_2 = x_345;
    loop {
      let x_350 : i32 = i_2;
      let x_351 : i32 = high;
      if ((x_350 < x_351)) {
      } else {
        break;
      }
      let x_354 : i32 = i_2;
      from_1 = x_354;
      let x_355 : i32 = i_2;
      let x_356 : i32 = m;
      mid_1 = ((x_355 + x_356) - 1);
      let x_359 : i32 = i_2;
      let x_360 : i32 = m;
      let x_364 : i32 = high;
      to_1 = min(((x_359 + (2 * x_360)) - 1), x_364);
      let x_366 : i32 = from_1;
      param = x_366;
      let x_367 : i32 = mid_1;
      param_1 = x_367;
      let x_368 : i32 = to_1;
      param_2 = x_368;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_370 : i32 = m;
        let x_372 : i32 = i_2;
        i_2 = (x_372 + (2 * x_370));
      }
    }

    continuing {
      let x_374 : i32 = m;
      m = (2 * x_374);
    }
  }
  return;
}

fn main_1() {
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  let x_86 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_86);
  loop {
    let x_92 : i32 = i_3;
    switch(x_92) {
      case 9: {
        let x_122 : i32 = i_3;
        data[x_122] = -5;
      }
      case 8: {
        let x_120 : i32 = i_3;
        data[x_120] = -4;
      }
      case 7: {
        let x_118 : i32 = i_3;
        data[x_118] = -3;
      }
      case 6: {
        let x_116 : i32 = i_3;
        data[x_116] = -2;
      }
      case 5: {
        let x_114 : i32 = i_3;
        data[x_114] = -1;
      }
      case 4: {
        let x_112 : i32 = i_3;
        data[x_112] = 0;
      }
      case 3: {
        let x_110 : i32 = i_3;
        data[x_110] = 1;
      }
      case 2: {
        let x_108 : i32 = i_3;
        data[x_108] = 2;
      }
      case 1: {
        let x_106 : i32 = i_3;
        data[x_106] = 3;
      }
      case 0: {
        let x_104 : i32 = i_3;
        data[x_104] = 4;
      }
      default: {
      }
    }
    let x_124 : i32 = i_3;
    i_3 = (x_124 + 1);

    continuing {
      let x_126 : i32 = i_3;
      if ((x_126 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_132 : i32 = j_1;
    let x_133 : bool = (x_132 < 10);
    let x_135 : f32 = x_28.injectionSwitch.x;
    if (!((x_135 <= 1.0))) {
      grey = 1.0;
    }
    if (x_133) {
    } else {
      break;
    }
    let x_140 : i32 = j_1;
    let x_141 : i32 = j_1;
    let x_143 : i32 = data[x_141];
    temp[x_140] = x_143;

    continuing {
      let x_145 : i32 = j_1;
      j_1 = (x_145 + 1);
    }
  }
  mergeSort_();
  let x_149 : f32 = gl_FragCoord.y;
  if ((i32(x_149) < 30)) {
    let x_156 : i32 = data[0];
    grey = (0.5 + (f32(x_156) / 10.0));
  } else {
    let x_161 : f32 = gl_FragCoord.y;
    if ((i32(x_161) < 60)) {
      let x_168 : i32 = data[1];
      grey = (0.5 + (f32(x_168) / 10.0));
    } else {
      let x_173 : f32 = gl_FragCoord.y;
      if ((i32(x_173) < 90)) {
        let x_180 : i32 = data[2];
        grey = (0.5 + (f32(x_180) / 10.0));
      } else {
        let x_185 : f32 = gl_FragCoord.y;
        if ((i32(x_185) < 120)) {
          let x_192 : i32 = data[3];
          grey = (0.5 + (f32(x_192) / 10.0));
        } else {
          let x_197 : f32 = gl_FragCoord.y;
          if ((i32(x_197) < 150)) {
            discard;
          } else {
            let x_204 : f32 = gl_FragCoord.y;
            if ((i32(x_204) < 180)) {
              let x_211 : i32 = data[5];
              grey = (0.5 + (f32(x_211) / 10.0));
            } else {
              let x_216 : f32 = gl_FragCoord.y;
              if ((i32(x_216) < 210)) {
                let x_223 : i32 = data[6];
                grey = (0.5 + (f32(x_223) / 10.0));
              } else {
                let x_228 : f32 = gl_FragCoord.y;
                if ((i32(x_228) < 240)) {
                  let x_235 : i32 = data[7];
                  grey = (0.5 + (f32(x_235) / 10.0));
                } else {
                  let x_240 : f32 = gl_FragCoord.y;
                  var guard233 : bool = true;
                  if ((i32(x_240) < 270)) {
                    let x_247 : i32 = data[8];
                    grey = (0.5 + (f32(x_247) / 10.0));
                    guard233 = false;
                  } else {
                    if (guard233) {
                      let x_252 : f32 = x_28.injectionSwitch.y;
                      if (!((0.0 < x_252))) {
                        guard233 = false;
                      }
                      if (guard233) {
                        discard;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_255 : f32 = grey;
  let x_256 : vec3<f32> = vec3<f32>(x_255, x_255, x_255);
  x_GLF_color = vec4<f32>(x_256.x, x_256.y, x_256.z, 1.0);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
