static uint3 gl_WorkGroupID = uint3(0u, 0u, 0u);
ByteAddressBuffer x_13 : register(t2, space0);
RWByteAddressBuffer x_15 : register(u3, space0);
ByteAddressBuffer x_17 : register(t0, space0);
ByteAddressBuffer x_19 : register(t1, space0);

void main_1() {
  uint base_index_in = 0u;
  uint base_index_out = 0u;
  int index_in0 = 0;
  int index_in1 = 0;
  int index_out0 = 0;
  int index_out1 = 0;
  int condition_index = 0;
  int i = 0;
  int temp0 = 0;
  int temp1 = 0;
  const uint x_56 = gl_WorkGroupID.x;
  base_index_in = (128u * x_56);
  const uint x_59 = gl_WorkGroupID.x;
  base_index_out = (256u * x_59);
  index_in0 = 0;
  index_in1 = -128;
  index_out0 = 0;
  index_out1 = -128;
  condition_index = 0;
  i = 0;
  {
    for(; (i < 256); i = (i + 1)) {
      const int x_70 = asint(x_13.Load((4u * uint(condition_index))));
      if ((x_70 == 0)) {
        const uint x_75 = base_index_out;
        const int x_76 = index_out0;
        const int x_84 = asint(x_17.Load((4u * (base_index_in + asuint(index_in0)))));
        x_15.Store((4u * (x_75 + asuint(x_76))), asuint(x_84));
        index_out0 = (index_out0 + 1);
        index_in1 = (index_in1 + 1);
      } else {
        const uint x_90 = base_index_out;
        const int x_91 = index_out1;
        const int x_99 = asint(x_19.Load((4u * (base_index_in + asuint(index_in1)))));
        x_15.Store((4u * (x_90 + asuint(x_91))), asuint(x_99));
        index_out1 = (index_out1 + 1);
        index_in1 = (index_in1 + 1);
      }
      const int x_108 = asint(x_13.Load((4u * uint((condition_index + 1)))));
      condition_index = (condition_index + x_108);
      temp0 = index_in0;
      index_in0 = index_in1;
      index_in1 = temp0;
      temp1 = index_out0;
      index_out0 = index_out1;
      index_out1 = temp1;
    }
  }
  return;
}

struct tint_symbol_1 {
  uint3 gl_WorkGroupID_param : SV_GroupID;
};

[numthreads(4, 1, 1)]
void main(tint_symbol_1 tint_symbol) {
  const uint3 gl_WorkGroupID_param = tint_symbol.gl_WorkGroupID_param;
  gl_WorkGroupID = gl_WorkGroupID_param;
  main_1();
  return;
}
