//INDOOR LOCAL LIGHTS
// ---- Created with 3Dmigoto v1.3.6 on Mon Sep 03 18:05:12 2018

cbuffer _Globals : register(b0)
{
  float2 Params : packoffset(c0);
  float4 VPtoRTScaleBias : packoffset(c1);
  float4 shaderProperties : packoffset(c2);
  row_major float3x3 invViewMatrix : packoffset(c3);
}

cbuffer PerFrame : register(b13)
{
  float4x4 global_LightPropertyMatrix : packoffset(c0);
  float4x3 global_FogPropertyMatrix : packoffset(c4);
  float4 global_Data : packoffset(c7);
  float4 global_Data2 : packoffset(c8);
}

cbuffer PerView : register(b12)
{
  row_major float4x4 global_View : packoffset(c0);
  row_major float4x4 global_Projection : packoffset(c4);
  row_major float4x4 global_ViewProjection : packoffset(c8);
  float4 global_ViewPos : packoffset(c12);
  float4 global_ViewInfo : packoffset(c13);
  float4 global_ScaleAndBias : packoffset(c14);
}

SamplerState LinearSampler_s : register(s0);
Texture2D<float4> Exposure : register(t0);
Texture2D<float4> GBuffer0 : register(t1);
Texture2D<float4> GBuffer1 : register(t2);
Texture2D<float4> GBuffer2 : register(t3);
Texture2D<float4> GBuffer3 : register(t4);
Texture2D<float4> GBuffer4 : register(t5);
Texture2D<float4> LinearDepth : register(t6);
Texture2D<float4> IBL_Specular : register(t7);
Texture2D<float4> Base : register(t8);
Texture2D<float4> Shadow : register(t9);
StructuredBuffer<ClusterInfoBuffer> ClusterInfoBuffer : register(t17);
StructuredBuffer<LightIndexListsBuffer> LightIndexListsBuffer : register(t18);
StructuredBuffer<LightDataBuffer> LightDataBuffer : register(t19);


// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
  float4 v0 : SV_Position0,
  float2 v1 : TexCoord0,
  float3 v2 : TexCoord1,
  out float4 o0 : SV_Target0)
{
// Needs manual fix for instruction:
// unknown dcl_: dcl_resource_structured t17, 8 
// Needs manual fix for instruction:
// unknown dcl_: dcl_resource_structured t18, 4 
// Needs manual fix for instruction:
// unknown dcl_: dcl_resource_structured t19, 48 
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xy = (int2)v0.xy;
  r0.zw = float2(0,0);
  r1.xyz = GBuffer0.Load(r0.xyw).xyz;
  r2.xyzw = GBuffer3.Load(r0.xyw).xyzw;
  r3.z = LinearDepth.Load(r0.xyw).x;
  r1.w = 255 * r2.w;
  r1.w = round(r1.w);
  r1.w = (uint)r1.w;
  r2.w = (int)r1.w & 1;
  r3.w = cmp(0 < (uint)r2.w);
  if (2 == 0) r1.w = 0; else if (2+1 < 32) {   r1.w = (uint)r1.w << (32-(2 + 1)); r1.w = (uint)r1.w >> (32-2);  } else r1.w = (uint)r1.w >> 1;
  r3.w = r3.w ? 0 : 1;
  r4.xyz = r3.www * r1.xyz;
  r4.w = cmp(0 != global_Data.y);
  r2.w = (int)r2.w;
  r5.xyz = r2.www * r1.xyz;
  r2.w = r4.w ? 0 : 1;
  r5.xyz = r5.xyz * r2.www;
  r2.w = cmp((int)r1.w == 1);
  r4.w = cmp(r3.z == 1.000000);
  r2.w = (int)r2.w | (int)r4.w;
  if (r2.w != 0) {
    r4.xyz = max(float3(0,0,0), r4.xyz);
    r2.w = Exposure.Load(float4(0,0,0,0)).x;
    r4.w = cmp(r2.w == 0.000000);
    r2.w = r4.w ? 0.00999999978 : r2.w;
    o0.xyz = r4.xyz * r2.www + r5.xyz;
    o0.w = 0;
    return;
  }
  r4.xy = GBuffer1.Load(r0.xyw).xy;
  r6.xyz = GBuffer2.Load(r0.xyw).xyz;
  r4.xy = r4.xy * float2(3.55539989,3.55539989) + float2(-1.77769995,-1.77769995);
  r4.z = 1;
  r2.w = dot(r4.xyz, r4.xyz);
  r2.w = 2 / r2.w;
  r4.xy = r2.ww * r4.xy;
  r4.z = -1 + r2.w;
  r2.x = max(0.0900000036, r2.x);
  r2.y = r2.y * r2.y;
  r2.y = 0.159999996 * r2.y;
  r7.x = dot(invViewMatrix._m00_m01_m02, r4.xyz);
  r7.y = dot(invViewMatrix._m10_m11_m12, r4.xyz);
  r7.z = dot(invViewMatrix._m20_m21_m22, r4.xyz);
  r4.xy = -VPtoRTScaleBias.zw * global_ViewInfo.zw + v0.xy;
  r4.z = global_ViewInfo.w + -r4.y;
  r4.xy = r4.xz / global_ViewInfo.zw;
  r3.xy = r4.xy * float2(2,2) + float2(-1,-1);
  r4.xyz = v2.xyz * r3.xyz;
  r8.xyz = global_View._m10_m11_m12 * r4.yyy;
  r4.xyw = r4.xxx * global_View._m00_m01_m02 + r8.xyz;
  r4.xyz = r4.zzz * global_View._m20_m21_m22 + r4.xyw;
  r4.xyz = global_ViewPos.xyz + r4.xyz;
  r8.xyz = global_ViewPos.xyz + -r4.xyz;
  r2.w = dot(r8.xyz, r8.xyz);
  r2.w = rsqrt(r2.w);
  r9.xyz = r8.xyz * r2.www;
  r3.xy = cmp(float2(0,0) < shaderProperties.xw);
  if (r3.x != 0) {
    r10.x = Base.Sample(LinearSampler_s, v1.xy).x;
    r3.x = dot(r7.xyz, r9.xyz);
    r3.x = r3.x + r10.x;
    r4.w = r2.x * -16 + -1;
    r4.w = exp2(r4.w);
    r3.x = max(9.99999975e-005, abs(r3.x));
    r3.x = log2(r3.x);
    r3.x = r4.w * r3.x;
    r3.x = exp2(r3.x);
    r3.x = r3.x + r10.x;
    r10.y = saturate(-1 + r3.x);
  } else {
    r10.xy = float2(1,1);
  }
  if (r3.y != 0) {
    r11.xyz = Shadow.Load(r0.xyw).xyz;
  } else {
    r11.xyz = float3(1,1,1);
  }
  r12.xyz = IBL_Specular.Load(r0.xyw).xyz;
  r3.x = global_ViewInfo.x * r3.z;
  r3.yz = (uint2)r0.yx >> int2(7,7);
  r3.x = log2(r3.x);
  r3.x = r3.x * global_ScaleAndBias.x + global_ScaleAndBias.y;
  r3.x = max(0, r3.x);
  r3.x = min(31, r3.x);
  r3.x = trunc(r3.x);
  r3.yz = (int2)r3.yz;
  r3.x = r3.x * global_ScaleAndBias.w + r3.y;
  r3.x = r3.x * global_ScaleAndBias.z + r3.z;
  r3.x = (int)r3.x;
  if (r1.w == 0) {
    r1.w = dot(r9.xyz, r7.xyz);
    r3.y = r1.w + r1.w;
    r13.xyz = r7.xyz * -r3.yyy + r9.xyz;
    r1.w = max(9.99999975e-006, r1.w);
    r14.x = global_LightPropertyMatrix._m00;
    r14.y = global_LightPropertyMatrix._m01;
    r14.z = global_LightPropertyMatrix._m02;
    r15.xyz = r8.xyz * r2.www + r14.xyz;
    r3.y = dot(r15.xyz, r15.xyz);
    r3.y = rsqrt(r3.y);
    r15.xyz = r15.xyz * r3.yyy;
    r3.y = saturate(dot(r14.xyz, r15.xyz));
    r3.z = saturate(dot(r7.xyz, r14.xyz));
    r4.w = 1 + -r2.z;
    r15.xyz = r4.www * r6.xyz;
    r5.w = r2.x * -0.337748349 + 1;
    r3.y = r3.y * r3.y;
    r3.y = dot(r3.yy, r2.xx);
    r3.y = r2.x * 0.5 + r3.y;
    r3.y = -1 + r3.y;
    r6.w = 1 + -r3.z;
    r6.w = max(9.99999975e-005, r6.w);
    r7.w = r6.w * r6.w;
    r7.w = r7.w * r7.w;
    r6.w = r7.w * r6.w;
    r6.w = r3.y * r6.w + 1;
    r7.w = 1 + -r1.w;
    r7.w = max(9.99999975e-005, abs(r7.w));
    r8.w = r7.w * r7.w;
    r8.w = r8.w * r8.w;
    r7.w = r8.w * r7.w;
    r3.y = r3.y * r7.w + 1;
    r3.y = r6.w * r3.y;
    r3.y = r3.y * r5.w;
    r3.y = 0.318309873 * r3.y;
    r16.xyz = r15.xyz * r3.yyy;
    r3.y = dot(r14.xyz, r13.xyz);
    r17.xyz = -r3.yyy * r14.xyz + r13.xyz;
    r3.y = cmp(r3.y < 0.99998945);
    r6.w = dot(r17.xyz, r17.xyz);
    r6.w = rsqrt(r6.w);
    r17.xyz = r17.xyz * r6.www;
    r17.xyz = float3(0.00459006429,0.00459006429,0.00459006429) * r17.xyz;
    r14.xyz = r14.xyz * float3(0.99998945,0.99998945,0.99998945) + r17.xyz;
    r6.w = dot(r14.xyz, r14.xyz);
    r6.w = rsqrt(r6.w);
    r14.xyz = r14.xyz * r6.www;
    r13.xyz = r3.yyy ? r14.xyz : r13.xyz;
    r14.xyz = r8.xyz * r2.www + r13.xyz;
    r3.y = dot(r14.xyz, r14.xyz);
    r3.y = rsqrt(r3.y);
    r14.xyz = r14.xyz * r3.yyy;
    r3.y = saturate(dot(r13.xyz, r14.xyz));
    r6.w = saturate(dot(r7.xyz, r14.xyz));
    r8.w = saturate(dot(r7.xyz, r13.xyz));
    r13.xyz = r6.xyz * r2.zzz;
    r13.xyz = r4.www * r2.yyy + r13.xyz;
    r4.w = 1 + r2.x;
    r4.w = 0.5 * r4.w;
    r9.w = r2.x * r2.x;
    r14.xyz = float3(1,1,1) + -r13.xyz;
    r3.y = 1 + -r3.y;
    r3.y = max(9.99999975e-005, r3.y);
    r10.z = r3.y * r3.y;
    r10.z = r10.z * r10.z;
    r3.y = r10.z * r3.y;
    r17.xyz = r14.xyz * r3.yyy + r13.xyz;
    r3.y = r4.w * r4.w;
    r4.w = -r1.w * r3.y + r1.w;
    r4.w = r4.w * r1.w + r3.y;
    r4.w = sqrt(r4.w);
    r10.z = -r8.w * r3.y + r8.w;
    r10.z = r10.z * r8.w + r3.y;
    r10.z = sqrt(r10.z);
    r10.z = r10.z * r1.w;
    r8.w = r8.w * r4.w + r10.z;
    r8.w = rcp(r8.w);
    r8.w = 0.5 * r8.w;
    r9.w = r9.w * r9.w;
    r10.z = r6.w * r9.w + -r6.w;
    r6.w = r10.z * r6.w + 1;
    r6.w = r6.w * r6.w;
    r6.w = 3.14159274 * r6.w;
    r6.w = rcp(r6.w);
    r6.w = r9.w * r6.w;
    r17.xyz = r17.xyz * r8.www;
    r17.xyz = r17.xyz * r6.www;
    r18.x = global_LightPropertyMatrix._m20;
    r18.y = global_LightPropertyMatrix._m21;
    r18.z = global_LightPropertyMatrix._m22;
    r16.xyz = r18.xyz * r16.xyz;
    r16.xyz = r16.xyz * r3.zzz;
    r17.xyz = r18.xyz * r17.xyz;
    r17.xyz = r17.xyz * r3.zzz;
    r16.xyz = r16.xyz * r11.xyz;
    r17.xyz = r17.xyz * r11.xyz;
  // Known bad code for instruction (needs manual fix):
    ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r10.zw, r3.x, l(0), t17.xxxy
  r10.z = LinearSampler[]..swiz;
  r10.w = LinearSampler[]..swiz;
    r3.z = (int)r10.w & 0x0000ffff;
    r6.w = (uint)r10.w >> 16;
    r18.xyz = r16.xyz;
    r19.xyz = r17.xyz;
    r8.w = r10.z;
    r10.w = 0;
    while (true) {
      r11.w = cmp((uint)r10.w >= (uint)r3.z);
      if (r11.w != 0) break;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r11.w, r8.w, l(0), t18.xxxx
    r11.w = LinearSampler[]..swiz;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r11.w, l(0), t19.xyzw
    r20.x = LinearSampler[]..swiz;
    r20.y = LinearSampler[]..swiz;
    r20.z = LinearSampler[]..swiz;
    r20.w = LinearSampler[]..swiz;
      r20.xyz = r20.xyz + -r4.xyz;
      r12.w = dot(r20.xyz, r20.xyz);
      r13.w = r20.w * r20.w;
      r14.w = rcp(r13.w);
      r14.w = cmp(r12.w < r14.w);
      if (r14.w != 0) {
        r14.w = max(1.00000001e-010, r12.w);
        r14.w = rsqrt(r14.w);
        r20.xyz = r20.xyz * r14.www;
        r14.w = saturate(dot(r7.xyz, r20.xyz));
        r15.w = cmp(0 < r14.w);
        if (r15.w != 0) {
        // Known bad code for instruction (needs manual fix):
                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r21.xyz, r11.w, l(16), t19.xyzx
        r21.x = LinearSampler[]..swiz;
        r21.y = LinearSampler[]..swiz;
        r21.z = LinearSampler[]..swiz;
          r22.xyz = r8.xyz * r2.www + r20.xyz;
          r11.w = dot(r22.xyz, r22.xyz);
          r11.w = max(1.00000001e-010, r11.w);
          r11.w = rsqrt(r11.w);
          r22.xyz = r22.xyz * r11.www;
          r11.w = saturate(dot(r20.xyz, r22.xyz));
          r15.w = saturate(dot(r7.xyz, r22.xyz));
          r13.w = r13.w * r12.w;
          r13.w = -r13.w * r13.w + 1;
          r13.w = max(0, r13.w);
          r13.w = r13.w * r13.w;
          r12.w = max(9.99999975e-005, r12.w);
          r12.w = rcp(r12.w);
          r12.w = r13.w * r12.w;
          r12.w = r14.w * r12.w;
          r12.w = 0.0795774683 * r12.w;
          r20.xyz = r21.xyz * r12.www;
          r12.w = r11.w * r11.w;
          r12.w = dot(r12.ww, r2.xx);
          r12.w = r2.x * 0.5 + r12.w;
          r12.w = -1 + r12.w;
          r13.w = 1 + -r14.w;
          r13.w = max(9.99999975e-005, r13.w);
          r16.w = r13.w * r13.w;
          r16.w = r16.w * r16.w;
          r13.w = r16.w * r13.w;
          r13.w = r12.w * r13.w + 1;
          r12.w = r12.w * r7.w + 1;
          r12.w = r13.w * r12.w;
          r12.w = r12.w * r5.w;
          r12.w = 0.318309873 * r12.w;
          r21.xyz = r15.xyz * r12.www;
          r18.xyz = r20.xyz * r21.xyz + r18.xyz;
          r11.w = 1 + -r11.w;
          r11.w = max(9.99999975e-005, r11.w);
          r12.w = r11.w * r11.w;
          r12.w = r12.w * r12.w;
          r11.w = r12.w * r11.w;
          r21.xyz = r14.xyz * r11.www + r13.xyz;
          r11.w = -r14.w * r3.y + r14.w;
          r11.w = r11.w * r14.w + r3.y;
          r11.w = sqrt(r11.w);
          r11.w = r11.w * r1.w;
          r11.w = r14.w * r4.w + r11.w;
          r11.w = rcp(r11.w);
          r11.w = 0.5 * r11.w;
          r12.w = r15.w * r9.w + -r15.w;
          r12.w = r12.w * r15.w + 1;
          r12.w = r12.w * r12.w;
          r12.w = 3.14159274 * r12.w;
          r12.w = rcp(r12.w);
          r12.w = r12.w * r9.w;
          r21.xyz = r21.xyz * r11.www;
          r21.xyz = r21.xyz * r12.www;
          r19.xyz = r20.xyz * r21.xyz + r19.xyz;
        }
      }
      r8.w = (int)r8.w + 1;
      r10.w = (int)r10.w + 1;
    }
    r16.xyz = r18.xyz;
    r17.xyz = r19.xyz;
    r3.z = r8.w;
    r10.z = 0;
    while (true) {
      r10.w = cmp((uint)r10.z >= (uint)r6.w);
      if (r10.w != 0) break;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r10.w, r3.z, l(0), t18.xxxx
    r10.w = LinearSampler[]..swiz;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r10.w, l(0), t19.xyzw
    r20.x = LinearSampler[]..swiz;
    r20.y = LinearSampler[]..swiz;
    r20.z = LinearSampler[]..swiz;
    r20.w = LinearSampler[]..swiz;
      r20.xyz = r20.xyz + -r4.xyz;
      r11.w = dot(r20.xyz, r20.xyz);
      r12.w = r20.w * r20.w;
      r13.w = rcp(r12.w);
      r13.w = cmp(r11.w < r13.w);
      if (r13.w != 0) {
        r13.w = max(1.00000001e-010, r11.w);
        r13.w = rsqrt(r13.w);
        r20.xyz = r20.xyz * r13.www;
        r13.w = saturate(dot(r7.xyz, r20.xyz));
        r14.w = cmp(0 < r13.w);
        if (r14.w != 0) {
        // Known bad code for instruction (needs manual fix):
                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r21.xyzw, r10.w, l(16), t19.xyzw
        r21.x = LinearSampler[]..swiz;
        r21.y = LinearSampler[]..swiz;
        r21.z = LinearSampler[]..swiz;
        r21.w = LinearSampler[]..swiz;
        // Known bad code for instruction (needs manual fix):
                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r22.xyzw, r10.w, l(32), t19.xyzw
        r22.x = LinearSampler[]..swiz;
        r22.y = LinearSampler[]..swiz;
        r22.z = LinearSampler[]..swiz;
        r22.w = LinearSampler[]..swiz;
          r23.xyz = r8.xyz * r2.www + r20.xyz;
          r10.w = dot(r23.xyz, r23.xyz);
          r10.w = max(1.00000001e-010, r10.w);
          r10.w = rsqrt(r10.w);
          r23.xyz = r23.xyz * r10.www;
          r10.w = saturate(dot(r20.xyz, r23.xyz));
          r14.w = saturate(dot(r7.xyz, r23.xyz));
          r15.w = dot(r22.xyz, r22.xyz);
          r15.w = rsqrt(r15.w);
          r22.xyz = r22.xyz * r15.www;
          r15.w = dot(-r20.xyz, r22.xyz);
          r16.w = cmp(r21.w < r15.w);
          r12.w = r12.w * r11.w;
          r12.w = -r12.w * r12.w + 1;
          r12.w = max(0, r12.w);
          r12.w = r12.w * r12.w;
          r11.w = max(9.99999975e-005, r11.w);
          r11.w = rcp(r11.w);
          r11.w = r12.w * r11.w;
          r12.w = r15.w + -r21.w;
          r15.w = r22.w + -r21.w;
          r15.w = max(9.99999997e-007, r15.w);
          r12.w = saturate(r12.w / r15.w);
          r12.w = r12.w * r12.w;
          r11.w = r12.w * r11.w;
          r11.w = r13.w * r11.w;
          r11.w = r16.w ? r11.w : 0;
          r11.w = 0.318309873 * r11.w;
          r20.xyz = r21.xyz * r11.www;
          r11.w = r10.w * r10.w;
          r11.w = dot(r11.ww, r2.xx);
          r11.w = r2.x * 0.5 + r11.w;
          r11.w = -1 + r11.w;
          r12.w = 1 + -r13.w;
          r12.w = max(9.99999975e-005, r12.w);
          r15.w = r12.w * r12.w;
          r15.w = r15.w * r15.w;
          r12.w = r15.w * r12.w;
          r12.w = r11.w * r12.w + 1;
          r11.w = r11.w * r7.w + 1;
          r11.w = r12.w * r11.w;
          r11.w = r11.w * r5.w;
          r11.w = 0.318309873 * r11.w;
          r21.xyz = r15.xyz * r11.www;
          r16.xyz = r20.xyz * r21.xyz + r16.xyz;
          r10.w = 1 + -r10.w;
          r10.w = max(9.99999975e-005, r10.w);
          r11.w = r10.w * r10.w;
          r11.w = r11.w * r11.w;
          r10.w = r11.w * r10.w;
          r21.xyz = r14.xyz * r10.www + r13.xyz;
          r10.w = -r13.w * r3.y + r13.w;
          r10.w = r10.w * r13.w + r3.y;
          r10.w = sqrt(r10.w);
          r10.w = r10.w * r1.w;
          r10.w = r13.w * r4.w + r10.w;
          r10.w = rcp(r10.w);
          r10.w = 0.5 * r10.w;
          r11.w = r14.w * r9.w + -r14.w;
          r11.w = r11.w * r14.w + 1;
          r11.w = r11.w * r11.w;
          r11.w = 3.14159274 * r11.w;
          r11.w = rcp(r11.w);
          r11.w = r11.w * r9.w;
          r21.xyz = r21.xyz * r10.www;
          r21.xyz = r21.xyz * r11.www;
          r17.xyz = r20.xyz * r21.xyz + r17.xyz;
        }
      }
      r3.z = (int)r3.z + 1;
      r10.z = (int)r10.z + 1;
    }
  } else {
    r0.xyzw = GBuffer4.Load(r0.xyz).xyzw;
    r0.yz = float2(255,15.9375) * r0.zy;
    r1.w = floor(r0.z);
    r13.x = r0.x * 4080 + r1.w;
    r0.x = frac(r0.z);
    r13.y = r0.x * 4096 + r0.y;
    r0.xy = r13.xy * float2(0.000488519785,0.000488519785) + float2(-1,-1);
    r0.xy = max(float2(-1,-1), r0.xy);
    r0.xy = min(float2(1,1), r0.xy);
    r13.xyz = float3(1,1,1) + -abs(r0.xyx);
    r14.z = r13.x + -abs(r0.y);
    r0.z = cmp(r14.z >= 0);
    r3.yz = cmp(r0.xy >= float2(0,0));
    r3.yz = r3.yz ? float2(1,1) : float2(-1,-1);
    r3.yz = r13.yz * r3.yz;
    r14.xy = r0.zz ? r0.xy : r3.yz;
    r0.x = dot(r14.xyz, r14.xyz);
    r0.x = rsqrt(r0.x);
    r0.xyz = r14.xyz * r0.xxx;
    r13.x = dot(invViewMatrix._m00_m01_m02, r0.xyz);
    r13.y = dot(invViewMatrix._m10_m11_m12, r0.xyz);
    r13.z = dot(invViewMatrix._m20_m21_m22, r0.xyz);
    r0.x = dot(r9.xyz, r7.xyz);
    r0.y = r0.x + r0.x;
    r9.xyz = r7.xyz * -r0.yyy + r9.xyz;
    r0.x = max(9.99999975e-006, r0.x);
    r14.x = global_LightPropertyMatrix._m00;
    r14.y = global_LightPropertyMatrix._m01;
    r14.z = global_LightPropertyMatrix._m02;
    r15.xyz = r8.xyz * r2.www + r14.xyz;
    r0.y = dot(r15.xyz, r15.xyz);
    r0.y = rsqrt(r0.y);
    r15.xyz = r15.xyz * r0.yyy;
    r0.y = saturate(dot(r14.xyz, r15.xyz));
    r0.z = saturate(dot(r7.xyz, r14.xyz));
    r1.w = 1 + -r2.z;
    r15.xyz = r1.www * r6.xyz;
    r3.y = r2.x * -0.337748349 + 1;
    r0.y = r0.y * r0.y;
    r0.y = dot(r0.yy, r2.xx);
    r0.y = r2.x * 0.5 + r0.y;
    r0.y = -1 + r0.y;
    r3.z = 1 + -r0.z;
    r3.z = max(9.99999975e-005, r3.z);
    r4.w = r3.z * r3.z;
    r4.w = r4.w * r4.w;
    r3.z = r4.w * r3.z;
    r3.z = r0.y * r3.z + 1;
    r4.w = 1 + -r0.x;
    r4.w = max(9.99999975e-005, abs(r4.w));
    r5.w = r4.w * r4.w;
    r5.w = r5.w * r5.w;
    r4.w = r5.w * r4.w;
    r0.y = r0.y * r4.w + 1;
    r0.y = r3.z * r0.y;
    r0.y = r0.y * r3.y;
    r0.y = 0.318309873 * r0.y;
    r18.xyz = r15.xyz * r0.yyy;
    r0.y = dot(r14.xyz, r9.xyz);
    r19.xyz = -r0.yyy * r14.xyz + r9.xyz;
    r0.y = cmp(r0.y < 0.99998945);
    r3.z = dot(r19.xyz, r19.xyz);
    r3.z = rsqrt(r3.z);
    r19.xyz = r19.xyz * r3.zzz;
    r19.xyz = float3(0.00459006429,0.00459006429,0.00459006429) * r19.xyz;
    r14.xyz = r14.xyz * float3(0.99998945,0.99998945,0.99998945) + r19.xyz;
    r3.z = dot(r14.xyz, r14.xyz);
    r3.z = rsqrt(r3.z);
    r14.xyz = r14.xyz * r3.zzz;
    r9.xyz = r0.yyy ? r14.xyz : r9.xyz;
    r14.xyz = r8.xyz * r2.www + r9.xyz;
    r0.y = dot(r14.xyz, r14.xyz);
    r0.y = rsqrt(r0.y);
    r14.xyz = r14.xyz * r0.yyy;
    r0.y = saturate(dot(r9.xyz, r14.xyz));
    r3.z = saturate(dot(r7.xyz, r14.xyz));
    r5.w = saturate(dot(r7.xyz, r9.xyz));
    r6.w = dot(r14.xyz, r13.xyz);
    r6.xyz = r6.xyz * r2.zzz;
    r6.xyz = r1.www * r2.yyy + r6.xyz;
    r1.w = 1 + r2.x;
    r1.w = 0.5 * r1.w;
    r2.y = r2.x * r2.x;
    r9.xyz = float3(1,1,1) + -r6.xyz;
    r0.y = 1 + -r0.y;
    r0.y = max(9.99999975e-005, r0.y);
    r2.z = r0.y * r0.y;
    r2.z = r2.z * r2.z;
    r0.y = r2.z * r0.y;
    r14.xyz = r9.xyz * r0.yyy + r6.xyz;
    r0.y = r1.w * r1.w;
    r1.w = -r0.x * r0.y + r0.x;
    r1.w = r1.w * r0.x + r0.y;
    r1.w = sqrt(r1.w);
    r2.z = -r5.w * r0.y + r5.w;
    r2.z = r2.z * r5.w + r0.y;
    r2.z = sqrt(r2.z);
    r2.z = r2.z * r0.x;
    r2.z = r5.w * r1.w + r2.z;
    r2.z = rcp(r2.z);
    r2.z = 0.5 * r2.z;
    r0.w = -r0.w * 0.899999976 + 1;
    r0.w = sqrt(r0.w);
    r5.w = r2.y / r0.w;
    r5.w = min(1, r5.w);
    r5.w = max(0.00100000005, r5.w);
    r0.w = r2.y * r0.w;
    r0.w = max(0.00100000005, r0.w);
    r2.y = r6.w * r6.w;
    r6.w = -r6.w * r6.w + 1;
    r6.w = -r3.z * r3.z + r6.w;
    r7.w = r5.w * r5.w;
    r2.y = r2.y / r7.w;
    r8.w = r0.w * r0.w;
    r6.w = r6.w / r8.w;
    r2.y = r6.w + r2.y;
    r2.y = r3.z * r3.z + r2.y;
    r0.w = r5.w * r0.w;
    r0.w = 3.14159274 * r0.w;
    r2.y = r2.y * r2.y;
    r2.y = r2.y * r0.w;
    r2.y = rcp(r2.y);
    r14.xyz = r14.xyz * r2.zzz;
    r14.xyz = r14.xyz * r2.yyy;
    r19.x = global_LightPropertyMatrix._m20;
    r19.y = global_LightPropertyMatrix._m21;
    r19.z = global_LightPropertyMatrix._m22;
    r18.xyz = r19.xyz * r18.xyz;
    r18.xyz = r18.xyz * r0.zzz;
    r14.xyz = r19.xyz * r14.xyz;
    r14.xyz = r14.xyz * r0.zzz;
    r18.xyz = r18.xyz * r11.xyz;
    r11.xyz = r14.xyz * r11.xyz;
  // Known bad code for instruction (needs manual fix):
    ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r2.yz, r3.x, l(0), t17.xxyx
  r2.y = LinearSampler[]..swiz;
  r2.z = LinearSampler[]..swiz;
    r0.z = (int)r2.z & 0x0000ffff;
    r2.z = (uint)r2.z >> 16;
    r14.xyz = r18.xyz;
    r19.xyz = r11.xyz;
    r3.x = r2.y;
    r3.z = 0;
    while (true) {
      r5.w = cmp((uint)r3.z >= (uint)r0.z);
      if (r5.w != 0) break;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r5.w, r3.x, l(0), t18.xxxx
    r5.w = LinearSampler[]..swiz;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r5.w, l(0), t19.xyzw
    r20.x = LinearSampler[]..swiz;
    r20.y = LinearSampler[]..swiz;
    r20.z = LinearSampler[]..swiz;
    r20.w = LinearSampler[]..swiz;
      r20.xyz = r20.xyz + -r4.xyz;
      r6.w = dot(r20.xyz, r20.xyz);
      r9.w = r20.w * r20.w;
      r10.z = rcp(r9.w);
      r10.z = cmp(r6.w < r10.z);
      if (r10.z != 0) {
        r10.z = max(1.00000001e-010, r6.w);
        r10.z = rsqrt(r10.z);
        r20.xyz = r20.xyz * r10.zzz;
        r10.z = saturate(dot(r7.xyz, r20.xyz));
        r10.w = cmp(0 < r10.z);
        if (r10.w != 0) {
        // Known bad code for instruction (needs manual fix):
                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r21.xyz, r5.w, l(16), t19.xyzx
        r21.x = LinearSampler[]..swiz;
        r21.y = LinearSampler[]..swiz;
        r21.z = LinearSampler[]..swiz;
          r22.xyz = r8.xyz * r2.www + r20.xyz;
          r5.w = dot(r22.xyz, r22.xyz);
          r5.w = max(1.00000001e-010, r5.w);
          r5.w = rsqrt(r5.w);
          r22.xyz = r22.xyz * r5.www;
          r5.w = saturate(dot(r20.xyz, r22.xyz));
          r10.w = saturate(dot(r7.xyz, r22.xyz));
          r9.w = r9.w * r6.w;
          r9.w = -r9.w * r9.w + 1;
          r9.w = max(0, r9.w);
          r9.w = r9.w * r9.w;
          r6.w = max(9.99999975e-005, r6.w);
          r6.w = rcp(r6.w);
          r6.w = r9.w * r6.w;
          r6.w = r10.z * r6.w;
          r6.w = 0.0795774683 * r6.w;
          r9.w = dot(r22.xyz, r13.xyz);
          r20.xyz = r21.xyz * r6.www;
          r6.w = r5.w * r5.w;
          r6.w = dot(r6.ww, r2.xx);
          r6.w = r2.x * 0.5 + r6.w;
          r6.w = -1 + r6.w;
          r11.w = 1 + -r10.z;
          r11.w = max(9.99999975e-005, r11.w);
          r12.w = r11.w * r11.w;
          r12.w = r12.w * r12.w;
          r11.w = r12.w * r11.w;
          r11.w = r6.w * r11.w + 1;
          r6.w = r6.w * r4.w + 1;
          r6.w = r11.w * r6.w;
          r6.w = r6.w * r3.y;
          r6.w = 0.318309873 * r6.w;
          r21.xyz = r15.xyz * r6.www;
          r14.xyz = r20.xyz * r21.xyz + r14.xyz;
          r5.w = 1 + -r5.w;
          r5.w = max(9.99999975e-005, r5.w);
          r6.w = r5.w * r5.w;
          r6.w = r6.w * r6.w;
          r5.w = r6.w * r5.w;
          r21.xyz = r9.xyz * r5.www + r6.xyz;
          r5.w = -r10.z * r0.y + r10.z;
          r5.w = r5.w * r10.z + r0.y;
          r5.w = sqrt(r5.w);
          r5.w = r5.w * r0.x;
          r5.w = r10.z * r1.w + r5.w;
          r5.w = rcp(r5.w);
          r5.w = 0.5 * r5.w;
          r6.w = r9.w * r9.w;
          r9.w = -r9.w * r9.w + 1;
          r9.w = -r10.w * r10.w + r9.w;
          r6.w = r6.w / r7.w;
          r9.w = r9.w / r8.w;
          r6.w = r9.w + r6.w;
          r6.w = r10.w * r10.w + r6.w;
          r6.w = r6.w * r6.w;
          r6.w = r6.w * r0.w;
          r6.w = rcp(r6.w);
          r21.xyz = r21.xyz * r5.www;
          r21.xyz = r21.xyz * r6.www;
          r19.xyz = r20.xyz * r21.xyz + r19.xyz;
        }
      }
      r3.xz = (int2)r3.xz + int2(1,1);
    }
    r16.xyz = r14.xyz;
    r17.xyz = r19.xyz;
    r0.z = r3.x;
    r2.y = 0;
    while (true) {
      r3.z = cmp((uint)r2.y >= (uint)r2.z);
      if (r3.z != 0) break;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r3.z, r0.z, l(0), t18.xxxx
    r3.z = LinearSampler[]..swiz;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r11.xyzw, r3.z, l(0), t19.xyzw
    r11.x = LinearSampler[]..swiz;
    r11.y = LinearSampler[]..swiz;
    r11.z = LinearSampler[]..swiz;
    r11.w = LinearSampler[]..swiz;
      r11.xyz = r11.xyz + -r4.xyz;
      r5.w = dot(r11.xyz, r11.xyz);
      r6.w = r11.w * r11.w;
      r9.w = rcp(r6.w);
      r9.w = cmp(r5.w < r9.w);
      if (r9.w != 0) {
        r9.w = max(1.00000001e-010, r5.w);
        r9.w = rsqrt(r9.w);
        r11.xyz = r11.xyz * r9.www;
        r9.w = saturate(dot(r7.xyz, r11.xyz));
        r10.z = cmp(0 < r9.w);
        if (r10.z != 0) {
        // Known bad code for instruction (needs manual fix):
                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r18.xyzw, r3.z, l(16), t19.xyzw
        r18.x = LinearSampler[]..swiz;
        r18.y = LinearSampler[]..swiz;
        r18.z = LinearSampler[]..swiz;
        r18.w = LinearSampler[]..swiz;
        // Known bad code for instruction (needs manual fix):
                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r3.z, l(32), t19.xyzw
        r20.x = LinearSampler[]..swiz;
        r20.y = LinearSampler[]..swiz;
        r20.z = LinearSampler[]..swiz;
        r20.w = LinearSampler[]..swiz;
          r21.xyz = r8.xyz * r2.www + r11.xyz;
          r3.z = dot(r21.xyz, r21.xyz);
          r3.z = max(1.00000001e-010, r3.z);
          r3.z = rsqrt(r3.z);
          r21.xyz = r21.xyz * r3.zzz;
          r3.z = saturate(dot(r11.xyz, r21.xyz));
          r10.z = saturate(dot(r7.xyz, r21.xyz));
          r10.w = dot(r20.xyz, r20.xyz);
          r10.w = rsqrt(r10.w);
          r20.xyz = r20.xyz * r10.www;
          r10.w = dot(-r11.xyz, r20.xyz);
          r11.x = cmp(r18.w < r10.w);
          r6.w = r6.w * r5.w;
          r6.w = -r6.w * r6.w + 1;
          r6.w = max(0, r6.w);
          r6.w = r6.w * r6.w;
          r5.w = max(9.99999975e-005, r5.w);
          r5.w = rcp(r5.w);
          r5.w = r6.w * r5.w;
          r6.w = r10.w + -r18.w;
          r10.w = r20.w + -r18.w;
          r10.w = max(9.99999997e-007, r10.w);
          r6.w = saturate(r6.w / r10.w);
          r6.w = r6.w * r6.w;
          r5.w = r6.w * r5.w;
          r5.w = r9.w * r5.w;
          r5.w = r11.x ? r5.w : 0;
          r5.w = 0.318309873 * r5.w;
          r6.w = dot(r21.xyz, r13.xyz);
          r11.xyz = r18.xyz * r5.www;
          r5.w = r3.z * r3.z;
          r5.w = dot(r5.ww, r2.xx);
          r5.w = r2.x * 0.5 + r5.w;
          r5.w = -1 + r5.w;
          r10.w = 1 + -r9.w;
          r10.w = max(9.99999975e-005, r10.w);
          r11.w = r10.w * r10.w;
          r11.w = r11.w * r11.w;
          r10.w = r11.w * r10.w;
          r10.w = r5.w * r10.w + 1;
          r5.w = r5.w * r4.w + 1;
          r5.w = r10.w * r5.w;
          r5.w = r5.w * r3.y;
          r5.w = 0.318309873 * r5.w;
          r18.xyz = r15.xyz * r5.www;
          r16.xyz = r11.xyz * r18.xyz + r16.xyz;
          r3.z = 1 + -r3.z;
          r3.z = max(9.99999975e-005, r3.z);
          r5.w = r3.z * r3.z;
          r5.w = r5.w * r5.w;
          r3.z = r5.w * r3.z;
          r18.xyz = r9.xyz * r3.zzz + r6.xyz;
          r3.z = -r9.w * r0.y + r9.w;
          r3.z = r3.z * r9.w + r0.y;
          r3.z = sqrt(r3.z);
          r3.z = r3.z * r0.x;
          r3.z = r9.w * r1.w + r3.z;
          r3.z = rcp(r3.z);
          r3.z = 0.5 * r3.z;
          r5.w = r6.w * r6.w;
          r6.w = -r6.w * r6.w + 1;
          r6.w = -r10.z * r10.z + r6.w;
          r5.w = r5.w / r7.w;
          r6.w = r6.w / r8.w;
          r5.w = r6.w + r5.w;
          r5.w = r10.z * r10.z + r5.w;
          r5.w = r5.w * r5.w;
          r5.w = r5.w * r0.w;
          r5.w = rcp(r5.w);
          r18.xyz = r18.xyz * r3.zzz;
          r18.xyz = r18.xyz * r5.www;
          r17.xyz = r11.xyz * r18.xyz + r17.xyz;
        }
      }
      r0.z = (int)r0.z + 1;
      r2.y = (int)r2.y + 1;
    }
  }
  r0.xy = float2(-1,-1) + r10.xy;
  r0.xy = shaderProperties.yy * r0.xy + float2(1,1);
  r0.yzw = r17.xyz * r0.yyy;
  r0.xyz = r16.xyz * r0.xxx + r0.yzw;
  r0.xyz = r3.www * r1.xyz + r0.xyz;
  r0.xyz = max(float3(0,0,0), r0.xyz);
  r0.w = Exposure.Load(float4(0,0,0,0)).x;
  r1.x = cmp(r0.w == 0.000000);
  r0.w = r1.x ? 0.00999999978 : r0.w;
  r0.xyz = r0.xyz * r0.www + r5.xyz;
  o0.xyz = r12.xyz * r10.yyy + r0.xyz;
  o0.w = 1;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Original ASM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
//
//
// Buffer Definitions: 
//
// cbuffer $Globals
// {
//
//   float2 Params;                     // Offset:    0 Size:     8 [unused]
//   float4 VPtoRTScaleBias;            // Offset:   16 Size:    16
//   float4 shaderProperties;           // Offset:   32 Size:    16
//   row_major float3x3 invViewMatrix;  // Offset:   48 Size:    44
//
// }
//
// cbuffer PerFrame
// {
//
//   float4x4 global_LightPropertyMatrix;// Offset:    0 Size:    64
//   float4x3 global_FogPropertyMatrix; // Offset:   64 Size:    48 [unused]
//   float4 global_Data;                // Offset:  112 Size:    16
//   float4 global_Data2;               // Offset:  128 Size:    16 [unused]
//
// }
//
// cbuffer PerView
// {
//
//   row_major float4x4 global_View;    // Offset:    0 Size:    64
//   row_major float4x4 global_Projection;// Offset:   64 Size:    64 [unused]
//   row_major float4x4 global_ViewProjection;// Offset:  128 Size:    64 [unused]
//   float4 global_ViewPos;             // Offset:  192 Size:    16
//   float4 global_ViewInfo;            // Offset:  208 Size:    16
//   float4 global_ScaleAndBias;        // Offset:  224 Size:    16
//
// }
//
// Resource bind info for ClusterInfoBuffer
// {
//
//   int2 $Element;                     // Offset:    0 Size:     8
//
// }
//
// Resource bind info for LightIndexListsBuffer
// {
//
//   int $Element;                      // Offset:    0 Size:     4
//
// }
//
// Resource bind info for LightDataBuffer
// {
//
//   struct PackedLight
//   {
//       
//       float4 PositionRadius;         // Offset:    0
//       float4 ColorOuterAngle;        // Offset:   16
//       float4 DirectionInnerAngle;    // Offset:   32
//
//   } $Element;                        // Offset:    0 Size:    48
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// LinearSampler                     sampler      NA          NA    0        1
// Exposure                          texture  float4          2d    0        1
// GBuffer0                          texture  float4          2d    1        1
// GBuffer1                          texture  float4          2d    2        1
// GBuffer2                          texture  float4          2d    3        1
// GBuffer3                          texture  float4          2d    4        1
// GBuffer4                          texture  float4          2d    5        1
// LinearDepth                       texture  float4          2d    6        1
// IBL_Specular                      texture  float4          2d    7        1
// Base                              texture  float4          2d    8        1
// Shadow                            texture  float4          2d    9        1
// ClusterInfoBuffer                 texture  struct         r/o   17        1
// LightIndexListsBuffer             texture  struct         r/o   18        1
// LightDataBuffer                   texture  struct         r/o   19        1
// $Globals                          cbuffer      NA          NA    0        1
// PerView                           cbuffer      NA          NA   12        1
// PerFrame                          cbuffer      NA          NA   13        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float   xy  
// TexCoord                 0   xy          1     NONE   float   xy  
// TexCoord                 1   xyz         2     NONE   float   xyz 
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[6], immediateIndexed
dcl_constantbuffer cb13[8], immediateIndexed
dcl_constantbuffer cb12[15], immediateIndexed
dcl_sampler s0, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texture2d (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_resource_texture2d (float,float,float,float) t5
dcl_resource_texture2d (float,float,float,float) t6
dcl_resource_texture2d (float,float,float,float) t7
dcl_resource_texture2d (float,float,float,float) t8
dcl_resource_texture2d (float,float,float,float) t9
dcl_resource_structured t17, 8 
dcl_resource_structured t18, 4 
dcl_resource_structured t19, 48 
dcl_input_ps_siv linear noperspective v0.xy, position
dcl_input_ps linear v1.xy
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 24
ftoi r0.xy, v0.xyxx
mov r0.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r1.xyz, r0.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r0.xyww, t4.xyzw
ld_indexable(texture2d)(float,float,float,float) r3.z, r0.xyww, t6.yzxw
mul r1.w, r2.w, l(255.000000)
round_ne r1.w, r1.w
ftou r1.w, r1.w
and r2.w, r1.w, l(1)
ult r3.w, l(0), r2.w
ubfe r1.w, l(2), l(1), r1.w
movc r3.w, r3.w, l(0), l(1.000000)
mul r4.xyz, r1.xyzx, r3.wwww
ne r4.w, l(0.000000, 0.000000, 0.000000, 0.000000), cb13[7].y
itof r2.w, r2.w
mul r5.xyz, r1.xyzx, r2.wwww
movc r2.w, r4.w, l(0), l(1.000000)
mul r5.xyz, r2.wwww, r5.xyzx
ieq r2.w, r1.w, l(1)
eq r4.w, r3.z, l(1.000000)
or r2.w, r2.w, r4.w
if_nz r2.w
  max r4.xyz, r4.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
  ld_indexable(texture2d)(float,float,float,float) r2.w, l(0, 0, 0, 0), t0.yzwx
  eq r4.w, r2.w, l(0.000000)
  movc r2.w, r4.w, l(0.010000), r2.w
  mad o0.xyz, r4.xyzx, r2.wwww, r5.xyzx
  mov o0.w, l(0)
  ret 
endif 
ld_indexable(texture2d)(float,float,float,float) r4.xy, r0.xyww, t2.xyzw
ld_indexable(texture2d)(float,float,float,float) r6.xyz, r0.xyww, t3.xyzw
mad r4.xy, r4.xyxx, l(3.555400, 3.555400, 0.000000, 0.000000), l(-1.777700, -1.777700, 0.000000, 0.000000)
mov r4.z, l(1.000000)
dp3 r2.w, r4.xyzx, r4.xyzx
div r2.w, l(2.000000), r2.w
mul r4.xy, r4.xyxx, r2.wwww
add r4.z, r2.w, l(-1.000000)
max r2.x, r2.x, l(0.090000)
mul r2.y, r2.y, r2.y
mul r2.y, r2.y, l(0.160000)
dp3 r7.x, cb0[3].xyzx, r4.xyzx
dp3 r7.y, cb0[4].xyzx, r4.xyzx
dp3 r7.z, cb0[5].xyzx, r4.xyzx
mad r4.xy, -cb0[1].zwzz, cb12[13].zwzz, v0.xyxx
add r4.z, -r4.y, cb12[13].w
div r4.xy, r4.xzxx, cb12[13].zwzz
mad r3.xy, r4.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000)
mul r4.xyz, r3.xyzx, v2.xyzx
mul r8.xyz, r4.yyyy, cb12[1].xyzx
mad r4.xyw, r4.xxxx, cb12[0].xyxz, r8.xyxz
mad r4.xyz, r4.zzzz, cb12[2].xyzx, r4.xywx
add r4.xyz, r4.xyzx, cb12[12].xyzx
add r8.xyz, -r4.xyzx, cb12[12].xyzx
dp3 r2.w, r8.xyzx, r8.xyzx
rsq r2.w, r2.w
mul r9.xyz, r2.wwww, r8.xyzx
lt r3.xy, l(0.000000, 0.000000, 0.000000, 0.000000), cb0[2].xwxx
if_nz r3.x
  sample_indexable(texture2d)(float,float,float,float) r10.x, v1.xyxx, t8.xyzw, s0
  dp3 r3.x, r7.xyzx, r9.xyzx
  add r3.x, r10.x, r3.x
  mad r4.w, r2.x, l(-16.000000), l(-1.000000)
  exp r4.w, r4.w
  max r3.x, |r3.x|, l(0.000100)
  log r3.x, r3.x
  mul r3.x, r3.x, r4.w
  exp r3.x, r3.x
  add r3.x, r10.x, r3.x
  add_sat r10.y, r3.x, l(-1.000000)
else 
  mov r10.xy, l(1.000000,1.000000,0,0)
endif 
if_nz r3.y
  ld_indexable(texture2d)(float,float,float,float) r11.xyz, r0.xyww, t9.xyzw
else 
  mov r11.xyz, l(1.000000,1.000000,1.000000,0)
endif 
ld_indexable(texture2d)(float,float,float,float) r12.xyz, r0.xyww, t7.xyzw
mul r3.x, r3.z, cb12[13].x
ishr r3.yz, r0.yyxy, l(0, 7, 7, 0)
log r3.x, r3.x
mad r3.x, r3.x, cb12[14].x, cb12[14].y
max r3.x, r3.x, l(0.000000)
min r3.x, r3.x, l(31.000000)
round_z r3.x, r3.x
itof r3.yz, r3.yyzy
mad r3.x, r3.x, cb12[14].w, r3.y
mad r3.x, r3.x, cb12[14].z, r3.z
ftoi r3.x, r3.x
if_z r1.w
  dp3 r1.w, r9.xyzx, r7.xyzx
  add r3.y, r1.w, r1.w
  mad r13.xyz, r7.xyzx, -r3.yyyy, r9.xyzx
  max r1.w, r1.w, l(0.000010)
  mov r14.x, cb13[0].x
  mov r14.y, cb13[1].x
  mov r14.z, cb13[2].x
  mad r15.xyz, r8.xyzx, r2.wwww, r14.xyzx
  dp3 r3.y, r15.xyzx, r15.xyzx
  rsq r3.y, r3.y
  mul r15.xyz, r3.yyyy, r15.xyzx
  dp3_sat r3.y, r14.xyzx, r15.xyzx
  dp3_sat r3.z, r7.xyzx, r14.xyzx
  add r4.w, -r2.z, l(1.000000)
  mul r15.xyz, r6.xyzx, r4.wwww
  mad r5.w, r2.x, l(-0.337748), l(1.000000)
  mul r3.y, r3.y, r3.y
  dp2 r3.y, r3.yyyy, r2.xxxx
  mad r3.y, r2.x, l(0.500000), r3.y
  add r3.y, r3.y, l(-1.000000)
  add r6.w, -r3.z, l(1.000000)
  max r6.w, r6.w, l(0.000100)
  mul r7.w, r6.w, r6.w
  mul r7.w, r7.w, r7.w
  mul r6.w, r6.w, r7.w
  mad r6.w, r3.y, r6.w, l(1.000000)
  add r7.w, -r1.w, l(1.000000)
  max r7.w, |r7.w|, l(0.000100)
  mul r8.w, r7.w, r7.w
  mul r8.w, r8.w, r8.w
  mul r7.w, r7.w, r8.w
  mad r3.y, r3.y, r7.w, l(1.000000)
  mul r3.y, r3.y, r6.w
  mul r3.y, r5.w, r3.y
  mul r3.y, r3.y, l(0.318310)
  mul r16.xyz, r3.yyyy, r15.xyzx
  dp3 r3.y, r14.xyzx, r13.xyzx
  mad r17.xyz, -r3.yyyy, r14.xyzx, r13.xyzx
  lt r3.y, r3.y, l(0.999989)
  dp3 r6.w, r17.xyzx, r17.xyzx
  rsq r6.w, r6.w
  mul r17.xyz, r6.wwww, r17.xyzx
  mul r17.xyz, r17.xyzx, l(0.004590, 0.004590, 0.004590, 0.000000)
  mad r14.xyz, r14.xyzx, l(0.999989, 0.999989, 0.999989, 0.000000), r17.xyzx
  dp3 r6.w, r14.xyzx, r14.xyzx
  rsq r6.w, r6.w
  mul r14.xyz, r6.wwww, r14.xyzx
  movc r13.xyz, r3.yyyy, r14.xyzx, r13.xyzx
  mad r14.xyz, r8.xyzx, r2.wwww, r13.xyzx
  dp3 r3.y, r14.xyzx, r14.xyzx
  rsq r3.y, r3.y
  mul r14.xyz, r3.yyyy, r14.xyzx
  dp3_sat r3.y, r13.xyzx, r14.xyzx
  dp3_sat r6.w, r7.xyzx, r14.xyzx
  dp3_sat r8.w, r7.xyzx, r13.xyzx
  mul r13.xyz, r2.zzzz, r6.xyzx
  mad r13.xyz, r4.wwww, r2.yyyy, r13.xyzx
  add r4.w, r2.x, l(1.000000)
  mul r4.w, r4.w, l(0.500000)
  mul r9.w, r2.x, r2.x
  add r14.xyz, -r13.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
  add r3.y, -r3.y, l(1.000000)
  max r3.y, r3.y, l(0.000100)
  mul r10.z, r3.y, r3.y
  mul r10.z, r10.z, r10.z
  mul r3.y, r3.y, r10.z
  mad r17.xyz, r14.xyzx, r3.yyyy, r13.xyzx
  mul r3.y, r4.w, r4.w
  mad r4.w, -r1.w, r3.y, r1.w
  mad r4.w, r4.w, r1.w, r3.y
  sqrt r4.w, r4.w
  mad r10.z, -r8.w, r3.y, r8.w
  mad r10.z, r10.z, r8.w, r3.y
  sqrt r10.z, r10.z
  mul r10.z, r1.w, r10.z
  mad r8.w, r8.w, r4.w, r10.z
  rcp r8.w, r8.w
  mul r8.w, r8.w, l(0.500000)
  mul r9.w, r9.w, r9.w
  mad r10.z, r6.w, r9.w, -r6.w
  mad r6.w, r10.z, r6.w, l(1.000000)
  mul r6.w, r6.w, r6.w
  mul r6.w, r6.w, l(3.141593)
  rcp r6.w, r6.w
  mul r6.w, r6.w, r9.w
  mul r17.xyz, r8.wwww, r17.xyzx
  mul r17.xyz, r6.wwww, r17.xyzx
  mov r18.x, cb13[0].z
  mov r18.y, cb13[1].z
  mov r18.z, cb13[2].z
  mul r16.xyz, r16.xyzx, r18.xyzx
  mul r16.xyz, r3.zzzz, r16.xyzx
  mul r17.xyz, r17.xyzx, r18.xyzx
  mul r17.xyz, r3.zzzz, r17.xyzx
  mul r16.xyz, r11.xyzx, r16.xyzx
  mul r17.xyz, r11.xyzx, r17.xyzx
  ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r10.zw, r3.x, l(0), t17.xxxy
  and r3.z, r10.w, l(0x0000ffff)
  ishr r6.w, r10.w, l(16)
  mov r18.xyz, r16.xyzx
  mov r19.xyz, r17.xyzx
  mov r8.w, r10.z
  mov r10.w, l(0)
  loop 
    uge r11.w, r10.w, r3.z
    breakc_nz r11.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r11.w, r8.w, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r11.w, l(0), t19.xyzw
    add r20.xyz, -r4.xyzx, r20.xyzx
    dp3 r12.w, r20.xyzx, r20.xyzx
    mul r13.w, r20.w, r20.w
    rcp r14.w, r13.w
    lt r14.w, r12.w, r14.w
    if_nz r14.w
      max r14.w, r12.w, l(0.000000)
      rsq r14.w, r14.w
      mul r20.xyz, r14.wwww, r20.xyzx
      dp3_sat r14.w, r7.xyzx, r20.xyzx
      lt r15.w, l(0.000000), r14.w
      if_nz r15.w
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r21.xyz, r11.w, l(16), t19.xyzx
        mad r22.xyz, r8.xyzx, r2.wwww, r20.xyzx
        dp3 r11.w, r22.xyzx, r22.xyzx
        max r11.w, r11.w, l(0.000000)
        rsq r11.w, r11.w
        mul r22.xyz, r11.wwww, r22.xyzx
        dp3_sat r11.w, r20.xyzx, r22.xyzx
        dp3_sat r15.w, r7.xyzx, r22.xyzx
        mul r13.w, r12.w, r13.w
        mad r13.w, -r13.w, r13.w, l(1.000000)
        max r13.w, r13.w, l(0.000000)
        mul r13.w, r13.w, r13.w
        max r12.w, r12.w, l(0.000100)
        rcp r12.w, r12.w
        mul r12.w, r12.w, r13.w
        mul r12.w, r12.w, r14.w
        mul r12.w, r12.w, l(0.079577)
        mul r20.xyz, r12.wwww, r21.xyzx
        mul r12.w, r11.w, r11.w
        dp2 r12.w, r12.wwww, r2.xxxx
        mad r12.w, r2.x, l(0.500000), r12.w
        add r12.w, r12.w, l(-1.000000)
        add r13.w, -r14.w, l(1.000000)
        max r13.w, r13.w, l(0.000100)
        mul r16.w, r13.w, r13.w
        mul r16.w, r16.w, r16.w
        mul r13.w, r13.w, r16.w
        mad r13.w, r12.w, r13.w, l(1.000000)
        mad r12.w, r12.w, r7.w, l(1.000000)
        mul r12.w, r12.w, r13.w
        mul r12.w, r5.w, r12.w
        mul r12.w, r12.w, l(0.318310)
        mul r21.xyz, r12.wwww, r15.xyzx
        mad r18.xyz, r20.xyzx, r21.xyzx, r18.xyzx
        add r11.w, -r11.w, l(1.000000)
        max r11.w, r11.w, l(0.000100)
        mul r12.w, r11.w, r11.w
        mul r12.w, r12.w, r12.w
        mul r11.w, r11.w, r12.w
        mad r21.xyz, r14.xyzx, r11.wwww, r13.xyzx
        mad r11.w, -r14.w, r3.y, r14.w
        mad r11.w, r11.w, r14.w, r3.y
        sqrt r11.w, r11.w
        mul r11.w, r1.w, r11.w
        mad r11.w, r14.w, r4.w, r11.w
        rcp r11.w, r11.w
        mul r11.w, r11.w, l(0.500000)
        mad r12.w, r15.w, r9.w, -r15.w
        mad r12.w, r12.w, r15.w, l(1.000000)
        mul r12.w, r12.w, r12.w
        mul r12.w, r12.w, l(3.141593)
        rcp r12.w, r12.w
        mul r12.w, r9.w, r12.w
        mul r21.xyz, r11.wwww, r21.xyzx
        mul r21.xyz, r12.wwww, r21.xyzx
        mad r19.xyz, r20.xyzx, r21.xyzx, r19.xyzx
      endif 
    endif 
    iadd r8.w, r8.w, l(1)
    iadd r10.w, r10.w, l(1)
  endloop 
  mov r16.xyz, r18.xyzx
  mov r17.xyz, r19.xyzx
  mov r3.z, r8.w
  mov r10.z, l(0)
  loop 
    uge r10.w, r10.z, r6.w
    breakc_nz r10.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r10.w, r3.z, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r10.w, l(0), t19.xyzw
    add r20.xyz, -r4.xyzx, r20.xyzx
    dp3 r11.w, r20.xyzx, r20.xyzx
    mul r12.w, r20.w, r20.w
    rcp r13.w, r12.w
    lt r13.w, r11.w, r13.w
    if_nz r13.w
      max r13.w, r11.w, l(0.000000)
      rsq r13.w, r13.w
      mul r20.xyz, r13.wwww, r20.xyzx
      dp3_sat r13.w, r7.xyzx, r20.xyzx
      lt r14.w, l(0.000000), r13.w
      if_nz r14.w
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r21.xyzw, r10.w, l(16), t19.xyzw
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r22.xyzw, r10.w, l(32), t19.xyzw
        mad r23.xyz, r8.xyzx, r2.wwww, r20.xyzx
        dp3 r10.w, r23.xyzx, r23.xyzx
        max r10.w, r10.w, l(0.000000)
        rsq r10.w, r10.w
        mul r23.xyz, r10.wwww, r23.xyzx
        dp3_sat r10.w, r20.xyzx, r23.xyzx
        dp3_sat r14.w, r7.xyzx, r23.xyzx
        dp3 r15.w, r22.xyzx, r22.xyzx
        rsq r15.w, r15.w
        mul r22.xyz, r15.wwww, r22.xyzx
        dp3 r15.w, -r20.xyzx, r22.xyzx
        lt r16.w, r21.w, r15.w
        mul r12.w, r11.w, r12.w
        mad r12.w, -r12.w, r12.w, l(1.000000)
        max r12.w, r12.w, l(0.000000)
        mul r12.w, r12.w, r12.w
        max r11.w, r11.w, l(0.000100)
        rcp r11.w, r11.w
        mul r11.w, r11.w, r12.w
        add r12.w, -r21.w, r15.w
        add r15.w, -r21.w, r22.w
        max r15.w, r15.w, l(0.000001)
        div_sat r12.w, r12.w, r15.w
        mul r12.w, r12.w, r12.w
        mul r11.w, r11.w, r12.w
        mul r11.w, r11.w, r13.w
        and r11.w, r11.w, r16.w
        mul r11.w, r11.w, l(0.318310)
        mul r20.xyz, r11.wwww, r21.xyzx
        mul r11.w, r10.w, r10.w
        dp2 r11.w, r11.wwww, r2.xxxx
        mad r11.w, r2.x, l(0.500000), r11.w
        add r11.w, r11.w, l(-1.000000)
        add r12.w, -r13.w, l(1.000000)
        max r12.w, r12.w, l(0.000100)
        mul r15.w, r12.w, r12.w
        mul r15.w, r15.w, r15.w
        mul r12.w, r12.w, r15.w
        mad r12.w, r11.w, r12.w, l(1.000000)
        mad r11.w, r11.w, r7.w, l(1.000000)
        mul r11.w, r11.w, r12.w
        mul r11.w, r5.w, r11.w
        mul r11.w, r11.w, l(0.318310)
        mul r21.xyz, r11.wwww, r15.xyzx
        mad r16.xyz, r20.xyzx, r21.xyzx, r16.xyzx
        add r10.w, -r10.w, l(1.000000)
        max r10.w, r10.w, l(0.000100)
        mul r11.w, r10.w, r10.w
        mul r11.w, r11.w, r11.w
        mul r10.w, r10.w, r11.w
        mad r21.xyz, r14.xyzx, r10.wwww, r13.xyzx
        mad r10.w, -r13.w, r3.y, r13.w
        mad r10.w, r10.w, r13.w, r3.y
        sqrt r10.w, r10.w
        mul r10.w, r1.w, r10.w
        mad r10.w, r13.w, r4.w, r10.w
        rcp r10.w, r10.w
        mul r10.w, r10.w, l(0.500000)
        mad r11.w, r14.w, r9.w, -r14.w
        mad r11.w, r11.w, r14.w, l(1.000000)
        mul r11.w, r11.w, r11.w
        mul r11.w, r11.w, l(3.141593)
        rcp r11.w, r11.w
        mul r11.w, r9.w, r11.w
        mul r21.xyz, r10.wwww, r21.xyzx
        mul r21.xyz, r11.wwww, r21.xyzx
        mad r17.xyz, r20.xyzx, r21.xyzx, r17.xyzx
      endif 
    endif 
    iadd r3.z, r3.z, l(1)
    iadd r10.z, r10.z, l(1)
  endloop 
else 
  ld_indexable(texture2d)(float,float,float,float) r0.xyzw, r0.xyzw, t5.xyzw
  mul r0.yz, r0.zzyz, l(0.000000, 255.000000, 15.937500, 0.000000)
  round_ni r1.w, r0.z
  mad r13.x, r0.x, l(4080.000000), r1.w
  frc r0.x, r0.z
  mad r13.y, r0.x, l(4096.000000), r0.y
  mad r0.xy, r13.xyxx, l(0.000489, 0.000489, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000)
  max r0.xy, r0.xyxx, l(-1.000000, -1.000000, 0.000000, 0.000000)
  min r0.xy, r0.xyxx, l(1.000000, 1.000000, 0.000000, 0.000000)
  add r13.xyz, -|r0.xyxx|, l(1.000000, 1.000000, 1.000000, 0.000000)
  add r14.z, -|r0.y|, r13.x
  ge r0.z, r14.z, l(0.000000)
  ge r3.yz, r0.xxyx, l(0.000000, 0.000000, 0.000000, 0.000000)
  movc r3.yz, r3.yyzy, l(0,1.000000,1.000000,0), l(0,-1.000000,-1.000000,0)
  mul r3.yz, r3.yyzy, r13.yyzy
  movc r14.xy, r0.zzzz, r0.xyxx, r3.yzyy
  dp3 r0.x, r14.xyzx, r14.xyzx
  rsq r0.x, r0.x
  mul r0.xyz, r0.xxxx, r14.xyzx
  dp3 r13.x, cb0[3].xyzx, r0.xyzx
  dp3 r13.y, cb0[4].xyzx, r0.xyzx
  dp3 r13.z, cb0[5].xyzx, r0.xyzx
  dp3 r0.x, r9.xyzx, r7.xyzx
  add r0.y, r0.x, r0.x
  mad r9.xyz, r7.xyzx, -r0.yyyy, r9.xyzx
  max r0.x, r0.x, l(0.000010)
  mov r14.x, cb13[0].x
  mov r14.y, cb13[1].x
  mov r14.z, cb13[2].x
  mad r15.xyz, r8.xyzx, r2.wwww, r14.xyzx
  dp3 r0.y, r15.xyzx, r15.xyzx
  rsq r0.y, r0.y
  mul r15.xyz, r0.yyyy, r15.xyzx
  dp3_sat r0.y, r14.xyzx, r15.xyzx
  dp3_sat r0.z, r7.xyzx, r14.xyzx
  add r1.w, -r2.z, l(1.000000)
  mul r15.xyz, r6.xyzx, r1.wwww
  mad r3.y, r2.x, l(-0.337748), l(1.000000)
  mul r0.y, r0.y, r0.y
  dp2 r0.y, r0.yyyy, r2.xxxx
  mad r0.y, r2.x, l(0.500000), r0.y
  add r0.y, r0.y, l(-1.000000)
  add r3.z, -r0.z, l(1.000000)
  max r3.z, r3.z, l(0.000100)
  mul r4.w, r3.z, r3.z
  mul r4.w, r4.w, r4.w
  mul r3.z, r3.z, r4.w
  mad r3.z, r0.y, r3.z, l(1.000000)
  add r4.w, -r0.x, l(1.000000)
  max r4.w, |r4.w|, l(0.000100)
  mul r5.w, r4.w, r4.w
  mul r5.w, r5.w, r5.w
  mul r4.w, r4.w, r5.w
  mad r0.y, r0.y, r4.w, l(1.000000)
  mul r0.y, r0.y, r3.z
  mul r0.y, r3.y, r0.y
  mul r0.y, r0.y, l(0.318310)
  mul r18.xyz, r0.yyyy, r15.xyzx
  dp3 r0.y, r14.xyzx, r9.xyzx
  mad r19.xyz, -r0.yyyy, r14.xyzx, r9.xyzx
  lt r0.y, r0.y, l(0.999989)
  dp3 r3.z, r19.xyzx, r19.xyzx
  rsq r3.z, r3.z
  mul r19.xyz, r3.zzzz, r19.xyzx
  mul r19.xyz, r19.xyzx, l(0.004590, 0.004590, 0.004590, 0.000000)
  mad r14.xyz, r14.xyzx, l(0.999989, 0.999989, 0.999989, 0.000000), r19.xyzx
  dp3 r3.z, r14.xyzx, r14.xyzx
  rsq r3.z, r3.z
  mul r14.xyz, r3.zzzz, r14.xyzx
  movc r9.xyz, r0.yyyy, r14.xyzx, r9.xyzx
  mad r14.xyz, r8.xyzx, r2.wwww, r9.xyzx
  dp3 r0.y, r14.xyzx, r14.xyzx
  rsq r0.y, r0.y
  mul r14.xyz, r0.yyyy, r14.xyzx
  dp3_sat r0.y, r9.xyzx, r14.xyzx
  dp3_sat r3.z, r7.xyzx, r14.xyzx
  dp3_sat r5.w, r7.xyzx, r9.xyzx
  dp3 r6.w, r14.xyzx, r13.xyzx
  mul r6.xyz, r2.zzzz, r6.xyzx
  mad r6.xyz, r1.wwww, r2.yyyy, r6.xyzx
  add r1.w, r2.x, l(1.000000)
  mul r1.w, r1.w, l(0.500000)
  mul r2.y, r2.x, r2.x
  add r9.xyz, -r6.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
  add r0.y, -r0.y, l(1.000000)
  max r0.y, r0.y, l(0.000100)
  mul r2.z, r0.y, r0.y
  mul r2.z, r2.z, r2.z
  mul r0.y, r0.y, r2.z
  mad r14.xyz, r9.xyzx, r0.yyyy, r6.xyzx
  mul r0.y, r1.w, r1.w
  mad r1.w, -r0.x, r0.y, r0.x
  mad r1.w, r1.w, r0.x, r0.y
  sqrt r1.w, r1.w
  mad r2.z, -r5.w, r0.y, r5.w
  mad r2.z, r2.z, r5.w, r0.y
  sqrt r2.z, r2.z
  mul r2.z, r0.x, r2.z
  mad r2.z, r5.w, r1.w, r2.z
  rcp r2.z, r2.z
  mul r2.z, r2.z, l(0.500000)
  mad r0.w, -r0.w, l(0.900000), l(1.000000)
  sqrt r0.w, r0.w
  div r5.w, r2.y, r0.w
  min r5.w, r5.w, l(1.000000)
  max r5.w, r5.w, l(0.001000)
  mul r0.w, r0.w, r2.y
  max r0.w, r0.w, l(0.001000)
  mul r2.y, r6.w, r6.w
  mad r6.w, -r6.w, r6.w, l(1.000000)
  mad r6.w, -r3.z, r3.z, r6.w
  mul r7.w, r5.w, r5.w
  div r2.y, r2.y, r7.w
  mul r8.w, r0.w, r0.w
  div r6.w, r6.w, r8.w
  add r2.y, r2.y, r6.w
  mad r2.y, r3.z, r3.z, r2.y
  mul r0.w, r0.w, r5.w
  mul r0.w, r0.w, l(3.141593)
  mul r2.y, r2.y, r2.y
  mul r2.y, r0.w, r2.y
  rcp r2.y, r2.y
  mul r14.xyz, r2.zzzz, r14.xyzx
  mul r14.xyz, r2.yyyy, r14.xyzx
  mov r19.x, cb13[0].z
  mov r19.y, cb13[1].z
  mov r19.z, cb13[2].z
  mul r18.xyz, r18.xyzx, r19.xyzx
  mul r18.xyz, r0.zzzz, r18.xyzx
  mul r14.xyz, r14.xyzx, r19.xyzx
  mul r14.xyz, r0.zzzz, r14.xyzx
  mul r18.xyz, r11.xyzx, r18.xyzx
  mul r11.xyz, r11.xyzx, r14.xyzx
  ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r2.yz, r3.x, l(0), t17.xxyx
  and r0.z, r2.z, l(0x0000ffff)
  ishr r2.z, r2.z, l(16)
  mov r14.xyz, r18.xyzx
  mov r19.xyz, r11.xyzx
  mov r3.x, r2.y
  mov r3.z, l(0)
  loop 
    uge r5.w, r3.z, r0.z
    breakc_nz r5.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r5.w, r3.x, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r5.w, l(0), t19.xyzw
    add r20.xyz, -r4.xyzx, r20.xyzx
    dp3 r6.w, r20.xyzx, r20.xyzx
    mul r9.w, r20.w, r20.w
    rcp r10.z, r9.w
    lt r10.z, r6.w, r10.z
    if_nz r10.z
      max r10.z, r6.w, l(0.000000)
      rsq r10.z, r10.z
      mul r20.xyz, r10.zzzz, r20.xyzx
      dp3_sat r10.z, r7.xyzx, r20.xyzx
      lt r10.w, l(0.000000), r10.z
      if_nz r10.w
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r21.xyz, r5.w, l(16), t19.xyzx
        mad r22.xyz, r8.xyzx, r2.wwww, r20.xyzx
        dp3 r5.w, r22.xyzx, r22.xyzx
        max r5.w, r5.w, l(0.000000)
        rsq r5.w, r5.w
        mul r22.xyz, r5.wwww, r22.xyzx
        dp3_sat r5.w, r20.xyzx, r22.xyzx
        dp3_sat r10.w, r7.xyzx, r22.xyzx
        mul r9.w, r6.w, r9.w
        mad r9.w, -r9.w, r9.w, l(1.000000)
        max r9.w, r9.w, l(0.000000)
        mul r9.w, r9.w, r9.w
        max r6.w, r6.w, l(0.000100)
        rcp r6.w, r6.w
        mul r6.w, r6.w, r9.w
        mul r6.w, r6.w, r10.z
        mul r6.w, r6.w, l(0.079577)
        dp3 r9.w, r22.xyzx, r13.xyzx
        mul r20.xyz, r6.wwww, r21.xyzx
        mul r6.w, r5.w, r5.w
        dp2 r6.w, r6.wwww, r2.xxxx
        mad r6.w, r2.x, l(0.500000), r6.w
        add r6.w, r6.w, l(-1.000000)
        add r11.w, -r10.z, l(1.000000)
        max r11.w, r11.w, l(0.000100)
        mul r12.w, r11.w, r11.w
        mul r12.w, r12.w, r12.w
        mul r11.w, r11.w, r12.w
        mad r11.w, r6.w, r11.w, l(1.000000)
        mad r6.w, r6.w, r4.w, l(1.000000)
        mul r6.w, r6.w, r11.w
        mul r6.w, r3.y, r6.w
        mul r6.w, r6.w, l(0.318310)
        mul r21.xyz, r6.wwww, r15.xyzx
        mad r14.xyz, r20.xyzx, r21.xyzx, r14.xyzx
        add r5.w, -r5.w, l(1.000000)
        max r5.w, r5.w, l(0.000100)
        mul r6.w, r5.w, r5.w
        mul r6.w, r6.w, r6.w
        mul r5.w, r5.w, r6.w
        mad r21.xyz, r9.xyzx, r5.wwww, r6.xyzx
        mad r5.w, -r10.z, r0.y, r10.z
        mad r5.w, r5.w, r10.z, r0.y
        sqrt r5.w, r5.w
        mul r5.w, r0.x, r5.w
        mad r5.w, r10.z, r1.w, r5.w
        rcp r5.w, r5.w
        mul r5.w, r5.w, l(0.500000)
        mul r6.w, r9.w, r9.w
        mad r9.w, -r9.w, r9.w, l(1.000000)
        mad r9.w, -r10.w, r10.w, r9.w
        div r6.w, r6.w, r7.w
        div r9.w, r9.w, r8.w
        add r6.w, r6.w, r9.w
        mad r6.w, r10.w, r10.w, r6.w
        mul r6.w, r6.w, r6.w
        mul r6.w, r0.w, r6.w
        rcp r6.w, r6.w
        mul r21.xyz, r5.wwww, r21.xyzx
        mul r21.xyz, r6.wwww, r21.xyzx
        mad r19.xyz, r20.xyzx, r21.xyzx, r19.xyzx
      endif 
    endif 
    iadd r3.xz, r3.xxzx, l(1, 0, 1, 0)
  endloop 
  mov r16.xyz, r14.xyzx
  mov r17.xyz, r19.xyzx
  mov r0.z, r3.x
  mov r2.y, l(0)
  loop 
    uge r3.z, r2.y, r2.z
    breakc_nz r3.z
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r3.z, r0.z, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r11.xyzw, r3.z, l(0), t19.xyzw
    add r11.xyz, -r4.xyzx, r11.xyzx
    dp3 r5.w, r11.xyzx, r11.xyzx
    mul r6.w, r11.w, r11.w
    rcp r9.w, r6.w
    lt r9.w, r5.w, r9.w
    if_nz r9.w
      max r9.w, r5.w, l(0.000000)
      rsq r9.w, r9.w
      mul r11.xyz, r9.wwww, r11.xyzx
      dp3_sat r9.w, r7.xyzx, r11.xyzx
      lt r10.z, l(0.000000), r9.w
      if_nz r10.z
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r18.xyzw, r3.z, l(16), t19.xyzw
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r3.z, l(32), t19.xyzw
        mad r21.xyz, r8.xyzx, r2.wwww, r11.xyzx
        dp3 r3.z, r21.xyzx, r21.xyzx
        max r3.z, r3.z, l(0.000000)
        rsq r3.z, r3.z
        mul r21.xyz, r3.zzzz, r21.xyzx
        dp3_sat r3.z, r11.xyzx, r21.xyzx
        dp3_sat r10.z, r7.xyzx, r21.xyzx
        dp3 r10.w, r20.xyzx, r20.xyzx
        rsq r10.w, r10.w
        mul r20.xyz, r10.wwww, r20.xyzx
        dp3 r10.w, -r11.xyzx, r20.xyzx
        lt r11.x, r18.w, r10.w
        mul r6.w, r5.w, r6.w
        mad r6.w, -r6.w, r6.w, l(1.000000)
        max r6.w, r6.w, l(0.000000)
        mul r6.w, r6.w, r6.w
        max r5.w, r5.w, l(0.000100)
        rcp r5.w, r5.w
        mul r5.w, r5.w, r6.w
        add r6.w, -r18.w, r10.w
        add r10.w, -r18.w, r20.w
        max r10.w, r10.w, l(0.000001)
        div_sat r6.w, r6.w, r10.w
        mul r6.w, r6.w, r6.w
        mul r5.w, r5.w, r6.w
        mul r5.w, r5.w, r9.w
        and r5.w, r5.w, r11.x
        mul r5.w, r5.w, l(0.318310)
        dp3 r6.w, r21.xyzx, r13.xyzx
        mul r11.xyz, r5.wwww, r18.xyzx
        mul r5.w, r3.z, r3.z
        dp2 r5.w, r5.wwww, r2.xxxx
        mad r5.w, r2.x, l(0.500000), r5.w
        add r5.w, r5.w, l(-1.000000)
        add r10.w, -r9.w, l(1.000000)
        max r10.w, r10.w, l(0.000100)
        mul r11.w, r10.w, r10.w
        mul r11.w, r11.w, r11.w
        mul r10.w, r10.w, r11.w
        mad r10.w, r5.w, r10.w, l(1.000000)
        mad r5.w, r5.w, r4.w, l(1.000000)
        mul r5.w, r5.w, r10.w
        mul r5.w, r3.y, r5.w
        mul r5.w, r5.w, l(0.318310)
        mul r18.xyz, r5.wwww, r15.xyzx
        mad r16.xyz, r11.xyzx, r18.xyzx, r16.xyzx
        add r3.z, -r3.z, l(1.000000)
        max r3.z, r3.z, l(0.000100)
        mul r5.w, r3.z, r3.z
        mul r5.w, r5.w, r5.w
        mul r3.z, r3.z, r5.w
        mad r18.xyz, r9.xyzx, r3.zzzz, r6.xyzx
        mad r3.z, -r9.w, r0.y, r9.w
        mad r3.z, r3.z, r9.w, r0.y
        sqrt r3.z, r3.z
        mul r3.z, r0.x, r3.z
        mad r3.z, r9.w, r1.w, r3.z
        rcp r3.z, r3.z
        mul r3.z, r3.z, l(0.500000)
        mul r5.w, r6.w, r6.w
        mad r6.w, -r6.w, r6.w, l(1.000000)
        mad r6.w, -r10.z, r10.z, r6.w
        div r5.w, r5.w, r7.w
        div r6.w, r6.w, r8.w
        add r5.w, r5.w, r6.w
        mad r5.w, r10.z, r10.z, r5.w
        mul r5.w, r5.w, r5.w
        mul r5.w, r0.w, r5.w
        rcp r5.w, r5.w
        mul r18.xyz, r3.zzzz, r18.xyzx
        mul r18.xyz, r5.wwww, r18.xyzx
        mad r17.xyz, r11.xyzx, r18.xyzx, r17.xyzx
      endif 
    endif 
    iadd r0.z, r0.z, l(1)
    iadd r2.y, r2.y, l(1)
  endloop 
endif 
add r0.xy, r10.xyxx, l(-1.000000, -1.000000, 0.000000, 0.000000)
mad r0.xy, cb0[2].yyyy, r0.xyxx, l(1.000000, 1.000000, 0.000000, 0.000000)
mul r0.yzw, r0.yyyy, r17.xxyz
mad r0.xyz, r16.xyzx, r0.xxxx, r0.yzwy
mad r0.xyz, r3.wwww, r1.xyzx, r0.xyzx
max r0.xyz, r0.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
ld_indexable(texture2d)(float,float,float,float) r0.w, l(0, 0, 0, 0), t0.yzwx
eq r1.x, r0.w, l(0.000000)
movc r0.w, r1.x, l(0.010000), r0.w
mad r0.xyz, r0.xyzx, r0.wwww, r5.xyzx
mad o0.xyz, r12.xyzx, r10.yyyy, r0.xyzx
mov o0.w, l(1.000000)
ret 
// Approximately 704 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HLSL errors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
E:\Spiele\Divinity Original Sin 2 Definitive Edition\DefEd\bin\ShaderCache\49e8855c35a4d0e3-ps_replace.txt(40,18-34): error X3000: syntax error: unexpected token 'ClusterInfoBuffer'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
