SKIP: FAILED

struct QuicksortObject {
  int numbers[10];
};

static QuicksortObject obj = (QuicksortObject)0;
static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
cbuffer cbuffer_x_188 : register(b0, space0) {
  uint4 x_188[1];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void swap_i1_i1_(inout int i, inout int j) {
  int temp = 0;
  const int x_932 = temp;
  temp = 0;
  temp = x_932;
  const float3 x_523 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
  const int x_933 = i;
  i = 0;
  i = x_933;
  const int x_28 = i;
  const int x_934 = j;
  j = 0;
  j = x_934;
  const float3 x_524 = float3(x_523.y, x_523.x, x_523.y);
  const int x_935 = temp;
  temp = 0;
  temp = x_935;
  const int x_30_save = x_28;
  const int x_936 = obj.numbers[x_30_save];
  obj.numbers[x_30_save] = 0;
  obj.numbers[x_30_save] = x_936;
  const int x_31 = obj.numbers[x_30_save];
  const int x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  const int x_938 = j;
  j = 0;
  j = x_938;
  const float3 x_525 = float3(x_523.z, float3(1.0f, 2.0f, 3.0f).x, x_523.y);
  const int x_939 = i;
  i = 0;
  i = x_939;
  const int x_32 = i;
  const int x_940 = obj.numbers[x_30_save];
  obj.numbers[x_30_save] = 0;
  obj.numbers[x_30_save] = x_940;
  const int x_33 = j;
  const int x_941 = i;
  i = 0;
  i = x_941;
  const float3 x_526 = float3(x_525.x, x_525.z, x_525.z);
  const int x_942 = obj.numbers[x_30_save];
  obj.numbers[x_30_save] = 0;
  obj.numbers[x_30_save] = x_942;
  const int x_34_save = x_33;
  const int x_35 = obj.numbers[x_34_save];
  const QuicksortObject x_943 = obj;
  const int tint_symbol_4[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_5 = {tint_symbol_4};
  obj = tint_symbol_5;
  obj = x_943;
  const float2 x_527 = float2(x_526.x, x_526.x);
  const int x_36_save = x_32;
  const float3 x_528 = float3(x_524.x, x_524.z, x_524.x);
  obj.numbers[x_36_save] = x_35;
  const QuicksortObject x_944 = obj;
  const int tint_symbol_6[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_7 = {tint_symbol_6};
  obj = tint_symbol_7;
  obj = x_944;
  const float3 x_529 = float3(x_526.y, x_526.z, x_526.x);
  const int x_945 = i;
  i = 0;
  i = x_945;
  const int x_37 = j;
  const int x_946 = temp;
  temp = 0;
  temp = x_946;
  const float2 x_530 = float2(x_529.z, x_529.y);
  const int x_947 = obj.numbers[x_34_save];
  obj.numbers[x_34_save] = 0;
  obj.numbers[x_34_save] = x_947;
  const int x_38 = temp;
  const int x_948 = j;
  j = 0;
  j = x_948;
  const float3 x_531 = float3(x_527.x, x_526.y, x_526.x);
  const int x_949 = obj.numbers[x_36_save];
  obj.numbers[x_36_save] = 0;
  obj.numbers[x_36_save] = x_949;
  const QuicksortObject x_950 = obj;
  const int tint_symbol_8[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_9 = {tint_symbol_8};
  obj = tint_symbol_9;
  obj = x_950;
  const float3 x_532 = float3(x_528.x, x_528.y, x_528.x);
  const int x_951 = obj.numbers[x_34_save];
  obj.numbers[x_34_save] = 0;
  obj.numbers[x_34_save] = x_951;
  obj.numbers[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(inout int l, inout int h) {
  int param_3 = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param_2 = 0;
  int param_1 = 0;
  int param = 0;
  int pivot = 0;
  float2 x_537 = float2(0.0f, 0.0f);
  float3 x_538 = float3(0.0f, 0.0f, 0.0f);
  const int x_952 = h;
  h = 0;
  h = x_952;
  const int x_41 = h;
  const int x_953 = l;
  l = 0;
  l = x_953;
  const int x_42_save = x_41;
  const int x_954 = obj.numbers[x_42_save];
  obj.numbers[x_42_save] = 0;
  obj.numbers[x_42_save] = x_954;
  const int x_43 = obj.numbers[x_42_save];
  const int x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  const float3 x_534 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
  const int x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  const int x_45 = l;
  const int x_957 = h;
  h = 0;
  h = x_957;
  const int x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  const float3 x_535 = float3(x_534.y, x_534.z, x_534.y);
  const int x_959 = l;
  l = 0;
  l = x_959;
  i_1 = (x_45 - asint(1u));
  const int x_49 = l;
  const float3 x_536 = float3(x_534.x, x_534.z, x_535.x);
  j_1 = 10;
  const QuicksortObject x_960 = obj;
  const int tint_symbol_10[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_11 = {tint_symbol_10};
  obj = tint_symbol_11;
  obj = x_960;
  [loop] while (true) {
    const int x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    const int x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    const int x_55 = j_1;
    const int x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
    const QuicksortObject x_964 = obj;
    const int tint_symbol_12[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_13 = {tint_symbol_12};
    obj = tint_symbol_13;
    obj = x_964;
    const int x_56 = h;
    const int x_965 = h;
    h = 0;
    h = x_965;
    const int x_966 = param;
    param = 0;
    param = x_966;
    const int x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = float3(x_534.x, x_537.y, x_534.z);
    const int x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= (x_56 - asint(1u)))) {
    } else {
      break;
    }
    const int x_60 = j_1;
    const int x_969 = obj.numbers[x_42_save];
    obj.numbers[x_42_save] = 0;
    obj.numbers[x_42_save] = x_969;
    const int x_61_save = x_60;
    const int x_970 = h;
    h = 0;
    h = x_970;
    const float3 x_539 = float3(x_537.x, x_535.z, x_537.x);
    const int x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    const int x_62 = obj.numbers[x_61_save];
    const QuicksortObject x_972 = obj;
    const int tint_symbol_14[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_15 = {tint_symbol_14};
    obj = tint_symbol_15;
    obj = x_972;
    const int x_63 = pivot;
    const float2 x_540 = float2(float3(1.0f, 2.0f, 3.0f).y, x_534.z);
    const int x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    const int x_974 = l;
    l = 0;
    l = x_974;
    const float3 x_541 = float3(x_534.y, x_534.x, x_534.y);
    const int x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      const float3 x_542 = float3(x_541.z, x_541.x, x_541.x);
      const int x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      const int x_67 = i_1;
      const int x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      const float2 x_543 = float2(x_539.x, x_541.y);
      const int x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      const int x_979 = param;
      param = 0;
      param = x_979;
      i_1 = (x_67 + asint(1u));
      const int x_980 = l;
      l = 0;
      l = x_980;
      const float3 x_544 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, x_540.x);
      const int x_70 = i_1;
      const float2 x_545 = float2(x_537.y, x_538.x);
      const int x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      const int x_982 = param;
      param = 0;
      param = x_982;
      const float2 x_546 = float2(x_545.x, x_545.x);
      const int x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      param_1 = j_1;
      const int x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(param, param_1);
      const int x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    const QuicksortObject x_986 = obj;
    const int tint_symbol_16[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_17 = {tint_symbol_16};
    obj = tint_symbol_17;
    obj = x_986;
    {
      const int x_987 = h;
      h = 0;
      h = x_987;
      const int x_74 = j_1;
      const int x_988 = h;
      h = 0;
      h = x_988;
      const float3 x_547 = float3(x_539.x, x_541.z, x_541.z);
      const int x_989 = obj.numbers[x_61_save];
      obj.numbers[x_61_save] = 0;
      obj.numbers[x_61_save] = x_989;
      const int x_990 = param;
      param = 0;
      param = x_990;
      j_1 = (1 + x_74);
      const int x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      const float3 x_548 = float3(x_541.y, x_541.z, x_541.x);
      const int x_992 = obj.numbers[x_61_save];
      obj.numbers[x_61_save] = 0;
      obj.numbers[x_61_save] = x_992;
    }
  }
  const int x_76 = i_1;
  const int x_993 = obj.numbers[x_42_save];
  obj.numbers[x_42_save] = 0;
  obj.numbers[x_42_save] = x_993;
  const float2 x_549 = float2(x_534.x, x_534.y);
  const QuicksortObject x_994 = obj;
  const int tint_symbol_18[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_19 = {tint_symbol_18};
  obj = tint_symbol_19;
  obj = x_994;
  const int x_995 = h;
  h = 0;
  h = x_995;
  i_1 = (1 + x_76);
  const int x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  const int x_79 = i_1;
  const int x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  const float2 x_550 = float2(x_534.x, x_534.x);
  const int x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  const float2 x_551 = float2(x_534.y, x_536.x);
  const int x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  const int x_81 = h;
  const float2 x_552 = float2(x_550.x, x_549.y);
  const int x_1000 = h;
  h = 0;
  h = x_1000;
  param_3 = x_81;
  const int x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  const float2 x_553 = float2(x_549.y, x_552.x);
  const int x_1002 = h;
  h = 0;
  h = x_1002;
  swap_i1_i1_(param_2, param_3);
  const int x_1003 = l;
  l = 0;
  l = x_1003;
  const float2 x_554 = float2(x_536.z, float3(1.0f, 2.0f, 3.0f).y);
  const int x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  const int x_83 = i_1;
  const int x_1005 = param;
  param = 0;
  param = x_1005;
  const float2 x_555 = float2(x_534.y, x_534.x);
  const int x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

void quicksort_() {
  int param_4 = 0;
  int h_1 = 0;
  int p = 0;
  int l_1 = 0;
  int top = 0;
  int stack[10] = (int[10])0;
  int param_5 = 0;
  l_1 = 0;
  const int x_1007 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  const int x_1008[10] = stack;
  const int tint_symbol_20[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  stack = tint_symbol_20;
  stack = x_1008;
  const float2 x_556 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y);
  const int x_1009 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  const int x_1010 = p;
  p = 0;
  p = x_1010;
  const int x_93 = top;
  const float2 x_557 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
  const int x_1011 = p;
  p = 0;
  p = x_1011;
  const int x_94 = (x_93 + asint(1u));
  const int x_1012 = top;
  top = 0;
  top = x_1012;
  const float2 x_558 = float2(x_556.y, x_557.y);
  const int x_1013 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  const int x_1014 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  const float3 x_559 = float3(x_557.y, x_557.x, x_557.x);
  const int x_1015 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  const int x_95 = l_1;
  const QuicksortObject x_1016 = obj;
  const int tint_symbol_21[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_22 = {tint_symbol_21};
  obj = tint_symbol_22;
  obj = x_1016;
  const float3 x_560 = float3(x_559.y, x_559.x, x_557.x);
  const int x_96_save = x_94;
  const int x_1017[10] = stack;
  const int tint_symbol_23[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  stack = tint_symbol_23;
  stack = x_1017;
  const float3 x_561 = float3(x_556.y, x_556.y, x_556.y);
  const int x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack[x_96_save] = x_95;
  const int x_1019 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  const int x_97 = top;
  const int x_1020 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  const float3 x_562 = float3(float3(1.0f, 2.0f, 3.0f).z, x_558.y, float3(1.0f, 2.0f, 3.0f).y);
  const int x_1021 = stack[x_96_save];
  stack[x_96_save] = 0;
  stack[x_96_save] = x_1021;
  const int x_98 = (x_97 + 1);
  const int x_1022 = stack[x_96_save];
  stack[x_96_save] = 0;
  stack[x_96_save] = x_1022;
  const float3 x_563 = float3(x_559.x, x_559.z, x_556.y);
  top = x_98;
  const int x_1023 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  const int x_99 = h_1;
  const int x_1024 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  const float3 x_564 = float3(x_558.x, x_561.x, x_558.y);
  const int x_1025 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  const int x_100_save = x_98;
  const int x_1026 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  const float2 x_565 = float2(x_564.z, x_564.z);
  const int x_1027 = p;
  p = 0;
  p = x_1027;
  stack[x_100_save] = x_99;
  [loop] while (true) {
    const float3 x_566 = float3(x_563.x, x_563.x, x_563.x);
    const int x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    const int x_1029[10] = stack;
    const int tint_symbol_24[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    stack = tint_symbol_24;
    stack = x_1029;
    const int x_106 = top;
    const int x_1030[10] = stack;
    const int tint_symbol_25[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    stack = tint_symbol_25;
    stack = x_1030;
    const float2 x_567 = float2(x_558.x, x_564.z);
    const int x_1031 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= asint(0u))) {
    } else {
      break;
    }
    const QuicksortObject x_1032 = obj;
    const int tint_symbol_26[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_27 = {tint_symbol_26};
    obj = tint_symbol_27;
    obj = x_1032;
    const float3 x_568 = float3(x_559.y, x_559.x, x_563.y);
    const int x_1033 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    const int x_108 = top;
    const float3 x_569 = float3(x_565.x, x_567.y, x_565.x);
    const int x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    const float2 x_570 = float2(x_556.x, x_556.x);
    const int x_1035 = p;
    p = 0;
    p = x_1035;
    top = (x_108 - asint(1u));
    const int x_1036 = p;
    p = 0;
    p = x_1036;
    const int x_110_save = x_108;
    const int x_1037 = stack[x_96_save];
    stack[x_96_save] = 0;
    stack[x_96_save] = x_1037;
    const int x_111 = stack[x_110_save];
    const int x_1038[10] = stack;
    const int tint_symbol_28[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    stack = tint_symbol_28;
    stack = x_1038;
    const float3 x_571 = float3(x_559.y, x_559.x, x_564.y);
    const int x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    const int x_1040[10] = stack;
    const int tint_symbol_29[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    stack = tint_symbol_29;
    stack = x_1040;
    const float2 x_572 = float2(x_562.y, x_561.y);
    const int x_1041 = p;
    p = 0;
    p = x_1041;
    const int x_112 = top;
    const int x_1042 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    const int x_1043 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1043;
    const float2 x_573 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
    top = (x_112 - 1);
    const int x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    const float3 x_574 = float3(x_570.y, x_565.x, x_570.y);
    const int x_1045 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    const int x_114_save = x_112;
    const float2 x_575 = float2(x_564.y, x_564.z);
    const int x_1046 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1046;
    const int x_115 = stack[x_114_save];
    const int x_1047 = p;
    p = 0;
    p = x_1047;
    const float3 x_576 = float3(x_573.y, x_573.y, x_565.x);
    const int x_1048 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    const int x_1049 = top;
    top = 0;
    top = x_1049;
    param_4 = l_1;
    const int x_1050 = stack[x_110_save];
    stack[x_110_save] = 0;
    stack[x_110_save] = x_1050;
    const float2 x_577 = float2(x_569.y, x_569.z);
    const int x_120 = h_1;
    const float2 x_578 = float2(x_558.x, float3(1.0f, 2.0f, 3.0f).y);
    param_5 = x_120;
    const int x_1051 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1051;
    const int x_121 = performPartition_i1_i1_(param_4, param_5);
    const float2 x_579 = float2(x_567.x, x_568.x);
    const int x_1052 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    const int x_1053 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    const int x_122 = p;
    const int x_1054 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    const float2 x_580 = float2(x_568.y, x_568.y);
    const int x_1055 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    const int x_1056 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    const int x_124 = l_1;
    const int x_1057 = stack[x_110_save];
    stack[x_110_save] = 0;
    stack[x_110_save] = x_1057;
    const int x_1058 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    const float2 x_582 = float2(x_567.y, x_573.x);
    const int x_1059 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1059;
    if (((x_122 - asint(1u)) > x_124)) {
      const int x_1060 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      const int x_128 = top;
      const float2 x_583 = float2(x_571.y, x_556.y);
      const int x_1061 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1061;
      const int x_1062[10] = stack;
      const int tint_symbol_30[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      stack = tint_symbol_30;
      stack = x_1062;
      const float2 x_584 = float2(x_569.z, x_569.y);
      const float3 x_585 = float3(x_580.y, x_577.x, x_577.x);
      const int x_130 = l_1;
      const int x_1063 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1063;
      const float2 x_586 = float2(x_564.x, x_585.x);
      const int x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      const int x_131_save = (1 + x_128);
      const int x_1065 = stack[x_110_save];
      stack[x_110_save] = 0;
      stack[x_110_save] = x_1065;
      const float3 x_587 = float3(x_566.y, x_566.y, x_563.x);
      const int x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack[x_131_save] = x_130;
      const int x_132 = top;
      const int x_1067 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1067;
      const float2 x_588 = float2(x_575.y, x_575.x);
      const int x_1068 = stack[x_131_save];
      stack[x_131_save] = 0;
      stack[x_131_save] = x_1068;
      const int x_133 = asint((1u + asuint(x_132)));
      const int x_1069 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1069;
      const float3 x_589 = float3(x_576.z, x_588.y, x_576.z);
      const int x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      const int x_1071[10] = stack;
      const int tint_symbol_31[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      stack = tint_symbol_31;
      stack = x_1071;
      const int x_134 = p;
      const float2 x_590 = float2(x_576.x, x_573.y);
      const int x_1072 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1072;
      const int x_136_save = x_133;
      const int x_1073 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1073;
      stack[x_136_save] = (x_134 - asint(1u));
      const int x_1074 = stack[x_96_save];
      stack[x_96_save] = 0;
      stack[x_96_save] = x_1074;
      const float2 x_591 = float2(x_569.z, x_569.y);
      const int x_1075 = stack[x_136_save];
      stack[x_136_save] = 0;
      stack[x_136_save] = x_1075;
    }
    const int x_1076 = stack[x_96_save];
    stack[x_96_save] = 0;
    stack[x_96_save] = x_1076;
    const float2 x_592 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).y);
    const QuicksortObject x_1077 = obj;
    const int tint_symbol_32[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_33 = {tint_symbol_32};
    obj = tint_symbol_33;
    obj = x_1077;
    const int x_137 = p;
    const int x_1078 = stack[x_114_save];
    stack[x_114_save] = 0;
    stack[x_114_save] = x_1078;
    const float3 x_593 = float3(x_571.z, x_556.x, x_556.y);
    const int x_1079 = p;
    p = 0;
    p = x_1079;
    const float3 x_594 = float3(x_563.z, x_563.x, x_575.x);
    const int x_1080 = stack[x_114_save];
    stack[x_114_save] = 0;
    stack[x_114_save] = x_1080;
    const int x_139 = h_1;
    const int x_1081 = top;
    top = 0;
    top = x_1081;
    const float3 x_595 = float3(x_560.z, x_568.x, x_560.x);
    const int x_1082 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1082;
    const int x_1083 = p;
    p = 0;
    p = x_1083;
    if ((asint((1u + asuint(x_137))) < x_139)) {
      const int x_1084 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1084;
      const float2 x_596 = float2(x_592.y, x_582.x);
      const int x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      const int x_143 = top;
      const int x_1086 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1086;
      const float3 x_597 = float3(x_562.y, x_560.y, x_560.y);
      const int x_144 = (x_143 + 1);
      const int x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      const int x_1088 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1088;
      const int x_145 = p;
      const int x_1089 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      const float3 x_599 = float3(x_560.z, x_560.x, x_568.x);
      const int x_1090 = p;
      p = 0;
      p = x_1090;
      const float3 x_600 = float3(x_556.x, x_580.x, x_580.x);
      const int x_1091 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1091;
      const int x_147_save = x_144;
      const int x_1092 = stack[x_110_save];
      stack[x_110_save] = 0;
      stack[x_110_save] = x_1092;
      const float2 x_601 = float2(x_563.x, x_563.y);
      stack[x_147_save] = asint((1u + asuint(x_145)));
      const int x_1093[10] = stack;
      const int tint_symbol_34[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      stack = tint_symbol_34;
      stack = x_1093;
      const int x_148 = top;
      const int x_1094 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1094;
      const float2 x_602 = float2(x_565.y, x_599.y);
      const int x_1095[10] = stack;
      const int tint_symbol_35[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      stack = tint_symbol_35;
      stack = x_1095;
      const int x_149 = (x_148 + asint(1u));
      const int x_1096 = stack[x_147_save];
      stack[x_147_save] = 0;
      stack[x_147_save] = x_1096;
      top = x_149;
      const int x_1097 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      const int x_150 = h_1;
      const int x_1098 = stack[x_100_save];
      stack[x_100_save] = 0;
      stack[x_100_save] = x_1098;
      const int x_1099 = stack[x_96_save];
      stack[x_96_save] = 0;
      stack[x_96_save] = x_1099;
      stack[x_149] = x_150;
      const int x_1100 = stack[x_114_save];
      stack[x_114_save] = 0;
      stack[x_114_save] = x_1100;
      const float3 x_603 = float3(x_568.y, x_564.x, x_564.x);
      const int x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    const int x_1102 = stack[x_100_save];
    stack[x_100_save] = 0;
    stack[x_100_save] = x_1102;
    {
      const int x_1103 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      const float2 x_604 = float2(x_563.z, x_564.x);
      const QuicksortObject x_1104 = obj;
      const int tint_symbol_36[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      const QuicksortObject tint_symbol_37 = {tint_symbol_36};
      obj = tint_symbol_37;
      obj = x_1104;
    }
  }
  const int x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

void main_1() {
  float3 color = float3(0.0f, 0.0f, 0.0f);
  int i_2 = 0;
  float2 uv = float2(0.0f, 0.0f);
  const float2 x_717 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_717;
  i_2 = 0;
  const QuicksortObject x_721 = obj;
  const int tint_symbol_38[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_39 = {tint_symbol_38};
  obj = tint_symbol_39;
  obj = x_721;
  if (true) {
    const QuicksortObject x_722 = obj;
    const int tint_symbol_40[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_41 = {tint_symbol_40};
    obj = tint_symbol_41;
    obj = x_722;
    const float2 x_431 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
    const int x_158 = i_2;
    const float2 x_723 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_723;
    const float3 x_725 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_725;
    const float2 x_432 = float2(x_431.y, x_431.y);
    const QuicksortObject x_726 = obj;
    const int tint_symbol_42[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_43 = {tint_symbol_42};
    obj = tint_symbol_43;
    obj = x_726;
  }
  const QuicksortObject x_756 = obj;
  const int tint_symbol_44[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_45 = {tint_symbol_44};
  obj = tint_symbol_45;
  obj = x_756;
  const float2 x_446 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x);
  const int x_757 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_();
  const QuicksortObject x_758 = obj;
  const int tint_symbol_46[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_47 = {tint_symbol_46};
  obj = tint_symbol_47;
  obj = x_758;
  const float4 x_184 = gl_FragCoord;
  const float2 x_759 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_759;
  const float2 x_447 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
  const float2 x_760 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_760;
  const float2 x_185 = float2(x_184.x, x_184.y);
  const float3 x_448 = float3(x_185.y, x_446.y, x_446.y);
  const QuicksortObject x_761 = obj;
  const int tint_symbol_48[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_49 = {tint_symbol_48};
  obj = tint_symbol_49;
  obj = x_761;
  const float2 x_762 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_762;
  const float2 x_191 = asfloat(x_188[0].xy);
  const QuicksortObject x_763 = obj;
  const int tint_symbol_50[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_51 = {tint_symbol_50};
  obj = tint_symbol_51;
  obj = x_763;
  const float3 x_449 = float3(x_184.y, float3(1.0f, 2.0f, 3.0f).z, x_184.w);
  const float3 x_764 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_764;
  const float2 x_192 = (x_185 / x_191);
  const QuicksortObject x_765 = obj;
  const int tint_symbol_52[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_53 = {tint_symbol_52};
  obj = tint_symbol_53;
  obj = x_765;
  const float2 x_450 = float2(x_447.x, x_185.y);
  const float3 x_766 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  const float3 x_767 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = float3(1.0f, 2.0f, 3.0f);
  const float3 x_768 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_768;
  const float3 x_451 = float3(x_185.x, x_185.y, x_446.y);
  const QuicksortObject x_769 = obj;
  const int tint_symbol_54[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_55 = {tint_symbol_54};
  obj = tint_symbol_55;
  obj = x_769;
  const int x_770 = obj.numbers[0u];
  obj.numbers[0u] = 0;
  obj.numbers[0u] = x_770;
  const int x_201 = obj.numbers[0u];
  const QuicksortObject x_771 = obj;
  const int tint_symbol_56[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_57 = {tint_symbol_56};
  obj = tint_symbol_57;
  obj = x_771;
  const int x_772 = obj.numbers[0u];
  obj.numbers[0u] = 0;
  obj.numbers[0u] = x_772;
  const float x_206 = color.x;
  const float x_773 = color.x;
  color.x = 0.0f;
  color.x = x_773;
  const float2 x_452 = float2(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
  const int x_774 = i_2;
  i_2 = 0;
  i_2 = x_774;
  const QuicksortObject x_775 = obj;
  const int tint_symbol_58[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_59 = {tint_symbol_58};
  obj = tint_symbol_59;
  obj = x_775;
  const float3 x_453 = float3(x_451.x, x_450.x, x_450.y);
  color.x = (x_206 + float(x_201));
  const float2 x_776 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_776;
  const float2 x_777 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_777;
  const float2 x_454 = float2(x_184.y, x_184.y);
  const float x_210 = uv.x;
  const float2 x_455 = float2(x_192.y, x_192.x);
  const float x_778 = uv.x;
  uv.x = 0.0f;
  uv.x = x_778;
  const QuicksortObject x_779 = obj;
  const int tint_symbol_60[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_61 = {tint_symbol_60};
  obj = tint_symbol_61;
  obj = x_779;
  if ((x_210 > 0.25f)) {
    const int x_780 = i_2;
    i_2 = 0;
    i_2 = x_780;
    const int x_781 = obj.numbers[0u];
    obj.numbers[0u] = 0;
    obj.numbers[0u] = x_781;
    const float3 x_456 = float3(float2(0.0f, 0.0f).y, x_448.y, x_448.y);
    const float x_782 = uv.x;
    uv.x = 0.0f;
    uv.x = x_782;
    const int x_216 = obj.numbers[1];
    const QuicksortObject x_783 = obj;
    const int tint_symbol_62[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_63 = {tint_symbol_62};
    obj = tint_symbol_63;
    obj = x_783;
    const float2 x_457 = float2(x_454.x, x_454.x);
    const float2 x_784 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_784;
    const QuicksortObject x_785 = obj;
    const int tint_symbol_64[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_65 = {tint_symbol_64};
    obj = tint_symbol_65;
    obj = x_785;
    const float2 x_458 = float2(float3(1.0f, 2.0f, 3.0f).z, float2(0.0f, 0.0f).y);
    const int x_786 = i_2;
    i_2 = 0;
    i_2 = x_786;
    const float x_219 = color[0];
    const float x_787 = color[0];
    color[0] = 0.0f;
    color[0] = x_787;
    const float3 x_788 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_788;
    const float3 x_789 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_789;
    const float3 x_459 = float3(x_454.y, x_454.y, x_447.y);
    const float x_790 = color[0];
    color[0] = 0.0f;
    color[0] = x_790;
    color.x = (float(x_216) + x_219);
    const int x_791 = obj.numbers[0u];
    obj.numbers[0u] = 0;
    obj.numbers[0u] = x_791;
  }
  const float x_792 = uv.x;
  uv.x = 0.0f;
  uv.x = x_792;
  const float x_793 = uv.x;
  uv.x = 0.0f;
  uv.x = x_793;
  const float x_223 = uv.x;
  const float x_794 = uv.x;
  uv.x = 0.0f;
  uv.x = x_794;
  const float3 x_460 = float3(x_453.z, x_453.y, x_453.y);
  const float2 x_795 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_795;
  const float x_796 = uv.x;
  uv.x = 0.0f;
  uv.x = x_796;
  const float2 x_461 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
  const float x_797 = uv.x;
  uv.x = 0.0f;
  uv.x = x_797;
  if ((x_223 > 0.5f)) {
    const float x_798 = uv.x;
    uv.x = 0.0f;
    uv.x = x_798;
    const float2 x_462 = float2(x_446.x, x_446.x);
    const float x_799 = color.x;
    color.x = 0.0f;
    color.x = x_799;
    const float x_800 = color.x;
    color.x = 0.0f;
    color.x = x_800;
    const float3 x_463 = float3(x_453.x, x_453.z, x_461.y);
    const float x_801 = color.x;
    color.x = 0.0f;
    color.x = x_801;
    const int x_230 = obj.numbers[2u];
    const float x_802 = uv.x;
    uv.x = 0.0f;
    uv.x = x_802;
    const float x_803 = color.x;
    color.x = 0.0f;
    color.x = x_803;
    const int x_804 = obj.numbers[2u];
    obj.numbers[2u] = 0;
    obj.numbers[2u] = x_804;
    const float2 x_464 = float2(x_450.y, x_191.x);
    const float x_805 = color.y;
    color.y = 0.0f;
    color.y = x_805;
    const float x_234 = color.y;
    const int x_806 = obj.numbers[2u];
    obj.numbers[2u] = 0;
    obj.numbers[2u] = x_806;
    const float2 x_465 = float2(x_463.x, x_185.x);
    const float x_807 = color.x;
    color.x = 0.0f;
    color.x = x_807;
    const int x_808 = i_2;
    i_2 = 0;
    i_2 = x_808;
    const float2 x_466 = float2(x_455.y, float2(0.0f, 0.0f).y);
    const int x_809 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color.y = (float(x_230) + x_234);
    const float x_810 = uv.x;
    uv.x = 0.0f;
    uv.x = x_810;
  }
  const int x_811 = i_2;
  i_2 = 0;
  i_2 = x_811;
  const float2 x_467 = float2(x_191.x, x_191.x);
  const float x_812 = uv.x;
  uv.x = 0.0f;
  uv.x = x_812;
  const float x_238 = uv[0];
  const float3 x_813 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_813;
  const float x_814 = color.x;
  color.x = 0.0f;
  color.x = x_814;
  if ((x_238 > 0.75f)) {
    const float x_815 = color.x;
    color.x = 0.0f;
    color.x = x_815;
    const int x_245 = obj.numbers[3];
    const float x_816 = color.x;
    color.x = 0.0f;
    color.x = x_816;
    const QuicksortObject x_817 = obj;
    const int tint_symbol_66[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_67 = {tint_symbol_66};
    obj = tint_symbol_67;
    obj = x_817;
    const float3 x_468 = float3(x_467.x, x_467.x, x_467.x);
    const float x_818 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_818;
    const float x_819 = uv.x;
    uv.x = 0.0f;
    uv.x = x_819;
    const float x_249 = color.z;
    const float3 x_820 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_820;
    const float3 x_469 = float3(x_467.x, x_191.y, x_467.y);
    const float x_821 = color.z;
    color.z = 0.0f;
    color.z = x_821;
    const int x_822 = obj.numbers[0u];
    obj.numbers[0u] = 0;
    obj.numbers[0u] = x_822;
    const float2 x_470 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
    const float x_823 = color.z;
    color.z = 0.0f;
    color.z = x_823;
    color.z = (x_249 + float(x_245));
    const float2 x_824 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_824;
    const float2 x_471 = float2(x_470.y, x_470.y);
  }
  const float x_825 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_825;
  const float3 x_472 = float3(x_454.x, x_454.y, x_454.y);
  const int x_254 = obj.numbers[4];
  const float x_826 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_826;
  const float3 x_827 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_827;
  const float3 x_473 = float3(x_446.y, x_453.x, x_453.x);
  const int x_828 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_828;
  const float2 x_474 = float2(x_191.x, x_184.z);
  const float x_829 = uv.x;
  uv.x = 0.0f;
  uv.x = x_829;
  const float x_257 = color.y;
  const float x_830 = color.y;
  color.y = 0.0f;
  color.y = x_830;
  const float2 x_475 = float2(x_467.x, x_450.x);
  const float x_831 = uv.x;
  uv.x = 0.0f;
  uv.x = x_831;
  const float x_832 = color.x;
  color.x = 0.0f;
  color.x = x_832;
  const float2 x_476 = float2(x_451.z, x_460.y);
  color.y = (x_257 + float(x_254));
  const float3 x_477 = float3(float2(0.0f, 0.0f).x, x_472.x, float2(0.0f, 0.0f).y);
  const float x_833 = uv.x;
  uv.x = 0.0f;
  uv.x = x_833;
  const float x_834 = color.x;
  color.x = 0.0f;
  color.x = x_834;
  const float2 x_478 = float2(x_472.x, x_472.y);
  const float x_835 = uv.y;
  uv.y = 0.0f;
  uv.y = x_835;
  const float x_261 = uv.y;
  const int x_836 = i_2;
  i_2 = 0;
  i_2 = x_836;
  const float3 x_479 = float3(float2(0.0f, 0.0f).y, x_454.y, float2(0.0f, 0.0f).x);
  const int x_837 = obj.numbers[0u];
  obj.numbers[0u] = 0;
  obj.numbers[0u] = x_837;
  const float x_838 = color.y;
  color.y = 0.0f;
  color.y = x_838;
  const float3 x_480 = float3(x_446.x, x_446.x, float2(0.0f, 0.0f).y);
  const float x_839 = uv.x;
  uv.x = 0.0f;
  uv.x = x_839;
  if ((x_261 > 0.25f)) {
    const float2 x_481 = float2(x_447.x, x_480.z);
    const float3 x_840 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_840;
    const int x_267 = obj.numbers[5u];
    const float x_841 = color.x;
    color.x = 0.0f;
    color.x = x_841;
    const int x_842 = i_2;
    i_2 = 0;
    i_2 = x_842;
    const int x_843 = i_2;
    i_2 = 0;
    i_2 = x_843;
    const float x_270 = color.x;
    const float x_844 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_844;
    const float3 x_482 = float3(x_455.x, x_475.y, x_455.y);
    const QuicksortObject x_845 = obj;
    const int tint_symbol_68[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_69 = {tint_symbol_68};
    obj = tint_symbol_69;
    obj = x_845;
    const float x_846 = uv.y;
    uv.y = 0.0f;
    uv.y = x_846;
    const int x_847 = i_2;
    i_2 = 0;
    i_2 = x_847;
    const float3 x_483 = float3(x_184.w, x_184.w, x_192.x);
    const float x_848 = uv.x;
    uv.x = 0.0f;
    uv.x = x_848;
    color.x = (float(x_267) + x_270);
    const float3 x_484 = float3(x_454.y, x_450.x, x_454.y);
    const float x_849 = uv.x;
    uv.x = 0.0f;
    uv.x = x_849;
  }
  const float x_850 = color.x;
  color.x = 0.0f;
  color.x = x_850;
  const float3 x_485 = float3(x_467.x, x_450.y, x_450.x);
  const float x_851 = uv.y;
  uv.y = 0.0f;
  uv.y = x_851;
  const int x_852 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_852;
  const float x_274 = uv.y;
  const int x_853 = obj.numbers[0u];
  obj.numbers[0u] = 0;
  obj.numbers[0u] = x_853;
  if ((x_274 > 0.5f)) {
    const float x_854 = uv.x;
    uv.x = 0.0f;
    uv.x = x_854;
    const float2 x_486 = float2(x_480.y, x_455.y);
    const float x_855 = color.y;
    color.y = 0.0f;
    color.y = x_855;
    const float2 x_487 = float2(x_449.z, x_449.y);
    const float x_856 = uv.y;
    uv.y = 0.0f;
    uv.y = x_856;
    const int x_280 = obj.numbers[6u];
    const float x_857 = uv.y;
    uv.y = 0.0f;
    uv.y = x_857;
    const int x_858 = i_2;
    i_2 = 0;
    i_2 = x_858;
    const int x_859 = obj.numbers[4];
    obj.numbers[4] = 0;
    obj.numbers[4] = x_859;
    const float2 x_488 = float2(x_473.z, x_473.y);
    const float x_283 = color.y;
    const float2 x_860 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_860;
    const float x_861 = color.x;
    color.x = 0.0f;
    color.x = x_861;
    const float2 x_489 = float2(x_475.y, x_475.x);
    const int x_862 = obj.numbers[6u];
    obj.numbers[6u] = 0;
    obj.numbers[6u] = x_862;
    const int x_863 = obj.numbers[6u];
    obj.numbers[6u] = 0;
    obj.numbers[6u] = x_863;
    const float2 x_490 = float2(x_480.z, x_480.z);
    const QuicksortObject x_864 = obj;
    const int tint_symbol_70[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_71 = {tint_symbol_70};
    obj = tint_symbol_71;
    obj = x_864;
    color.y = (float(x_280) + x_283);
    const float x_865 = color.x;
    color.x = 0.0f;
    color.x = x_865;
    const float2 x_491 = float2(float3(1.0f, 2.0f, 3.0f).y, x_454.x);
    const float x_866 = color.y;
    color.y = 0.0f;
    color.y = x_866;
  }
  const float2 x_492 = float2(x_455.y, x_455.y);
  const float x_867 = color.x;
  color.x = 0.0f;
  color.x = x_867;
  const float x_287 = uv.y;
  const QuicksortObject x_868 = obj;
  const int tint_symbol_72[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_73 = {tint_symbol_72};
  obj = tint_symbol_73;
  obj = x_868;
  const float2 x_493 = float2(x_475.x, x_475.y);
  const float x_869 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_869;
  const float x_870 = color.y;
  color.y = 0.0f;
  color.y = x_870;
  const float3 x_494 = float3(x_191.x, x_191.y, x_191.y);
  const int x_871 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_871;
  if ((x_287 > 0.75f)) {
    const float3 x_872 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_872;
    const float x_873 = color.x;
    color.x = 0.0f;
    color.x = x_873;
    const float3 x_495 = float3(x_192.y, x_192.x, x_192.y);
    const float3 x_874 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_874;
    const int x_293 = obj.numbers[7];
    const float x_875 = uv.x;
    uv.x = 0.0f;
    uv.x = x_875;
    const float3 x_496 = float3(x_475.x, x_467.y, x_467.x);
    const float x_876 = color.y;
    color.y = 0.0f;
    color.y = x_876;
    const float2 x_497 = float2(x_477.x, x_461.y);
    const int x_877 = obj.numbers[0u];
    obj.numbers[0u] = 0;
    obj.numbers[0u] = x_877;
    const float x_878 = color.y;
    color.y = 0.0f;
    color.y = x_878;
    const float3 x_498 = float3(x_478.x, x_478.y, x_478.x);
    const float x_879 = color.x;
    color.x = 0.0f;
    color.x = x_879;
    const float x_296 = color.z;
    const float x_880 = uv.y;
    uv.y = 0.0f;
    uv.y = x_880;
    const float2 x_499 = float2(x_184.x, x_184.y);
    const float x_881 = uv.x;
    uv.x = 0.0f;
    uv.x = x_881;
    const float x_882 = uv.y;
    uv.y = 0.0f;
    uv.y = x_882;
    const float x_883 = uv.y;
    uv.y = 0.0f;
    uv.y = x_883;
    const float3 x_500 = float3(x_499.y, x_499.y, x_494.z);
    const float x_884 = color.z;
    color.z = 0.0f;
    color.z = x_884;
    color.z = (float(x_293) + x_296);
    const float x_885 = color.y;
    color.y = 0.0f;
    color.y = x_885;
    const float2 x_501 = float2(x_453.x, x_453.z);
    const float x_886 = color.x;
    color.x = 0.0f;
    color.x = x_886;
  }
  const int x_887 = i_2;
  i_2 = 0;
  i_2 = x_887;
  const float2 x_502 = float2(x_451.y, x_192.y);
  const float2 x_888 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_888;
  const int x_301 = obj.numbers[8];
  const int x_889 = i_2;
  i_2 = 0;
  i_2 = x_889;
  const float2 x_503 = float2(x_185.x, x_451.z);
  const int x_890 = obj.numbers[8];
  obj.numbers[8] = 0;
  obj.numbers[8] = x_890;
  const float x_891 = color.y;
  color.y = 0.0f;
  color.y = x_891;
  const float2 x_504 = float2(x_453.y, float2(0.0f, 0.0f).x);
  const float x_892 = color.x;
  color.x = 0.0f;
  color.x = x_892;
  const float3 x_505 = float3(x_504.x, x_504.y, x_504.x);
  const float x_893 = color.z;
  color.z = 0.0f;
  color.z = x_893;
  const float x_304 = color.z;
  const float x_894 = color.x;
  color.x = 0.0f;
  color.x = x_894;
  const float2 x_506 = float2(x_493.x, x_492.x);
  const int x_895 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_895;
  const float x_896 = uv.y;
  uv.y = 0.0f;
  uv.y = x_896;
  const float2 x_507 = float2(x_461.x, x_447.x);
  const float x_897 = color.y;
  color.y = 0.0f;
  color.y = x_897;
  color.z = (x_304 + float(x_301));
  const float2 x_898 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_898;
  const float x_899 = uv.x;
  uv.x = 0.0f;
  uv.x = x_899;
  const float3 x_508 = float3(x_461.y, x_461.x, x_506.y);
  const float x_900 = uv.x;
  uv.x = 0.0f;
  uv.x = x_900;
  const float x_308 = uv.x;
  const float x_901 = color.y;
  color.y = 0.0f;
  color.y = x_901;
  const float3 x_509 = float3(x_503.y, x_503.x, x_448.z);
  const float x_902 = uv.y;
  uv.y = 0.0f;
  uv.y = x_902;
  const float x_310 = uv.y;
  const float x_903 = uv.y;
  uv.y = 0.0f;
  uv.y = x_903;
  const float x_904 = color.z;
  color.z = 0.0f;
  color.z = x_904;
  const float3 x_510 = float3(float3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
  const float x_905 = color.z;
  color.z = 0.0f;
  color.z = x_905;
  const int x_906 = i_2;
  i_2 = 0;
  i_2 = x_906;
  const float2 x_511 = float2(x_485.z, x_485.y);
  const float3 x_907 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_907;
  const float x_908 = uv.y;
  uv.y = 0.0f;
  uv.y = x_908;
  const float3 x_512 = float3(x_455.y, x_455.y, x_455.y);
  const int x_909 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_909;
  if ((abs((x_308 - x_310)) < 0.25f)) {
    const float x_910 = uv.x;
    uv.x = 0.0f;
    uv.x = x_910;
    const QuicksortObject x_911 = obj;
    const int tint_symbol_74[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_75 = {tint_symbol_74};
    obj = tint_symbol_75;
    obj = x_911;
    const float3 x_513 = float3(x_505.z, x_505.x, x_448.x);
    const int x_912 = obj.numbers[8];
    obj.numbers[8] = 0;
    obj.numbers[8] = x_912;
    const int x_317 = obj.numbers[9u];
    const float3 x_514 = float3(x_474.y, x_474.y, x_474.y);
    const float x_913 = uv.y;
    uv.y = 0.0f;
    uv.y = x_913;
    const float x_320 = color.x;
    const float x_914 = uv.y;
    uv.y = 0.0f;
    uv.y = x_914;
    const float2 x_515 = float2(x_502.x, x_502.y);
    const float x_915 = color.x;
    color.x = 0.0f;
    color.x = x_915;
    const float3 x_916 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_916;
    const float2 x_516 = float2(x_452.x, x_452.x);
    const float2 x_917 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_917;
    const float x_918 = uv.x;
    uv.x = 0.0f;
    uv.x = x_918;
    const float3 x_517 = float3(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
    color.x = (float(x_317) + x_320);
    const float x_919 = color.x;
    color.x = 0.0f;
    color.x = x_919;
    const float3 x_518 = float3(x_480.y, x_508.x, x_480.x);
    const float x_920 = color.x;
    color.x = 0.0f;
    color.x = x_920;
  }
  const float x_921 = uv.y;
  uv.y = 0.0f;
  uv.y = x_921;
  const float3 x_325 = color;
  const float x_922 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_922;
  const float3 x_519 = float3(x_447.x, x_446.x, x_446.y);
  const float3 x_326 = normalize(x_325);
  const float x_923 = uv.x;
  uv.x = 0.0f;
  uv.x = x_923;
  const QuicksortObject x_924 = obj;
  const int tint_symbol_76[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_77 = {tint_symbol_76};
  obj = tint_symbol_77;
  obj = x_924;
  const QuicksortObject x_925 = obj;
  const int tint_symbol_78[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_79 = {tint_symbol_78};
  obj = tint_symbol_79;
  obj = x_925;
  const float x_926 = color.y;
  color.y = 0.0f;
  color.y = x_926;
  const float2 x_520 = float2(x_506.y, x_519.y);
  const float x_927 = color.y;
  color.y = 0.0f;
  color.y = x_927;
  const float4 x_330 = float4(x_326.x, x_326.y, x_326.z, 1.0f);
  const float x_928 = uv.y;
  uv.y = 0.0f;
  uv.y = x_928;
  const float3 x_521 = float3(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y, x_520.y);
  const float x_929 = uv.x;
  uv.x = 0.0f;
  uv.x = x_929;
  x_GLF_color = x_330;
  const QuicksortObject x_930 = obj;
  const int tint_symbol_80[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_81 = {tint_symbol_80};
  obj = tint_symbol_81;
  obj = x_930;
  const float3 x_522 = float3(x_330.w, x_330.y, x_493.x);
  const float x_931 = color.x;
  color.x = 0.0f;
  color.x = x_931;
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 gl_FragCoord_param : SV_Position;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 : SV_Target0;
};

main_out main_inner(float4 gl_FragCoord_param) {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  const main_out tint_symbol_82 = {x_GLF_color};
  return tint_symbol_82;
}

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}
C:\src\tint\test\Shader@0x000001EB41548320(156,10-21): error X3531: can't unroll loops marked with loop attribute

