//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;
  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) {
    r3.x = Shadow.Load(r0.xyw).x;
  } else {
    r3.x = 1;
  }
  r11.xyz = IBL_Specular.Load(r0.xyw).xyz;
  r3.y = global_ViewInfo.x * r3.z;
  r10.zw = (uint2)r0.yx >> int2(7,7);
  r3.y = log2(r3.y);
  r3.y = r3.y * global_ScaleAndBias.x + global_ScaleAndBias.y;
  r3.y = max(0, r3.y);
  r3.y = min(31, r3.y);
  r3.y = trunc(r3.y);
  r10.zw = (int2)r10.zw;
  r3.y = r3.y * global_ScaleAndBias.w + r10.z;
  r3.y = r3.y * global_ScaleAndBias.z + r10.w;
  r3.y = (int)r3.y;
  if (r1.w == 0) {
    r1.w = dot(r9.xyz, r7.xyz);
    r3.z = r1.w + r1.w;
    r12.xyz = r7.xyz * -r3.zzz + r9.xyz;
    r1.w = max(9.99999975e-006, r1.w);
    r13.x = global_LightPropertyMatrix._m00;
    r13.y = global_LightPropertyMatrix._m01;
    r13.z = global_LightPropertyMatrix._m02;
    r14.xyz = r8.xyz * r2.www + r13.xyz;
    r3.z = dot(r14.xyz, r14.xyz);
    r3.z = rsqrt(r3.z);
    r14.xyz = r14.xyz * r3.zzz;
    r3.z = saturate(dot(r13.xyz, r14.xyz));
    r4.w = saturate(dot(r7.xyz, r13.xyz));
    r5.w = 1 + -r2.z;
    r14.xyz = r5.www * r6.xyz;
    r6.w = r2.x * -0.337748349 + 1;
    r3.z = r3.z * r3.z;
    r3.z = dot(r3.zz, r2.xx);
    r3.z = r2.x * 0.5 + r3.z;
    r3.z = -1 + r3.z;
    r7.w = 1 + -r4.w;
    r7.w = max(9.99999975e-005, r7.w);
    r8.w = r7.w * r7.w;
    r8.w = r8.w * r8.w;
    r7.w = r8.w * r7.w;
    r7.w = r3.z * r7.w + 1;
    r8.w = 1 + -r1.w;
    r8.w = max(9.99999975e-005, abs(r8.w));
    r9.w = r8.w * r8.w;
    r9.w = r9.w * r9.w;
    r8.w = r9.w * r8.w;
    r3.z = r3.z * r8.w + 1;
    r3.z = r7.w * r3.z;
    r3.z = r3.z * r6.w;
    r3.z = 0.318309873 * r3.z;
    r15.xyz = r14.xyz * r3.zzz;
    r3.z = dot(r13.xyz, r12.xyz);
    r16.xyz = -r3.zzz * r13.xyz + r12.xyz;
    r3.z = cmp(r3.z < 0.99998945);
    r7.w = dot(r16.xyz, r16.xyz);
    r7.w = rsqrt(r7.w);
    r16.xyz = r16.xyz * r7.www;
    r16.xyz = float3(0.00459006429,0.00459006429,0.00459006429) * r16.xyz;
    r13.xyz = r13.xyz * float3(0.99998945,0.99998945,0.99998945) + r16.xyz;
    r7.w = dot(r13.xyz, r13.xyz);
    r7.w = rsqrt(r7.w);
    r13.xyz = r13.xyz * r7.www;
    r12.xyz = r3.zzz ? r13.xyz : r12.xyz;
    r13.xyz = r8.xyz * r2.www + r12.xyz;
    r3.z = dot(r13.xyz, r13.xyz);
    r3.z = rsqrt(r3.z);
    r13.xyz = r13.xyz * r3.zzz;
    r3.z = saturate(dot(r12.xyz, r13.xyz));
    r7.w = saturate(dot(r7.xyz, r13.xyz));
    r9.w = saturate(dot(r7.xyz, r12.xyz));
    r12.xyz = r6.xyz * r2.zzz;
    r12.xyz = r5.www * r2.yyy + r12.xyz;
    r5.w = 1 + r2.x;
    r5.w = 0.5 * r5.w;
    r10.z = r2.x * r2.x;
    r13.xyz = float3(1,1,1) + -r12.xyz;
    r3.z = 1 + -r3.z;
    r3.z = max(9.99999975e-005, r3.z);
    r10.w = r3.z * r3.z;
    r10.zw = r10.zw * r10.zw;
    r3.z = r10.w * r3.z;
    r16.xyz = r13.xyz * r3.zzz + r12.xyz;
    r3.z = r5.w * r5.w;
    r5.w = -r1.w * r3.z + r1.w;
    r5.w = r5.w * r1.w + r3.z;
    r5.w = sqrt(r5.w);
    r10.w = -r9.w * r3.z + r9.w;
    r10.w = r10.w * r9.w + r3.z;
    r10.w = sqrt(r10.w);
    r10.w = r10.w * r1.w;
    r9.w = r9.w * r5.w + r10.w;
    r9.w = rcp(r9.w);
    r9.w = 0.5 * r9.w;
    r10.w = r7.w * r10.z + -r7.w;
    r7.w = r10.w * r7.w + 1;
    r7.w = r7.w * r7.w;
    r7.w = 3.14159274 * r7.w;
    r7.w = rcp(r7.w);
    r7.w = r10.z * r7.w;
    r16.xyz = r16.xyz * r9.www;
    r16.xyz = r16.xyz * r7.www;
    r17.x = global_LightPropertyMatrix._m20;
    r17.y = global_LightPropertyMatrix._m21;
    r17.z = global_LightPropertyMatrix._m22;
    r15.xyz = r17.xyz * r15.xyz;
    r15.xyz = r15.xyz * r4.www;
    r16.xyz = r17.xyz * r16.xyz;
    r16.xyz = r16.xyz * r4.www;
    r15.xyz = r15.xyz * r3.xxx;
    r16.xyz = r16.xyz * r3.xxx;
  // Known bad code for instruction (needs manual fix):
    ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r17.xy, r3.y, l(0), t17.xyxx
  r17.x = LinearSampler[]..swiz;
  r17.y = LinearSampler[]..swiz;
    r4.w = (int)r17.y & 0x0000ffff;
    r7.w = (uint)r17.y >> 16;
    r17.yzw = r15.xyz;
    r18.xyz = r16.xyz;
    r9.w = r17.x;
    r10.w = 0;
    while (true) {
      r11.w = cmp((uint)r10.w >= (uint)r4.w);
      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, r9.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) r19.xyzw, r11.w, l(0), t19.xyzw
    r19.x = LinearSampler[]..swiz;
    r19.y = LinearSampler[]..swiz;
    r19.z = LinearSampler[]..swiz;
    r19.w = LinearSampler[]..swiz;
      r19.xyz = r19.xyz + -r4.xyz;
      r12.w = dot(r19.xyz, r19.xyz);
      r13.w = r19.w * r19.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);
        r19.xyz = r19.xyz * r14.www;
        r14.w = saturate(dot(r7.xyz, r19.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) r20.xyz, r11.w, l(16), t19.xyzx
        r20.x = LinearSampler[]..swiz;
        r20.y = LinearSampler[]..swiz;
        r20.z = LinearSampler[]..swiz;
          r21.xyz = r8.xyz * r2.www + r19.xyz;
          r11.w = dot(r21.xyz, r21.xyz);
          r11.w = max(1.00000001e-010, r11.w);
          r11.w = rsqrt(r11.w);
          r21.xyz = r21.xyz * r11.www;
          r11.w = saturate(dot(r19.xyz, r21.xyz));
          r15.w = saturate(dot(r7.xyz, r21.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;
          r19.xyz = r20.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 * r8.w + 1;
          r12.w = r13.w * r12.w;
          r12.w = r12.w * r6.w;
          r12.w = 0.318309873 * r12.w;
          r20.xyz = r14.xyz * r12.www;
          r17.yzw = r19.xyz * r20.xyz + r17.yzw;
          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;
          r20.xyz = r13.xyz * r11.www + r12.xyz;
          r11.w = -r14.w * r3.z + r14.w;
          r11.w = r11.w * r14.w + r3.z;
          r11.w = sqrt(r11.w);
          r11.w = r11.w * r1.w;
          r11.w = r14.w * r5.w + r11.w;
          r11.w = rcp(r11.w);
          r11.w = 0.5 * r11.w;
          r12.w = r15.w * r10.z + -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 * r10.z;
          r20.xyz = r20.xyz * r11.www;
          r20.xyz = r20.xyz * r12.www;
          r18.xyz = r19.xyz * r20.xyz + r18.xyz;
        }
      }
      r9.w = (int)r9.w + 1;
      r10.w = (int)r10.w + 1;
    }
    r15.xyz = r17.yzw;
    r16.xyz = r18.xyz;
    r4.w = r9.w;
    r10.w = 0;
    while (true) {
      r11.w = cmp((uint)r10.w >= (uint)r7.w);
      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, r4.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) r19.xyzw, r11.w, l(0), t19.xyzw
    r19.x = LinearSampler[]..swiz;
    r19.y = LinearSampler[]..swiz;
    r19.z = LinearSampler[]..swiz;
    r19.w = LinearSampler[]..swiz;
      r19.xyz = r19.xyz + -r4.xyz;
      r12.w = dot(r19.xyz, r19.xyz);
      r13.w = r19.w * r19.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);
        r19.xyz = r19.xyz * r14.www;
        r14.w = saturate(dot(r7.xyz, r19.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) r20.xyzw, r11.w, l(16), t19.xyzw
        r20.x = LinearSampler[]..swiz;
        r20.y = LinearSampler[]..swiz;
        r20.z = LinearSampler[]..swiz;
        r20.w = LinearSampler[]..swiz;
        // Known bad code for instruction (needs manual fix):
                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r21.xyzw, r11.w, l(32), t19.xyzw
        r21.x = LinearSampler[]..swiz;
        r21.y = LinearSampler[]..swiz;
        r21.z = LinearSampler[]..swiz;
        r21.w = LinearSampler[]..swiz;
          r22.xyz = r8.xyz * r2.www + r19.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(r19.xyz, r22.xyz));
          r15.w = saturate(dot(r7.xyz, r22.xyz));
          r16.w = dot(r21.xyz, r21.xyz);
          r16.w = rsqrt(r16.w);
          r21.xyz = r21.xyz * r16.www;
          r16.w = dot(-r19.xyz, r21.xyz);
          r17.x = cmp(r20.w < r16.w);
          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;
          r13.w = r16.w + -r20.w;
          r16.w = r21.w + -r20.w;
          r16.w = max(9.99999997e-007, r16.w);
          r13.w = saturate(r13.w / r16.w);
          r13.w = r13.w * r13.w;
          r12.w = r13.w * r12.w;
          r12.w = r14.w * r12.w;
          r12.w = r17.x ? r12.w : 0;
          r12.w = 0.318309873 * r12.w;
          r19.xyz = r20.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 * r8.w + 1;
          r12.w = r13.w * r12.w;
          r12.w = r12.w * r6.w;
          r12.w = 0.318309873 * r12.w;
          r20.xyz = r14.xyz * r12.www;
          r15.xyz = r19.xyz * r20.xyz + r15.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;
          r20.xyz = r13.xyz * r11.www + r12.xyz;
          r11.w = -r14.w * r3.z + r14.w;
          r11.w = r11.w * r14.w + r3.z;
          r11.w = sqrt(r11.w);
          r11.w = r11.w * r1.w;
          r11.w = r14.w * r5.w + r11.w;
          r11.w = rcp(r11.w);
          r11.w = 0.5 * r11.w;
          r12.w = r15.w * r10.z + -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 * r10.z;
          r20.xyz = r20.xyz * r11.www;
          r20.xyz = r20.xyz * r12.www;
          r16.xyz = r19.xyz * r20.xyz + r16.xyz;
        }
      }
      r4.w = (int)r4.w + 1;
      r10.w = (int)r10.w + 1;
    }
  } else {
    r0.xyzw = GBuffer4.Load(r0.xyz).xyzw;
    r0.yz = float2(255,15.9375) * r0.zy;
    r1.w = floor(r0.z);
    r12.x = r0.x * 4080 + r1.w;
    r0.x = frac(r0.z);
    r12.y = r0.x * 4096 + r0.y;
    r0.xy = r12.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);
    r12.xyz = float3(1,1,1) + -abs(r0.xyx);
    r13.z = r12.x + -abs(r0.y);
    r0.z = cmp(r13.z >= 0);
    r10.zw = cmp(r0.xy >= float2(0,0));
    r10.zw = r10.zw ? float2(1,1) : float2(-1,-1);
    r10.zw = r12.yz * r10.zw;
    r13.xy = r0.zz ? r0.xy : r10.zw;
    r0.x = dot(r13.xyz, r13.xyz);
    r0.x = rsqrt(r0.x);
    r0.xyz = r13.xyz * r0.xxx;
    r12.x = dot(invViewMatrix._m00_m01_m02, r0.xyz);
    r12.y = dot(invViewMatrix._m10_m11_m12, r0.xyz);
    r12.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);
    r13.x = global_LightPropertyMatrix._m00;
    r13.y = global_LightPropertyMatrix._m01;
    r13.z = global_LightPropertyMatrix._m02;
    r14.xyz = r8.xyz * r2.www + r13.xyz;
    r0.y = dot(r14.xyz, r14.xyz);
    r0.y = rsqrt(r0.y);
    r14.xyz = r14.xyz * r0.yyy;
    r0.y = saturate(dot(r13.xyz, r14.xyz));
    r0.z = saturate(dot(r7.xyz, r13.xyz));
    r1.w = 1 + -r2.z;
    r14.xyz = r1.www * r6.xyz;
    r3.z = 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;
    r4.w = 1 + -r0.z;
    r4.w = max(9.99999975e-005, r4.w);
    r5.w = r4.w * r4.w;
    r5.w = r5.w * r5.w;
    r4.w = r5.w * r4.w;
    r4.w = r0.y * r4.w + 1;
    r5.w = 1 + -r0.x;
    r5.w = max(9.99999975e-005, abs(r5.w));
    r6.w = r5.w * r5.w;
    r6.w = r6.w * r6.w;
    r5.w = r6.w * r5.w;
    r0.y = r0.y * r5.w + 1;
    r0.y = r4.w * r0.y;
    r0.y = r0.y * r3.z;
    r0.y = 0.318309873 * r0.y;
    r17.xyz = r14.xyz * r0.yyy;
    r0.y = dot(r13.xyz, r9.xyz);
    r18.xyz = -r0.yyy * r13.xyz + r9.xyz;
    r0.y = cmp(r0.y < 0.99998945);
    r4.w = dot(r18.xyz, r18.xyz);
    r4.w = rsqrt(r4.w);
    r18.xyz = r18.xyz * r4.www;
    r18.xyz = float3(0.00459006429,0.00459006429,0.00459006429) * r18.xyz;
    r13.xyz = r13.xyz * float3(0.99998945,0.99998945,0.99998945) + r18.xyz;
    r4.w = dot(r13.xyz, r13.xyz);
    r4.w = rsqrt(r4.w);
    r13.xyz = r13.xyz * r4.www;
    r9.xyz = r0.yyy ? r13.xyz : r9.xyz;
    r13.xyz = r8.xyz * r2.www + r9.xyz;
    r0.y = dot(r13.xyz, r13.xyz);
    r0.y = rsqrt(r0.y);
    r13.xyz = r13.xyz * r0.yyy;
    r0.y = saturate(dot(r9.xyz, r13.xyz));
    r4.w = saturate(dot(r7.xyz, r13.xyz));
    r6.w = saturate(dot(r7.xyz, r9.xyz));
    r7.w = dot(r13.xyz, r12.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;
    r13.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 = -r6.w * r0.y + r6.w;
    r2.z = r2.z * r6.w + r0.y;
    r2.z = sqrt(r2.z);
    r2.z = r2.z * r0.x;
    r2.z = r6.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);
    r6.w = r2.y / r0.w;
    r6.w = min(1, r6.w);
    r6.w = max(0.00100000005, r6.w);
    r0.w = r2.y * r0.w;
    r0.w = max(0.00100000005, r0.w);
    r2.y = r7.w * r7.w;
    r7.w = -r7.w * r7.w + 1;
    r7.w = -r4.w * r4.w + r7.w;
    r8.w = r6.w * r6.w;
    r2.y = r2.y / r8.w;
    r9.w = r0.w * r0.w;
    r7.w = r7.w / r9.w;
    r2.y = r7.w + r2.y;
    r2.y = r4.w * r4.w + r2.y;
    r0.w = r6.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);
    r13.xyz = r13.xyz * r2.zzz;
    r13.xyz = r13.xyz * r2.yyy;
    r18.x = global_LightPropertyMatrix._m20;
    r18.y = global_LightPropertyMatrix._m21;
    r18.z = global_LightPropertyMatrix._m22;
    r17.xyz = r18.xyz * r17.xyz;
    r17.xyz = r17.xyz * r0.zzz;
    r13.xyz = r18.xyz * r13.xyz;
    r13.xyz = r13.xyz * r0.zzz;
    r17.xyz = r17.xyz * r3.xxx;
    r13.xyz = r13.xyz * r3.xxx;
  // Known bad code for instruction (needs manual fix):
    ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r2.yz, r3.y, l(0), t17.xxyx
  r2.y = LinearSampler[]..swiz;
  r2.z = LinearSampler[]..swiz;
    r0.z = (int)r2.z & 0x0000ffff;
    r2.z = (uint)r2.z >> 16;
    r18.xyz = r17.xyz;
    r19.xyz = r13.xyz;
    r3.x = r2.y;
    r3.y = 0;
    while (true) {
      r4.w = cmp((uint)r3.y >= (uint)r0.z);
      if (r4.w != 0) break;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.w, r3.x, l(0), t18.xxxx
    r4.w = LinearSampler[]..swiz;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r4.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);
      r7.w = r20.w * r20.w;
      r10.z = rcp(r7.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, r4.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;
          r4.w = dot(r22.xyz, r22.xyz);
          r4.w = max(1.00000001e-010, r4.w);
          r4.w = rsqrt(r4.w);
          r22.xyz = r22.xyz * r4.www;
          r4.w = saturate(dot(r20.xyz, r22.xyz));
          r10.w = saturate(dot(r7.xyz, r22.xyz));
          r7.w = r7.w * r6.w;
          r7.w = -r7.w * r7.w + 1;
          r7.w = max(0, r7.w);
          r7.w = r7.w * r7.w;
          r6.w = max(9.99999975e-005, r6.w);
          r6.w = rcp(r6.w);
          r6.w = r7.w * r6.w;
          r6.w = r10.z * r6.w;
          r6.w = 0.0795774683 * r6.w;
          r7.w = dot(r22.xyz, r12.xyz);
          r20.xyz = r21.xyz * r6.www;
          r6.w = r4.w * r4.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 * r5.w + 1;
          r6.w = r11.w * r6.w;
          r6.w = r6.w * r3.z;
          r6.w = 0.318309873 * r6.w;
          r21.xyz = r14.xyz * r6.www;
          r18.xyz = r20.xyz * r21.xyz + r18.xyz;
          r4.w = 1 + -r4.w;
          r4.w = max(9.99999975e-005, r4.w);
          r6.w = r4.w * r4.w;
          r6.w = r6.w * r6.w;
          r4.w = r6.w * r4.w;
          r21.xyz = r9.xyz * r4.www + r6.xyz;
          r4.w = -r10.z * r0.y + r10.z;
          r4.w = r4.w * r10.z + r0.y;
          r4.w = sqrt(r4.w);
          r4.w = r4.w * r0.x;
          r4.w = r10.z * r1.w + r4.w;
          r4.w = rcp(r4.w);
          r4.w = 0.5 * r4.w;
          r6.w = r7.w * r7.w;
          r7.w = -r7.w * r7.w + 1;
          r7.w = -r10.w * r10.w + r7.w;
          r6.w = r6.w / r8.w;
          r7.w = r7.w / r9.w;
          r6.w = r7.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 * r4.www;
          r21.xyz = r21.xyz * r6.www;
          r19.xyz = r20.xyz * r21.xyz + r19.xyz;
        }
      }
      r3.xy = (int2)r3.xy + int2(1,1);
    }
    r15.xyz = r18.xyz;
    r16.xyz = r19.xyz;
    r0.z = r3.x;
    r2.y = 0;
    while (true) {
      r3.y = cmp((uint)r2.y >= (uint)r2.z);
      if (r3.y != 0) break;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r3.y, r0.z, l(0), t18.xxxx
    r3.y = LinearSampler[]..swiz;
    // Known bad code for instruction (needs manual fix):
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r13.xyzw, r3.y, l(0), t19.xyzw
    r13.x = LinearSampler[]..swiz;
    r13.y = LinearSampler[]..swiz;
    r13.z = LinearSampler[]..swiz;
    r13.w = LinearSampler[]..swiz;
      r13.xyz = r13.xyz + -r4.xyz;
      r4.w = dot(r13.xyz, r13.xyz);
      r6.w = r13.w * r13.w;
      r7.w = rcp(r6.w);
      r7.w = cmp(r4.w < r7.w);
      if (r7.w != 0) {
        r7.w = max(1.00000001e-010, r4.w);
        r7.w = rsqrt(r7.w);
        r13.xyz = r13.xyz * r7.www;
        r7.w = saturate(dot(r7.xyz, r13.xyz));
        r10.z = cmp(0 < r7.w);
        if (r10.z != 0) {
        // Known bad code for instruction (needs manual fix):
                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r17.xyzw, r3.y, l(16), t19.xyzw
        r17.x = LinearSampler[]..swiz;
        r17.y = LinearSampler[]..swiz;
        r17.z = LinearSampler[]..swiz;
        r17.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.y, 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 + r13.xyz;
          r3.y = dot(r21.xyz, r21.xyz);
          r3.y = max(1.00000001e-010, r3.y);
          r3.y = rsqrt(r3.y);
          r21.xyz = r21.xyz * r3.yyy;
          r3.y = saturate(dot(r13.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(-r13.xyz, r20.xyz);
          r11.w = cmp(r17.w < r10.w);
          r6.w = r6.w * r4.w;
          r6.w = -r6.w * r6.w + 1;
          r6.w = max(0, r6.w);
          r6.w = r6.w * r6.w;
          r4.w = max(9.99999975e-005, r4.w);
          r4.w = rcp(r4.w);
          r4.w = r6.w * r4.w;
          r6.w = r10.w + -r17.w;
          r10.w = r20.w + -r17.w;
          r10.w = max(9.99999997e-007, r10.w);
          r6.w = saturate(r6.w / r10.w);
          r6.w = r6.w * r6.w;
          r4.w = r6.w * r4.w;
          r4.w = r7.w * r4.w;
          r4.w = r11.w ? r4.w : 0;
          r4.w = 0.318309873 * r4.w;
          r6.w = dot(r21.xyz, r12.xyz);
          r13.xyz = r17.xyz * r4.www;
          r4.w = r3.y * r3.y;
          r4.w = dot(r4.ww, r2.xx);
          r4.w = r2.x * 0.5 + r4.w;
          r4.w = -1 + r4.w;
          r10.w = 1 + -r7.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 = r4.w * r10.w + 1;
          r4.w = r4.w * r5.w + 1;
          r4.w = r10.w * r4.w;
          r4.w = r4.w * r3.z;
          r4.w = 0.318309873 * r4.w;
          r17.xyz = r14.xyz * r4.www;
          r15.xyz = r13.xyz * r17.xyz + r15.xyz;
          r3.y = 1 + -r3.y;
          r3.y = max(9.99999975e-005, r3.y);
          r4.w = r3.y * r3.y;
          r4.w = r4.w * r4.w;
          r3.y = r4.w * r3.y;
          r17.xyz = r9.xyz * r3.yyy + r6.xyz;
          r3.y = -r7.w * r0.y + r7.w;
          r3.y = r3.y * r7.w + r0.y;
          r3.y = sqrt(r3.y);
          r3.y = r3.y * r0.x;
          r3.y = r7.w * r1.w + r3.y;
          r3.y = rcp(r3.y);
          r3.y = 0.5 * r3.y;
          r4.w = r6.w * r6.w;
          r6.w = -r6.w * r6.w + 1;
          r6.w = -r10.z * r10.z + r6.w;
          r4.w = r4.w / r8.w;
          r6.w = r6.w / r9.w;
          r4.w = r6.w + r4.w;
          r4.w = r10.z * r10.z + r4.w;
          r4.w = r4.w * r4.w;
          r4.w = r4.w * r0.w;
          r4.w = rcp(r4.w);
          r17.xyz = r17.xyz * r3.yyy;
          r17.xyz = r17.xyz * r4.www;
          r16.xyz = r13.xyz * r17.xyz + r16.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 = r16.xyz * r0.yyy;
  r0.xyz = r15.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 = r11.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 23
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) r3.x, r0.xyww, t9.xyzw
else 
  mov r3.x, l(1.000000)
endif 
ld_indexable(texture2d)(float,float,float,float) r11.xyz, r0.xyww, t7.xyzw
mul r3.y, r3.z, cb12[13].x
ishr r10.zw, r0.yyyx, l(0, 0, 7, 7)
log r3.y, r3.y
mad r3.y, r3.y, cb12[14].x, cb12[14].y
max r3.y, r3.y, l(0.000000)
min r3.y, r3.y, l(31.000000)
round_z r3.y, r3.y
itof r10.zw, r10.zzzw
mad r3.y, r3.y, cb12[14].w, r10.z
mad r3.y, r3.y, cb12[14].z, r10.w
ftoi r3.y, r3.y
if_z r1.w
  dp3 r1.w, r9.xyzx, r7.xyzx
  add r3.z, r1.w, r1.w
  mad r12.xyz, r7.xyzx, -r3.zzzz, r9.xyzx
  max r1.w, r1.w, l(0.000010)
  mov r13.x, cb13[0].x
  mov r13.y, cb13[1].x
  mov r13.z, cb13[2].x
  mad r14.xyz, r8.xyzx, r2.wwww, r13.xyzx
  dp3 r3.z, r14.xyzx, r14.xyzx
  rsq r3.z, r3.z
  mul r14.xyz, r3.zzzz, r14.xyzx
  dp3_sat r3.z, r13.xyzx, r14.xyzx
  dp3_sat r4.w, r7.xyzx, r13.xyzx
  add r5.w, -r2.z, l(1.000000)
  mul r14.xyz, r6.xyzx, r5.wwww
  mad r6.w, r2.x, l(-0.337748), l(1.000000)
  mul r3.z, r3.z, r3.z
  dp2 r3.z, r3.zzzz, r2.xxxx
  mad r3.z, r2.x, l(0.500000), r3.z
  add r3.z, r3.z, l(-1.000000)
  add r7.w, -r4.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 r7.w, r3.z, r7.w, l(1.000000)
  add r8.w, -r1.w, l(1.000000)
  max r8.w, |r8.w|, l(0.000100)
  mul r9.w, r8.w, r8.w
  mul r9.w, r9.w, r9.w
  mul r8.w, r8.w, r9.w
  mad r3.z, r3.z, r8.w, l(1.000000)
  mul r3.z, r3.z, r7.w
  mul r3.z, r6.w, r3.z
  mul r3.z, r3.z, l(0.318310)
  mul r15.xyz, r3.zzzz, r14.xyzx
  dp3 r3.z, r13.xyzx, r12.xyzx
  mad r16.xyz, -r3.zzzz, r13.xyzx, r12.xyzx
  lt r3.z, r3.z, l(0.999989)
  dp3 r7.w, r16.xyzx, r16.xyzx
  rsq r7.w, r7.w
  mul r16.xyz, r7.wwww, r16.xyzx
  mul r16.xyz, r16.xyzx, l(0.004590, 0.004590, 0.004590, 0.000000)
  mad r13.xyz, r13.xyzx, l(0.999989, 0.999989, 0.999989, 0.000000), r16.xyzx
  dp3 r7.w, r13.xyzx, r13.xyzx
  rsq r7.w, r7.w
  mul r13.xyz, r7.wwww, r13.xyzx
  movc r12.xyz, r3.zzzz, r13.xyzx, r12.xyzx
  mad r13.xyz, r8.xyzx, r2.wwww, r12.xyzx
  dp3 r3.z, r13.xyzx, r13.xyzx
  rsq r3.z, r3.z
  mul r13.xyz, r3.zzzz, r13.xyzx
  dp3_sat r3.z, r12.xyzx, r13.xyzx
  dp3_sat r7.w, r7.xyzx, r13.xyzx
  dp3_sat r9.w, r7.xyzx, r12.xyzx
  mul r12.xyz, r2.zzzz, r6.xyzx
  mad r12.xyz, r5.wwww, r2.yyyy, r12.xyzx
  add r5.w, r2.x, l(1.000000)
  mul r5.w, r5.w, l(0.500000)
  mul r10.z, r2.x, r2.x
  add r13.xyz, -r12.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
  add r3.z, -r3.z, l(1.000000)
  max r3.z, r3.z, l(0.000100)
  mul r10.w, r3.z, r3.z
  mul r10.zw, r10.zzzw, r10.zzzw
  mul r3.z, r3.z, r10.w
  mad r16.xyz, r13.xyzx, r3.zzzz, r12.xyzx
  mul r3.z, r5.w, r5.w
  mad r5.w, -r1.w, r3.z, r1.w
  mad r5.w, r5.w, r1.w, r3.z
  sqrt r5.w, r5.w
  mad r10.w, -r9.w, r3.z, r9.w
  mad r10.w, r10.w, r9.w, r3.z
  sqrt r10.w, r10.w
  mul r10.w, r1.w, r10.w
  mad r9.w, r9.w, r5.w, r10.w
  rcp r9.w, r9.w
  mul r9.w, r9.w, l(0.500000)
  mad r10.w, r7.w, r10.z, -r7.w
  mad r7.w, r10.w, r7.w, l(1.000000)
  mul r7.w, r7.w, r7.w
  mul r7.w, r7.w, l(3.141593)
  rcp r7.w, r7.w
  mul r7.w, r7.w, r10.z
  mul r16.xyz, r9.wwww, r16.xyzx
  mul r16.xyz, r7.wwww, r16.xyzx
  mov r17.x, cb13[0].z
  mov r17.y, cb13[1].z
  mov r17.z, cb13[2].z
  mul r15.xyz, r15.xyzx, r17.xyzx
  mul r15.xyz, r4.wwww, r15.xyzx
  mul r16.xyz, r16.xyzx, r17.xyzx
  mul r16.xyz, r4.wwww, r16.xyzx
  mul r15.xyz, r3.xxxx, r15.xyzx
  mul r16.xyz, r3.xxxx, r16.xyzx
  ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r17.xy, r3.y, l(0), t17.xyxx
  and r4.w, r17.y, l(0x0000ffff)
  ishr r7.w, r17.y, l(16)
  mov r17.yzw, r15.xxyz
  mov r18.xyz, r16.xyzx
  mov r9.w, r17.x
  mov r10.w, l(0)
  loop 
    uge r11.w, r10.w, r4.w
    breakc_nz r11.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r11.w, r9.w, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyzw, r11.w, l(0), t19.xyzw
    add r19.xyz, -r4.xyzx, r19.xyzx
    dp3 r12.w, r19.xyzx, r19.xyzx
    mul r13.w, r19.w, r19.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 r19.xyz, r14.wwww, r19.xyzx
      dp3_sat r14.w, r7.xyzx, r19.xyzx
      lt r15.w, l(0.000000), r14.w
      if_nz r15.w
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyz, r11.w, l(16), t19.xyzx
        mad r21.xyz, r8.xyzx, r2.wwww, r19.xyzx
        dp3 r11.w, r21.xyzx, r21.xyzx
        max r11.w, r11.w, l(0.000000)
        rsq r11.w, r11.w
        mul r21.xyz, r11.wwww, r21.xyzx
        dp3_sat r11.w, r19.xyzx, r21.xyzx
        dp3_sat r15.w, r7.xyzx, r21.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 r19.xyz, r12.wwww, r20.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, r8.w, l(1.000000)
        mul r12.w, r12.w, r13.w
        mul r12.w, r6.w, r12.w
        mul r12.w, r12.w, l(0.318310)
        mul r20.xyz, r12.wwww, r14.xyzx
        mad r17.yzw, r19.xxyz, r20.xxyz, r17.yyzw
        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 r20.xyz, r13.xyzx, r11.wwww, r12.xyzx
        mad r11.w, -r14.w, r3.z, r14.w
        mad r11.w, r11.w, r14.w, r3.z
        sqrt r11.w, r11.w
        mul r11.w, r1.w, r11.w
        mad r11.w, r14.w, r5.w, r11.w
        rcp r11.w, r11.w
        mul r11.w, r11.w, l(0.500000)
        mad r12.w, r15.w, r10.z, -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, r10.z, r12.w
        mul r20.xyz, r11.wwww, r20.xyzx
        mul r20.xyz, r12.wwww, r20.xyzx
        mad r18.xyz, r19.xyzx, r20.xyzx, r18.xyzx
      endif 
    endif 
    iadd r9.w, r9.w, l(1)
    iadd r10.w, r10.w, l(1)
  endloop 
  mov r15.xyz, r17.yzwy
  mov r16.xyz, r18.xyzx
  mov r4.w, r9.w
  mov r10.w, l(0)
  loop 
    uge r11.w, r10.w, r7.w
    breakc_nz r11.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r11.w, r4.w, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyzw, r11.w, l(0), t19.xyzw
    add r19.xyz, -r4.xyzx, r19.xyzx
    dp3 r12.w, r19.xyzx, r19.xyzx
    mul r13.w, r19.w, r19.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 r19.xyz, r14.wwww, r19.xyzx
      dp3_sat r14.w, r7.xyzx, r19.xyzx
      lt r15.w, l(0.000000), r14.w
      if_nz r15.w
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r11.w, l(16), t19.xyzw
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r21.xyzw, r11.w, l(32), t19.xyzw
        mad r22.xyz, r8.xyzx, r2.wwww, r19.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, r19.xyzx, r22.xyzx
        dp3_sat r15.w, r7.xyzx, r22.xyzx
        dp3 r16.w, r21.xyzx, r21.xyzx
        rsq r16.w, r16.w
        mul r21.xyz, r16.wwww, r21.xyzx
        dp3 r16.w, -r19.xyzx, r21.xyzx
        lt r17.x, r20.w, r16.w
        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
        add r13.w, -r20.w, r16.w
        add r16.w, -r20.w, r21.w
        max r16.w, r16.w, l(0.000001)
        div_sat r13.w, r13.w, r16.w
        mul r13.w, r13.w, r13.w
        mul r12.w, r12.w, r13.w
        mul r12.w, r12.w, r14.w
        and r12.w, r12.w, r17.x
        mul r12.w, r12.w, l(0.318310)
        mul r19.xyz, r12.wwww, r20.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, r8.w, l(1.000000)
        mul r12.w, r12.w, r13.w
        mul r12.w, r6.w, r12.w
        mul r12.w, r12.w, l(0.318310)
        mul r20.xyz, r12.wwww, r14.xyzx
        mad r15.xyz, r19.xyzx, r20.xyzx, r15.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 r20.xyz, r13.xyzx, r11.wwww, r12.xyzx
        mad r11.w, -r14.w, r3.z, r14.w
        mad r11.w, r11.w, r14.w, r3.z
        sqrt r11.w, r11.w
        mul r11.w, r1.w, r11.w
        mad r11.w, r14.w, r5.w, r11.w
        rcp r11.w, r11.w
        mul r11.w, r11.w, l(0.500000)
        mad r12.w, r15.w, r10.z, -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, r10.z, r12.w
        mul r20.xyz, r11.wwww, r20.xyzx
        mul r20.xyz, r12.wwww, r20.xyzx
        mad r16.xyz, r19.xyzx, r20.xyzx, r16.xyzx
      endif 
    endif 
    iadd r4.w, r4.w, l(1)
    iadd r10.w, r10.w, 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 r12.x, r0.x, l(4080.000000), r1.w
  frc r0.x, r0.z
  mad r12.y, r0.x, l(4096.000000), r0.y
  mad r0.xy, r12.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 r12.xyz, -|r0.xyxx|, l(1.000000, 1.000000, 1.000000, 0.000000)
  add r13.z, -|r0.y|, r12.x
  ge r0.z, r13.z, l(0.000000)
  ge r10.zw, r0.xxxy, l(0.000000, 0.000000, 0.000000, 0.000000)
  movc r10.zw, r10.zzzw, l(0,0,1.000000,1.000000), l(0,0,-1.000000,-1.000000)
  mul r10.zw, r10.zzzw, r12.yyyz
  movc r13.xy, r0.zzzz, r0.xyxx, r10.zwzz
  dp3 r0.x, r13.xyzx, r13.xyzx
  rsq r0.x, r0.x
  mul r0.xyz, r0.xxxx, r13.xyzx
  dp3 r12.x, cb0[3].xyzx, r0.xyzx
  dp3 r12.y, cb0[4].xyzx, r0.xyzx
  dp3 r12.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 r13.x, cb13[0].x
  mov r13.y, cb13[1].x
  mov r13.z, cb13[2].x
  mad r14.xyz, r8.xyzx, r2.wwww, r13.xyzx
  dp3 r0.y, r14.xyzx, r14.xyzx
  rsq r0.y, r0.y
  mul r14.xyz, r0.yyyy, r14.xyzx
  dp3_sat r0.y, r13.xyzx, r14.xyzx
  dp3_sat r0.z, r7.xyzx, r13.xyzx
  add r1.w, -r2.z, l(1.000000)
  mul r14.xyz, r6.xyzx, r1.wwww
  mad r3.z, 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 r4.w, -r0.z, 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 r4.w, r0.y, r4.w, l(1.000000)
  add r5.w, -r0.x, 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 r0.y, r0.y, r5.w, l(1.000000)
  mul r0.y, r0.y, r4.w
  mul r0.y, r3.z, r0.y
  mul r0.y, r0.y, l(0.318310)
  mul r17.xyz, r0.yyyy, r14.xyzx
  dp3 r0.y, r13.xyzx, r9.xyzx
  mad r18.xyz, -r0.yyyy, r13.xyzx, r9.xyzx
  lt r0.y, r0.y, l(0.999989)
  dp3 r4.w, r18.xyzx, r18.xyzx
  rsq r4.w, r4.w
  mul r18.xyz, r4.wwww, r18.xyzx
  mul r18.xyz, r18.xyzx, l(0.004590, 0.004590, 0.004590, 0.000000)
  mad r13.xyz, r13.xyzx, l(0.999989, 0.999989, 0.999989, 0.000000), r18.xyzx
  dp3 r4.w, r13.xyzx, r13.xyzx
  rsq r4.w, r4.w
  mul r13.xyz, r4.wwww, r13.xyzx
  movc r9.xyz, r0.yyyy, r13.xyzx, r9.xyzx
  mad r13.xyz, r8.xyzx, r2.wwww, r9.xyzx
  dp3 r0.y, r13.xyzx, r13.xyzx
  rsq r0.y, r0.y
  mul r13.xyz, r0.yyyy, r13.xyzx
  dp3_sat r0.y, r9.xyzx, r13.xyzx
  dp3_sat r4.w, r7.xyzx, r13.xyzx
  dp3_sat r6.w, r7.xyzx, r9.xyzx
  dp3 r7.w, r13.xyzx, r12.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 r13.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, -r6.w, r0.y, r6.w
  mad r2.z, r2.z, r6.w, r0.y
  sqrt r2.z, r2.z
  mul r2.z, r0.x, r2.z
  mad r2.z, r6.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 r6.w, r2.y, r0.w
  min r6.w, r6.w, l(1.000000)
  max r6.w, r6.w, l(0.001000)
  mul r0.w, r0.w, r2.y
  max r0.w, r0.w, l(0.001000)
  mul r2.y, r7.w, r7.w
  mad r7.w, -r7.w, r7.w, l(1.000000)
  mad r7.w, -r4.w, r4.w, r7.w
  mul r8.w, r6.w, r6.w
  div r2.y, r2.y, r8.w
  mul r9.w, r0.w, r0.w
  div r7.w, r7.w, r9.w
  add r2.y, r2.y, r7.w
  mad r2.y, r4.w, r4.w, r2.y
  mul r0.w, r0.w, r6.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 r13.xyz, r2.zzzz, r13.xyzx
  mul r13.xyz, r2.yyyy, r13.xyzx
  mov r18.x, cb13[0].z
  mov r18.y, cb13[1].z
  mov r18.z, cb13[2].z
  mul r17.xyz, r17.xyzx, r18.xyzx
  mul r17.xyz, r0.zzzz, r17.xyzx
  mul r13.xyz, r13.xyzx, r18.xyzx
  mul r13.xyz, r0.zzzz, r13.xyzx
  mul r17.xyz, r3.xxxx, r17.xyzx
  mul r13.xyz, r3.xxxx, r13.xyzx
  ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r2.yz, r3.y, l(0), t17.xxyx
  and r0.z, r2.z, l(0x0000ffff)
  ishr r2.z, r2.z, l(16)
  mov r18.xyz, r17.xyzx
  mov r19.xyz, r13.xyzx
  mov r3.x, r2.y
  mov r3.y, l(0)
  loop 
    uge r4.w, r3.y, r0.z
    breakc_nz r4.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r4.w, r3.x, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r4.w, l(0), t19.xyzw
    add r20.xyz, -r4.xyzx, r20.xyzx
    dp3 r6.w, r20.xyzx, r20.xyzx
    mul r7.w, r20.w, r20.w
    rcp r10.z, r7.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, r4.w, l(16), t19.xyzx
        mad r22.xyz, r8.xyzx, r2.wwww, r20.xyzx
        dp3 r4.w, r22.xyzx, r22.xyzx
        max r4.w, r4.w, l(0.000000)
        rsq r4.w, r4.w
        mul r22.xyz, r4.wwww, r22.xyzx
        dp3_sat r4.w, r20.xyzx, r22.xyzx
        dp3_sat r10.w, r7.xyzx, r22.xyzx
        mul r7.w, r6.w, r7.w
        mad r7.w, -r7.w, r7.w, l(1.000000)
        max r7.w, r7.w, l(0.000000)
        mul r7.w, r7.w, r7.w
        max r6.w, r6.w, l(0.000100)
        rcp r6.w, r6.w
        mul r6.w, r6.w, r7.w
        mul r6.w, r6.w, r10.z
        mul r6.w, r6.w, l(0.079577)
        dp3 r7.w, r22.xyzx, r12.xyzx
        mul r20.xyz, r6.wwww, r21.xyzx
        mul r6.w, r4.w, r4.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, r5.w, l(1.000000)
        mul r6.w, r6.w, r11.w
        mul r6.w, r3.z, r6.w
        mul r6.w, r6.w, l(0.318310)
        mul r21.xyz, r6.wwww, r14.xyzx
        mad r18.xyz, r20.xyzx, r21.xyzx, r18.xyzx
        add r4.w, -r4.w, l(1.000000)
        max r4.w, r4.w, l(0.000100)
        mul r6.w, r4.w, r4.w
        mul r6.w, r6.w, r6.w
        mul r4.w, r4.w, r6.w
        mad r21.xyz, r9.xyzx, r4.wwww, r6.xyzx
        mad r4.w, -r10.z, r0.y, r10.z
        mad r4.w, r4.w, r10.z, r0.y
        sqrt r4.w, r4.w
        mul r4.w, r0.x, r4.w
        mad r4.w, r10.z, r1.w, r4.w
        rcp r4.w, r4.w
        mul r4.w, r4.w, l(0.500000)
        mul r6.w, r7.w, r7.w
        mad r7.w, -r7.w, r7.w, l(1.000000)
        mad r7.w, -r10.w, r10.w, r7.w
        div r6.w, r6.w, r8.w
        div r7.w, r7.w, r9.w
        add r6.w, r6.w, r7.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, r4.wwww, r21.xyzx
        mul r21.xyz, r6.wwww, r21.xyzx
        mad r19.xyz, r20.xyzx, r21.xyzx, r19.xyzx
      endif 
    endif 
    iadd r3.xy, r3.xyxx, l(1, 1, 0, 0)
  endloop 
  mov r15.xyz, r18.xyzx
  mov r16.xyz, r19.xyzx
  mov r0.z, r3.x
  mov r2.y, l(0)
  loop 
    uge r3.y, r2.y, r2.z
    breakc_nz r3.y
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r3.y, r0.z, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r13.xyzw, r3.y, l(0), t19.xyzw
    add r13.xyz, -r4.xyzx, r13.xyzx
    dp3 r4.w, r13.xyzx, r13.xyzx
    mul r6.w, r13.w, r13.w
    rcp r7.w, r6.w
    lt r7.w, r4.w, r7.w
    if_nz r7.w
      max r7.w, r4.w, l(0.000000)
      rsq r7.w, r7.w
      mul r13.xyz, r7.wwww, r13.xyzx
      dp3_sat r7.w, r7.xyzx, r13.xyzx
      lt r10.z, l(0.000000), r7.w
      if_nz r10.z
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r17.xyzw, r3.y, l(16), t19.xyzw
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r3.y, l(32), t19.xyzw
        mad r21.xyz, r8.xyzx, r2.wwww, r13.xyzx
        dp3 r3.y, r21.xyzx, r21.xyzx
        max r3.y, r3.y, l(0.000000)
        rsq r3.y, r3.y
        mul r21.xyz, r3.yyyy, r21.xyzx
        dp3_sat r3.y, r13.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, -r13.xyzx, r20.xyzx
        lt r11.w, r17.w, r10.w
        mul r6.w, r4.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 r4.w, r4.w, l(0.000100)
        rcp r4.w, r4.w
        mul r4.w, r4.w, r6.w
        add r6.w, -r17.w, r10.w
        add r10.w, -r17.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 r4.w, r4.w, r6.w
        mul r4.w, r4.w, r7.w
        and r4.w, r4.w, r11.w
        mul r4.w, r4.w, l(0.318310)
        dp3 r6.w, r21.xyzx, r12.xyzx
        mul r13.xyz, r4.wwww, r17.xyzx
        mul r4.w, r3.y, r3.y
        dp2 r4.w, r4.wwww, r2.xxxx
        mad r4.w, r2.x, l(0.500000), r4.w
        add r4.w, r4.w, l(-1.000000)
        add r10.w, -r7.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, r4.w, r10.w, l(1.000000)
        mad r4.w, r4.w, r5.w, l(1.000000)
        mul r4.w, r4.w, r10.w
        mul r4.w, r3.z, r4.w
        mul r4.w, r4.w, l(0.318310)
        mul r17.xyz, r4.wwww, r14.xyzx
        mad r15.xyz, r13.xyzx, r17.xyzx, r15.xyzx
        add r3.y, -r3.y, l(1.000000)
        max r3.y, r3.y, l(0.000100)
        mul r4.w, r3.y, r3.y
        mul r4.w, r4.w, r4.w
        mul r3.y, r3.y, r4.w
        mad r17.xyz, r9.xyzx, r3.yyyy, r6.xyzx
        mad r3.y, -r7.w, r0.y, r7.w
        mad r3.y, r3.y, r7.w, r0.y
        sqrt r3.y, r3.y
        mul r3.y, r0.x, r3.y
        mad r3.y, r7.w, r1.w, r3.y
        rcp r3.y, r3.y
        mul r3.y, r3.y, l(0.500000)
        mul r4.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 r4.w, r4.w, r8.w
        div r6.w, r6.w, r9.w
        add r4.w, r4.w, r6.w
        mad r4.w, r10.z, r10.z, r4.w
        mul r4.w, r4.w, r4.w
        mul r4.w, r0.w, r4.w
        rcp r4.w, r4.w
        mul r17.xyz, r3.yyyy, r17.xyzx
        mul r17.xyz, r4.wwww, r17.xyzx
        mad r16.xyz, r13.xyzx, r17.xyzx, r16.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, r16.xxyz
mad r0.xyz, r15.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, r11.xyzx, r10.yyyy, r0.xyzx
mov o0.w, l(1.000000)
ret 
// Approximately 703 instruction slots used

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


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